From acc837f31b8cee4819be4fc0e71cae4f944148d5 Mon Sep 17 00:00:00 2001 From: Halden Lin Date: Sun, 3 Feb 2019 15:31:04 -0800 Subject: [PATCH 01/25] added graphscape support and multi-view comparison, (not complete ruleset yet) --- asp/assign_compare_weights.lp | 139 ++++++++++++++++ asp/compare.lp | 31 ++++ asp/compare_weights.lp | 138 ++++++++++++++++ asp/define.lp | 81 ++++----- asp/generate.lp | 22 +-- asp/hard.lp | 148 ++++++++--------- asp/optimize.lp | 2 +- asp/output.lp | 24 +-- asp/process_compare.py | 35 ++++ asp/soft.lp | 302 +++++++++++++++++----------------- draco/js.py | 1 - draco/run.py | 9 +- examples/multi.py | 104 ++++++++++++ js/src/asp2vl.ts | 28 +++- js/src/cql2asp.ts | 24 +-- 15 files changed, 782 insertions(+), 306 deletions(-) create mode 100644 asp/assign_compare_weights.lp create mode 100644 asp/compare.lp create mode 100644 asp/compare_weights.lp create mode 100644 asp/process_compare.py create mode 100644 examples/multi.py diff --git a/asp/assign_compare_weights.lp b/asp/assign_compare_weights.lp new file mode 100644 index 0000000..b6303a8 --- /dev/null +++ b/asp/assign_compare_weights.lp @@ -0,0 +1,139 @@ +%% GENERATED FILE. DO NOT EDIT. + +compare_weight(edit_area_bar,edit_area_bar_weight). +compare_weight(edit_area_line,edit_area_line_weight). +compare_weight(edit_area_point,edit_area_point_weight). +compare_weight(edit_area_text,edit_area_text_weight). +compare_weight(edit_area_tick,edit_area_tick_weight). +compare_weight(edit_bar_line,edit_bar_line_weight). +compare_weight(edit_bar_point,edit_bar_point_weight). +compare_weight(edit_bar_text,edit_bar_text_weight). +compare_weight(edit_bar_tick,edit_bar_tick_weight). +compare_weight(edit_line_point,edit_line_point_weight). +compare_weight(edit_line_text,edit_line_text_weight). +compare_weight(edit_line_tick,edit_line_tick_weight). +compare_weight(edit_point_text,edit_point_text_weight). +compare_weight(edit_point_tick,edit_point_tick_weight). +compare_weight(edit_text_tick,edit_text_tick_weight). +compare_weight(edit_scale,edit_scale_weight). +compare_weight(edit_sort,edit_sort_weight). +compare_weight(edit_bin,edit_bin_weight). +compare_weight(edit_aggregate,edit_aggregate_weight). +compare_weight(edit_add_filter,edit_add_filter_weight). +compare_weight(edit_remove_filter,edit_remove_filter_weight). +compare_weight(edit_modify_filter,edit_modify_filter_weight). +compare_weight(edit_add_x,edit_add_x_weight). +compare_weight(edit_add_y,edit_add_y_weight). +compare_weight(edit_add_color,edit_add_color_weight). +compare_weight(edit_add_shape,edit_add_shape_weight). +compare_weight(edit_add_size,edit_add_size_weight). +compare_weight(edit_add_row,edit_add_row_weight). +compare_weight(edit_add_column,edit_add_column_weight). +compare_weight(edit_add_text,edit_add_text_weight). +compare_weight(edit_add_x_count,edit_add_x_count_weight). +compare_weight(edit_add_y_count,edit_add_y_count_weight). +compare_weight(edit_add_color_count,edit_add_color_count_weight). +compare_weight(edit_add_shape_count,edit_add_shape_count_weight). +compare_weight(edit_add_size_count,edit_add_size_count_weight). +compare_weight(edit_add_row_count,edit_add_row_count_weight). +compare_weight(edit_add_column_count,edit_add_column_count_weight). +compare_weight(edit_add_text_count,edit_add_text_count_weight). +compare_weight(edit_remove_x_count,edit_remove_x_count_weight). +compare_weight(edit_remove_y_count,edit_remove_y_count_weight). +compare_weight(edit_remove_color_count,edit_remove_color_count_weight). +compare_weight(edit_remove_shape_count,edit_remove_shape_count_weight). +compare_weight(edit_remove_size_count,edit_remove_size_count_weight). +compare_weight(edit_remove_row_count,edit_remove_row_count_weight). +compare_weight(edit_remove_column_count,edit_remove_column_count_weight). +compare_weight(edit_remove_text_count,edit_remove_text_count_weight). +compare_weight(edit_remove_x,edit_remove_x_weight). +compare_weight(edit_remove_y,edit_remove_y_weight). +compare_weight(edit_remove_color,edit_remove_color_weight). +compare_weight(edit_remove_shape,edit_remove_shape_weight). +compare_weight(edit_remove_size,edit_remove_size_weight). +compare_weight(edit_remove_row,edit_remove_row_weight). +compare_weight(edit_remove_column,edit_remove_column_weight). +compare_weight(edit_remove_text,edit_remove_text_weight). +compare_weight(edit_modify_x,edit_modify_x_weight). +compare_weight(edit_modify_y,edit_modify_y_weight). +compare_weight(edit_modify_color,edit_modify_color_weight). +compare_weight(edit_modify_shape,edit_modify_shape_weight). +compare_weight(edit_modify_size,edit_modify_size_weight). +compare_weight(edit_modify_row,edit_modify_row_weight). +compare_weight(edit_modify_column,edit_modify_column_weight). +compare_weight(edit_modify_text,edit_modify_text_weight). +compare_weight(edit_modify_x_add_count,edit_modify_x_add_count_weight). +compare_weight(edit_modify_y_add_count,edit_modify_y_add_count_weight). +compare_weight(edit_modify_color_add_count,edit_modify_color_add_count_weight). +compare_weight(edit_modify_shape_add_count,edit_modify_shape_add_count_weight). +compare_weight(edit_modify_size_add_count,edit_modify_size_add_count_weight). +compare_weight(edit_modify_row_add_count,edit_modify_row_add_count_weight). +compare_weight(edit_modify_column_add_count,edit_modify_column_add_count_weight). +compare_weight(edit_modify_text_add_count,edit_modify_text_add_count_weight). +compare_weight(edit_modify_x_remove_count,edit_modify_x_remove_count_weight). +compare_weight(edit_modify_y_remove_count,edit_modify_y_remove_count_weight). +compare_weight(edit_modify_color_remove_count,edit_modify_color_remove_count_weight). +compare_weight(edit_modify_shape_remove_count,edit_modify_shape_remove_count_weight). +compare_weight(edit_modify_size_remove_count,edit_modify_size_remove_count_weight). +compare_weight(edit_modify_row_remove_count,edit_modify_row_remove_count_weight). +compare_weight(edit_modify_column_remove_count,edit_modify_column_remove_count_weight). +compare_weight(edit_modify_text_remove_count,edit_modify_text_remove_count_weight). +compare_weight(edit_move_x_row,edit_move_x_row_weight). +compare_weight(edit_move_x_column,edit_move_x_column_weight). +compare_weight(edit_move_x_size,edit_move_x_size_weight). +compare_weight(edit_move_x_shape,edit_move_x_shape_weight). +compare_weight(edit_move_x_color,edit_move_x_color_weight). +compare_weight(edit_move_x_y,edit_move_x_y_weight). +compare_weight(edit_move_x_text,edit_move_x_text_weight). +compare_weight(edit_move_y_row,edit_move_y_row_weight). +compare_weight(edit_move_y_column,edit_move_y_column_weight). +compare_weight(edit_move_y_size,edit_move_y_size_weight). +compare_weight(edit_move_y_shape,edit_move_y_shape_weight). +compare_weight(edit_move_y_color,edit_move_y_color_weight). +compare_weight(edit_move_y_x,edit_move_y_x_weight). +compare_weight(edit_move_y_text,edit_move_y_text_weight). +compare_weight(edit_move_color_row,edit_move_color_row_weight). +compare_weight(edit_move_color_column,edit_move_color_column_weight). +compare_weight(edit_move_color_size,edit_move_color_size_weight). +compare_weight(edit_move_color_shape,edit_move_color_shape_weight). +compare_weight(edit_move_color_y,edit_move_color_y_weight). +compare_weight(edit_move_color_x,edit_move_color_x_weight). +compare_weight(edit_move_color_text,edit_move_color_text_weight). +compare_weight(edit_move_shape_row,edit_move_shape_row_weight). +compare_weight(edit_move_shape_column,edit_move_shape_column_weight). +compare_weight(edit_move_shape_size,edit_move_shape_size_weight). +compare_weight(edit_move_shape_color,edit_move_shape_color_weight). +compare_weight(edit_move_shape_y,edit_move_shape_y_weight). +compare_weight(edit_move_shape_x,edit_move_shape_x_weight). +compare_weight(edit_move_shape_text,edit_move_shape_text_weight). +compare_weight(edit_move_size_row,edit_move_size_row_weight). +compare_weight(edit_move_size_column,edit_move_size_column_weight). +compare_weight(edit_move_size_shape,edit_move_size_shape_weight). +compare_weight(edit_move_size_color,edit_move_size_color_weight). +compare_weight(edit_move_size_y,edit_move_size_y_weight). +compare_weight(edit_move_size_x,edit_move_size_x_weight). +compare_weight(edit_move_size_text,edit_move_size_text_weight). +compare_weight(edit_move_text_row,edit_move_text_row_weight). +compare_weight(edit_move_text_column,edit_move_text_column_weight). +compare_weight(edit_move_text_shape,edit_move_text_shape_weight). +compare_weight(edit_move_text_color,edit_move_text_color_weight). +compare_weight(edit_move_text_y,edit_move_text_y_weight). +compare_weight(edit_move_text_x,edit_move_text_x_weight). +compare_weight(edit_move_text_size,edit_move_text_size_weight). +compare_weight(edit_move_column_row,edit_move_column_row_weight). +compare_weight(edit_move_column_size,edit_move_column_size_weight). +compare_weight(edit_move_column_shape,edit_move_column_shape_weight). +compare_weight(edit_move_column_color,edit_move_column_color_weight). +compare_weight(edit_move_column_y,edit_move_column_y_weight). +compare_weight(edit_move_column_x,edit_move_column_x_weight). +compare_weight(edit_move_column_text,edit_move_column_text_weight). +compare_weight(edit_move_row_column,edit_move_row_column_weight). +compare_weight(edit_move_row_size,edit_move_row_size_weight). +compare_weight(edit_move_row_shape,edit_move_row_shape_weight). +compare_weight(edit_move_row_color,edit_move_row_color_weight). +compare_weight(edit_move_row_y,edit_move_row_y_weight). +compare_weight(edit_move_row_x,edit_move_row_x_weight). +compare_weight(edit_move_row_text,edit_move_row_text_weight). +compare_weight(edit_swap_x_y,edit_swap_x_y_weight). +compare_weight(edit_swap_row_column,edit_swap_row_column_weight). +compare_weight(edit_ceiling,edit_ceiling_weight). diff --git a/asp/compare.lp b/asp/compare.lp new file mode 100644 index 0000000..d3c16d4 --- /dev/null +++ b/asp/compare.lp @@ -0,0 +1,31 @@ +%% FILE GENERATED BY graphscapeToAsp.js, DO NOT MODIFY %% +compare(edit_area_bar,V1,V2) :- mark(V1,area), mark(V2,bar). +compare(edit_area_line,V1,V2) :- mark(V1,area), mark(V2,line). +compare(edit_area_point,V1,V2) :- mark(V1,area), mark(V2,point). +compare(edit_area_text,V1,V2) :- mark(V1,area), mark(V2,text). +compare(edit_area_tick,V1,V2) :- mark(V1,area), mark(V2,tick). +compare(edit_bar_line,V1,V2) :- mark(V1,bar), mark(V2,line). +compare(edit_bar_point,V1,V2) :- mark(V1,bar), mark(V2,point). +compare(edit_bar_text,V1,V2) :- mark(V1,bar), mark(V2,text). +compare(edit_bar_tick,V1,V2) :- mark(V1,bar), mark(V2,tick). +compare(edit_line_point,V1,V2) :- mark(V1,line), mark(V2,point). +compare(edit_line_text,V1,V2) :- mark(V1,line), mark(V2,text). +compare(edit_line_tick,V1,V2) :- mark(V1,line), mark(V2,tick). +compare(edit_point_text,V1,V2) :- mark(V1,point), mark(V2,text). +compare(edit_point_tick,V1,V2) :- mark(V1,point), mark(V2,tick). +compare(edit_text_tick,V1,V2) :- mark(V1,text), mark(V2,tick). + +compare(edit_scale,V1,V2) :- visualization(V1), visualization(V2), log(V1,E), not log(V2,E). +compare(edit_scale,V1,V2) :- visualization(V1), visualization(V2), zero(V1,E), not zero(V2,E). +compare(edit_scale,V1,V2) :- visualization(V1), visualization(V2), not log(V1,E), log(V2,E). +compare(edit_scale,V1,V2) :- visualization(V1), visualization(V2), not zero(V1,E), zero(V2,E). + +compare(edit_bin,V1,V2) :- visualization(V1), visualization(V2), bin(V1,E,_), not bin(V2,E,_). +compare(edit_bin,V1,V2) :- visualization(V1), visualization(V2), not bin(V1,E,_), bin(V2,E,_). + +compare(edit_aggregate,V1,V2) :- visualization(V1), visualization(V2), aggregate(V1,E,A1), aggregate(V2,E,A2), A1 != A2. +compare(edit_aggregate,V1,V2) :- visualization(V1), visualization(V2), aggregate(V1,E,_), not aggregate(V2,E,_). +compare(edit_aggregate,V1,V2) :- visualization(V1), visualization(V2), not aggregate(V1,E,_), aggregate(V2,E,_). + +compare(edit_move_y_color,V1,V2) :- visualization(V1), visualization(V2), channel(V1,E,y), channel(V2,E,color). +compare(edit_move_x_color,V1,V2) :- visualization(V1), visualization(V2), channel(V1,E,x), channel(V2,E,color). \ No newline at end of file diff --git a/asp/compare_weights.lp b/asp/compare_weights.lp new file mode 100644 index 0000000..6b6f071 --- /dev/null +++ b/asp/compare_weights.lp @@ -0,0 +1,138 @@ +%% FILE GENERATED BY graphscapeToAsp.js, DO NOT MODIFY %% +#const edit_area_bar_weight = 3. +#const edit_area_line_weight = 2. +#const edit_area_point_weight = 4. +#const edit_area_text_weight = 8. +#const edit_area_tick_weight = 4. +#const edit_bar_line_weight = 4. +#const edit_bar_point_weight = 2. +#const edit_bar_text_weight = 6. +#const edit_bar_tick_weight = 2. +#const edit_line_point_weight = 3. +#const edit_line_text_weight = 7. +#const edit_line_tick_weight = 3. +#const edit_point_text_weight = 5. +#const edit_point_tick_weight = 1. +#const edit_text_tick_weight = 5. +#const edit_scale_weight = 60. +#const edit_sort_weight = 61. +#const edit_bin_weight = 62. +#const edit_aggregate_weight = 63. +#const edit_add_filter_weight = 65. +#const edit_remove_filter_weight = 65. +#const edit_modify_filter_weight = 64. +#const edit_add_x_weight = 459. +#const edit_add_y_weight = 459. +#const edit_add_color_weight = 455. +#const edit_add_shape_weight = 451. +#const edit_add_size_weight = 453. +#const edit_add_row_weight = 457. +#const edit_add_column_weight = 457. +#const edit_add_text_weight = 449. +#const edit_add_x_count_weight = 458. +#const edit_add_y_count_weight = 458. +#const edit_add_color_count_weight = 454. +#const edit_add_shape_count_weight = 450. +#const edit_add_size_count_weight = 452. +#const edit_add_row_count_weight = 456. +#const edit_add_column_count_weight = 456. +#const edit_add_text_count_weight = 448. +#const edit_remove_x_count_weight = 458. +#const edit_remove_y_count_weight = 458. +#const edit_remove_color_count_weight = 454. +#const edit_remove_shape_count_weight = 450. +#const edit_remove_size_count_weight = 452. +#const edit_remove_row_count_weight = 456. +#const edit_remove_column_count_weight = 456. +#const edit_remove_text_count_weight = 448. +#const edit_remove_x_weight = 459. +#const edit_remove_y_weight = 459. +#const edit_remove_color_weight = 455. +#const edit_remove_shape_weight = 451. +#const edit_remove_size_weight = 453. +#const edit_remove_row_weight = 457. +#const edit_remove_column_weight = 457. +#const edit_remove_text_weight = 449. +#const edit_modify_x_weight = 471. +#const edit_modify_y_weight = 471. +#const edit_modify_color_weight = 467. +#const edit_modify_shape_weight = 463. +#const edit_modify_size_weight = 465. +#const edit_modify_row_weight = 469. +#const edit_modify_column_weight = 469. +#const edit_modify_text_weight = 461. +#const edit_modify_x_add_count_weight = 470. +#const edit_modify_y_add_count_weight = 470. +#const edit_modify_color_add_count_weight = 466. +#const edit_modify_shape_add_count_weight = 462. +#const edit_modify_size_add_count_weight = 464. +#const edit_modify_row_add_count_weight = 468. +#const edit_modify_column_add_count_weight = 468. +#const edit_modify_text_add_count_weight = 460. +#const edit_modify_x_remove_count_weight = 470. +#const edit_modify_y_remove_count_weight = 470. +#const edit_modify_color_remove_count_weight = 466. +#const edit_modify_shape_remove_count_weight = 462. +#const edit_modify_size_remove_count_weight = 464. +#const edit_modify_row_remove_count_weight = 468. +#const edit_modify_column_remove_count_weight = 468. +#const edit_modify_text_remove_count_weight = 460. +#const edit_move_x_row_weight = 445. +#const edit_move_x_column_weight = 443. +#const edit_move_x_size_weight = 446. +#const edit_move_x_shape_weight = 446. +#const edit_move_x_color_weight = 446. +#const edit_move_x_y_weight = 444. +#const edit_move_x_text_weight = 446. +#const edit_move_y_row_weight = 443. +#const edit_move_y_column_weight = 445. +#const edit_move_y_size_weight = 446. +#const edit_move_y_shape_weight = 446. +#const edit_move_y_color_weight = 446. +#const edit_move_y_x_weight = 444. +#const edit_move_y_text_weight = 446. +#const edit_move_color_row_weight = 447. +#const edit_move_color_column_weight = 447. +#const edit_move_color_size_weight = 443. +#const edit_move_color_shape_weight = 443. +#const edit_move_color_y_weight = 446. +#const edit_move_color_x_weight = 446. +#const edit_move_color_text_weight = 443. +#const edit_move_shape_row_weight = 447. +#const edit_move_shape_column_weight = 447. +#const edit_move_shape_size_weight = 443. +#const edit_move_shape_color_weight = 443. +#const edit_move_shape_y_weight = 446. +#const edit_move_shape_x_weight = 446. +#const edit_move_shape_text_weight = 443. +#const edit_move_size_row_weight = 447. +#const edit_move_size_column_weight = 447. +#const edit_move_size_shape_weight = 443. +#const edit_move_size_color_weight = 443. +#const edit_move_size_y_weight = 446. +#const edit_move_size_x_weight = 446. +#const edit_move_size_text_weight = 443. +#const edit_move_text_row_weight = 447. +#const edit_move_text_column_weight = 447. +#const edit_move_text_shape_weight = 443. +#const edit_move_text_color_weight = 443. +#const edit_move_text_y_weight = 446. +#const edit_move_text_x_weight = 446. +#const edit_move_text_size_weight = 443. +#const edit_move_column_row_weight = 444. +#const edit_move_column_size_weight = 447. +#const edit_move_column_shape_weight = 447. +#const edit_move_column_color_weight = 447. +#const edit_move_column_y_weight = 445. +#const edit_move_column_x_weight = 443. +#const edit_move_column_text_weight = 447. +#const edit_move_row_column_weight = 444. +#const edit_move_row_size_weight = 447. +#const edit_move_row_shape_weight = 447. +#const edit_move_row_color_weight = 447. +#const edit_move_row_y_weight = 443. +#const edit_move_row_x_weight = 445. +#const edit_move_row_text_weight = 447. +#const edit_swap_x_y_weight = 442. +#const edit_swap_row_column_weight = 441. +#const edit_ceiling_weight = 1413. \ No newline at end of file diff --git a/asp/define.lp b/asp/define.lp index 0182c07..1cc89be 100644 --- a/asp/define.lp +++ b/asp/define.lp @@ -27,95 +27,96 @@ stacking(zero;normalize). % ====== Helpers ====== -discrete(E) :- type(E,(nominal;ordinal)). -discrete(E) :- bin(E,_). -continuous(E) :- encoding(E), not discrete(E). +discrete(V,E) :- type(V,E,(nominal;ordinal)). +discrete(V,E) :- bin(V,E,_). +continuous(V,E) :- encoding(V,E), not discrete(V,E). -channel_discrete(C) :- discrete(E), channel(E,C). -channel_continuous(C) :- continuous(E), channel(E,C). +channel_discrete(V,C) :- discrete(V,E), channel(V,E,C). +channel_continuous(V,C) :- continuous(V,E), channel(V,E,C). -ordered(E) :- type(E,(ordinal;quantitative)). +ordered(E) :- type(V,E,(ordinal;quantitative)). % Fields field(F) :- fieldtype(F,_). % Stacking is applied to the continuous x or y. -stack(EC,S) :- channel(EC,(x;y)), channel(ED,(x;y)), continuous(EC), discrete(ED), stack(S). +stack(V,EC,S) :- channel(V,EC,(x;y)), channel(V,ED,(x;y)), continuous(V,EC), discrete(V,ED), stack(V,S). % X and y are continuous. -stack(E,S) :- channel_continuous(x), channel(E,y), continuous(E), stack(S). +stack(E,S) :- channel_continuous(V,x), channel(V,E,y), continuous(V,E), stack(V,S). -stack(S) :- stack(_,S). +stack(V,S) :- encoding(V,E), stack(E,S). % Data properties -enc_cardinality(E,C) :- field(E,F), cardinality(F,C). -enc_entropy(E,EN) :- field(E,F), entropy(F,EN). -enc_interesting(E) :- field(E,F), interesting(F). -enc_extent(E,MIN,MAX) :- field(E,F), extent(F,MIN,MAX). +enc_cardinality(V,E,C) :- field(V,E,F), cardinality(F,C). +enc_entropy(V,E,EN) :- field(V,E,F), entropy(F,EN). +enc_interesting(V,E) :- field(V,E,F), interesting(F). +enc_extent(V,E,MIN,MAX) :- field(V,E,F), extent(F,MIN,MAX). % Cardinality of discrete field. A binned field has the cadinality of its field. -discrete_cardinality(E,CE) :- discrete(E), enc_cardinality(E,CE), channel(E,C), not bin(E,_). -discrete_cardinality(E,CB) :- channel(E,C), bin(E,CB). +discrete_cardinality(V,E,CE) :- discrete(V,E), enc_cardinality(V,E,CE), channel(V,E,C), not bin(V,E,_). +discrete_cardinality(V,E,CB) :- channel(V,E,C), bin(V,E,CB). % Define a fake soft/2 for all soft/1. -soft(F,_placeholder) :- soft(F). +soft(F,V,_placeholder) :- soft(F,V). % Silence warnings about properties never appearing in head. entropy(0,0) :- #false. interesting(0) :- #false. extent(0,0,0) :- #false. soft(0) :- #false. -task(value) :- #false. -task(summary) :- #false. +task(0,value) :- #false. +task(0,summary) :- #false. data(0) :- #false. +base(0) :- #false. % == Chart Types == % Continuous by continuous. -is_c_c :- channel_continuous(x), channel_continuous(y). +is_c_c(V) :- channel_continuous(V,x), channel_continuous(V,y). % Continuous by discrete (or continuous only). -is_c_d :- channel_continuous(x), not channel_continuous(y). -is_c_d :- channel_continuous(y), not channel_continuous(x). +is_c_d(V) :- channel_continuous(V,x), not channel_continuous(V,y). +is_c_d(V) :- channel_continuous(V,y), not channel_continuous(V,x). % Discrete by discrete. -is_d_d :- channel_discrete(x), channel_discrete(y). +is_d_d(V) :- channel_discrete(V,x), channel_discrete(V,y). % == Overlap == % The continuous variable is a measure (it is aggregated) and all other channels are .aggregated, or we use stack -> no overlap -non_pos_unaggregated :- channel(E,C), non_positional(C), not aggregate(E,_). -no_overlap :- is_c_d, continuous(E), channel(E,(x;y)), aggregate(E,_), not non_pos_unaggregated. -no_overlap :- is_c_d, stack(_). +non_pos_unaggregated(V) :- channel(V,E,C), non_positional(C), not aggregate(V,E,_). +no_overlap(V) :- is_c_d(V), continuous(V,E), channel(V,E,(x;y)), aggregate(V,E,_), not non_pos_unaggregated(V). +no_overlap(V) :- is_c_d(V), stack(V,_). % the size of the discrete positional encoding -discrete_size(S) :- is_c_d, x_y_cardinality(_,S). -discrete_size(1) :- is_c_d, channel_continuous(x), not channel(_,y). -discrete_size(1) :- is_c_d, channel_continuous(y), not channel(_,x). +discrete_size(V,S) :- is_c_d(V), x_y_cardinality(V,_,S). +discrete_size(V,1) :- is_c_d(V), channel_continuous(V,x), not channel(V,_,y). +discrete_size(V,1) :- is_c_d(V), channel_continuous(V,y), not channel(V,_,x). % Data size is as small as discrete dimension -> no overlap. -no_overlap :- is_c_d, num_rows(S), discrete_size(S). +no_overlap(V) :- is_c_d(V), num_rows(S), discrete_size(V,S). % We definitely overlap if the data size > discrete size. -overlap :- is_c_d, not no_overlap, num_rows(S1), discrete_size(S2), S1 > S2. +overlap(V) :- is_c_d(V), not no_overlap(V), num_rows(S1), discrete_size(V,S2), S1 > S2. % helpers to go from quadratic to linear number of grounding -x_y_cardinality(x,S) :- channel(E,x), discrete_cardinality(E,S). -x_y_cardinality(y,S) :- channel(E,y), discrete_cardinality(E,S). +x_y_cardinality(V,x,S) :- channel(V,E,x), discrete_cardinality(V,E,S). +x_y_cardinality(V,y,S) :- channel(V,E,y), discrete_cardinality(V,E,S). % No overlap if all other dimensions are aggregated. -discrete_size(S) :- is_d_d, x_y_cardinality(x,SX), x_y_cardinality(y,SY), S = SX*SY. -no_overlap :- is_d_d, not non_pos_unaggregated. -no_overlap :- is_d_d, num_rows(S1), discrete_size(S2), S1 <= S2. % This cannot guarantee no overlap. +discrete_size(V,S) :- is_d_d(V), x_y_cardinality(V,x,SX), x_y_cardinality(V,y,SY), S = SX*SY. +no_overlap(V) :- is_d_d(V), not non_pos_unaggregated(V). +no_overlap(V) :- is_d_d(V), num_rows(S1), discrete_size(V,S2), S1 <= S2. % This cannot guarantee no overlap. % We can guarantee overlap using this rule unless we are using row / column. -row_col :- channel(_,(row;column)). -overlap :- is_d_d, channel(E,C), not row_col, not no_overlap, num_rows(S1), discrete_size(S2), S1 > S2. +row_col(V) :- channel(V,_,(row;column)). +overlap(V) :- is_d_d(V), channel(V,E,C), not row_col(V), not no_overlap(V), num_rows(S1), discrete_size(V,S2), S1 > S2. % == Orientation == % Orientation tells us which one is the dependent and independent variable. -orientation(vertical) :- mark(bar;tick;area;line), channel_discrete(x). -orientation(vertical) :- mark(area;line), channel_continuous(x), channel_continuous(y). +orientation(V,vertical) :- mark(V,(bar;tick;area;line)), channel_discrete(V,x). +orientation(V,vertical) :- mark(V,(area;line)), channel_continuous(V,x), channel_continuous(V,y). -orientation(horizontal) :- mark(bar;tick;area;line), channel_discrete(y). +orientation(V,horizontal) :- mark(V,(bar;tick;area;line)), channel_discrete(V,y). diff --git a/asp/generate.lp b/asp/generate.lp index ea185e3..3f3bf0e 100644 --- a/asp/generate.lp +++ b/asp/generate.lp @@ -7,27 +7,27 @@ obj_id(1..max_extra_encs). -{ encoding(E): obj_id(E) }. +{ encoding(V,E): obj_id(E) } :- visualization(V). -:- not encoding(ID), encoding(ID-1), obj_id(ID), obj_id(ID-1). +:- not encoding(V,ID), encoding(V,ID-1), obj_id(ID), obj_id(ID-1). % properties of encodings % channel and type have to be present -{ channel(E,C): channel(C) } = 1 :- encoding(E). -{ type(E,T): type(T) } = 1 :- encoding(E). +{ channel(V,E,C) : channel(C) } = 1 :- encoding(V,E). +{ type(V,E,T): type(T) } = 1 :- encoding(V,E). % other properties that are not required -0 { field(E,F): field(F) } 1 :- encoding(E). -0 { aggregate(E,A): aggregate_op(A) } 1 :- encoding(E). -0 { bin(E,B): binning(B) } 1 :- encoding(E). -0 { zero(E) } 1 :- encoding(E). -0 { log(E) } 1 :- encoding(E). +0 { field(V,E,F): field(F) } 1 :- encoding(V,E). +0 { aggregate(V,E,A): aggregate_op(A) } 1 :- encoding(V,E). +0 { bin(V,E,B): binning(B) } 1 :- encoding(V,E). +0 { zero(V,E) } 1 :- encoding(V,E). +0 { log(V,E) } 1 :- encoding(V,E). % pick one mark type -{ mark(M) : marktype(M) } = 1. +{ mark(V,M) : marktype(M) } = 1 :- visualization(V). % stacking -0 { stack(S): stacking(S) } 1. +0 { stack(V,S): stacking(S) } 1 :- visualization(V). diff --git a/asp/hard.lp b/asp/hard.lp index a596615..89bb20f 100644 --- a/asp/hard.lp +++ b/asp/hard.lp @@ -1,212 +1,212 @@ -:- hard(_). -:- hard(_,_). -:- hard(_,_,_). +:- visualization(V), hard(_,V). +:- visualization(V), hard(_,V,_). +:- visualization(V), hard(_,V,_,_). % ====== Expressiveness and Well-Formedness Constraints ====== % === Within Encodings === % @constraint Primitive type has to support data type. -hard(enc_type_valid,E,F) :- type(E,quantitative), field(E,F), fieldtype(F,(string;boolean)). -hard(enc_type_valid,E,F) :- type(E,temporal), field(E,F), not fieldtype(F,datetime). +hard(enc_type_valid,V,E,F) :- type(V,E,quantitative), field(V,E,F), fieldtype(F,(string;boolean)). +hard(enc_type_valid,V,E,F) :- type(V,E,temporal), field(V,E,F), not fieldtype(F,datetime). % @constraint Can only bin quantitative or ordinal. -hard(bin_q_o,E,T) :- type(E,T), bin(E,_), T != quantitative, T != ordinal. +hard(bin_q_o,V,E,T) :- type(V,E,T), bin(V,E,_), T != quantitative, T != ordinal. % @constraint Can only use log with quantitative. -hard(log_q,E) :- log(E), not type(E,quantitative). +hard(log_q,V,E) :- log(V,E), not type(V,E,quantitative). % @constraint Can only use zero with quantitative. -hard(zero_q,E) :- zero(E), not type(E,quantitative). +hard(zero_q,V,E) :- zero(V,E), not type(V,E,quantitative). % @constraint Cannot use log scale with discrete (which includes binned). -hard(log_discrete,E) :- log(E), discrete(E). +hard(log_discrete,V,E) :- log(V,E), discrete(V,E). % @constraint Cannot use log and zero together. -hard(log_zero,E) :- log(E), zero(E). +hard(log_zero,V,E) :- log(V,E), zero(V,E). % @constraint Cannot use log if the data is negative or zero. -hard(log_non_positive,E,F) :- log(E), field(E,F), extent(F,MIN,_), MIN <= 0. +hard(log_non_positive,V,E,F) :- log(V,E), field(V,E,F), extent(F,MIN,_), MIN <= 0. % @constraint Cannot bin and aggregate. -hard(bin_and_aggregate,E) :- bin(E,_), aggregate(E,_). +hard(bin_and_aggregate,V,E) :- aggregate(V,E,_), bin(V,E,_). % @constraint Oridnal only supports min, max, and median. -hard(aggregate_o_valid,E,A) :- type(E,ordinal), aggregate(E,A), A != min, A != max, A != median. +hard(aggregate_o_valid,V,E,A) :- aggregate(V,E,A), type(V,E,ordinal), A != min, A != max, A != median. % @constraint Temporal only supports min and max. -hard(aggregate_t_valid,E,A) :- type(E,temporal), aggregate(E,A), A != min, A != max. +hard(aggregate_t_valid,V,E,A) :- aggregate(V,E,A), type(V,E,temporal), A != min, A != max. % @constraint Cannot aggregate nominal. -hard(aggregate_nominal,E) :- aggregate(E,_), type(E,nominal). +hard(aggregate_nominal,V,E) :- aggregate(V,E,_), type(V,E,nominal). % @constraint Detail cannot be aggregated. -hard(aggregate_detail,E) :- channel(E,detail), aggregate(E,_). +hard(aggregate_detail,V,E) :- channel(V,E,detail), aggregate(V,E,_). % @constraint Count has to be quantitative and not use a field. -hard(count_q_without_field,E) :- aggregate(E,count), field(E,_). -hard(count_q_without_field,E) :- aggregate(E,count), not type(E,quantitative). +hard(count_q_without_field,V,E) :- aggregate(V,E,count), field(V,E,_). +hard(count_q_without_field,V,E) :- aggregate(V,E,count), not type(V,E,quantitative). % @constraint Shape requires discrete and not ordered (nominal). Using ordinal would't make a difference in Vega-Lite. -hard(shape_discrete_non_ordered,E) :- channel(E,shape), not type(E,nominal). +hard(shape_discrete_non_ordered,V,E) :- channel(V,E,shape), not type(V,E,nominal). % @constraint Detail requires nominal. -hard(detail_non_ordered,E) :- channel(E,detail), not type(E,nominal). +hard(detail_non_ordered,V,E) :- channel(V,E,detail), not type(V,E,nominal). % @constraint Size implies order so nominal is misleading. -hard(size_nominal) :- channel(E,size), type(E,nominal). +hard(size_nominal,V,E) :- channel(V,E,size), type(V,E,nominal). % @constraint Do not use size when data is negative as size implies that data is positive. -hard(size_negative,E) :- channel(E,size), enc_extent(E,MIN,MAX), MIN < 0, MAX > 0. +hard(size_negative,V,E) :- channel(V,E,size), enc_extent(V,E,MIN,MAX), MIN < 0, MAX > 0. % === Across encodings and between encodings and marks === % @constraint Cannot use single channels twice. -hard(repeat_channel,C):- single_channel(C), 2 { channel(_,C) }. +hard(repeat_channel,V,C) :- visualization(V), single_channel(C), 2 { channel(V,_,C) }. % @constraint There has to be at least one encoding. Otherwise, the visualization doesn't show anything. -hard(no_encodings) :- not encoding(_). +hard(no_encodings,V) :- visualization(V), not encoding(V,_). % @constraint Row and column require discrete. -hard(row_or_column_c) :- channel_continuous(row;column). +hard(row_or_column_c,V) :- channel_continuous(V,(row;column)). % @constraint Don't use row without y. Just using y is simpler. -hard(row_no_y) :- channel(_,row), not channel(_,y). +hard(row_no_y,V) :- channel(V,_,row), not channel(V,_,y). % @constraint Don't use column without x. Just using x is simpler. -hard(column_no_x) :- channel(_,column), not channel(_,x). +hard(column_no_x,V) :- channel(V,_,column), not channel(V,_,x). % @constraint All encodings (if they have a channel) require field except if we have a count aggregate. -hard(encoding_no_field_and_not_count,E) :- not field(E,_), not aggregate(E,count), encoding(E). +hard(encoding_no_field_and_not_count,V,E) :- not field(V,E,_), not aggregate(V,E,count), encoding(V,E). % @constraint Count should not have a field. Having a field doesn't make a difference. -hard(count_with_field,E) :- aggregate(E,count), field(E,_). +hard(count_with_field,V,E) :- aggregate(V,E,count), field(V,E,_). % @constraint Text mark requires text channel. -hard(text_mark_without_text_channel) :- mark(text), not channel(_,text). +hard(text_mark_without_text_channel,V) :- mark(V,text), not channel(V,_,text). % @constraint Text channel requires text mark. -hard(text_channel_without_text_mark) :- channel(_,text), not mark(text). +hard(text_channel_without_text_mark,V) :- channel(V,E,text), not mark(V,text). % @constraint Point, tick, and bar require x or y channel. -hard(point_tick_bar_without_x_or_y) :- mark(point;tick;bar), not channel(_,x), not channel(_,y). +hard(point_tick_bar_without_x_or_y,V) :- mark(V,(point;tick;bar)), not channel(V,_,x), not channel(V,_,y). % @constraint Line and area require x and y channel. -hard(line_area_without_x_y) :- mark(line;area), not channel(_,(x;y)). +hard(line_area_without_x_y,V) :- mark(V,(line;area)), not channel(V,_,(x;y)). % @constraint Line and area cannot have two discrete. -hard(line_area_with_discrete) :- mark(line;area), channel_discrete(x), channel_discrete(y). +hard(line_area_with_discrete,V) :- mark(V,(line;area)), channel_discrete(V,x), channel_discrete(V,y). % @constraint Bar and tick cannot have both x and y continuous. -hard(bar_tick_continuous_x_y) :- mark(bar;tick), channel_continuous(x), channel_continuous(y). +hard(bar_tick_continuous_x_y,V) :- mark(V,(bar;tick)), channel_continuous(V,x), channel_continuous(V,y). % @constraint Bar, tick, line, area require some continuous variable on x or y. -hard(bar_tick_area_line_without_continuous_x_y) :- mark(bar;tick;area;line), not channel_continuous(x), not channel_continuous(y). +hard(bar_tick_area_line_without_continuous_x_y,V) :- mark(V,(bar;tick;area;line)), not channel_continuous(V,x), not channel_continuous(V,y). % @constraint Bar and area mark requires scale of continuous to start at zero. -hard(bar_area_without_zero) :- mark(bar;area), channel(E,x), orientation(horizontal), not zero(E). -hard(bar_area_without_zero) :- mark(bar;area), channel(E,y), orientation(vertical), not zero(E). +hard(bar_area_without_zero,V) :- mark(V,(bar;area)), channel(V,E,x), orientation(V,horizontal), not zero(V,E). +hard(bar_area_without_zero,V) :- mark(V,(bar;area)), channel(V,E,y), orientation(V,vertical), not zero(V,E). % @constraint Shape channel requires point mark. -hard(shape_without_point) :- channel(_,shape), not mark(point). +hard(shape_without_point,V) :- channel(V,_,shape), not mark(V,point). % @constraint Size only works with some marks. Vega-Lite can also size lines, and ticks but that would violate best practices. -hard(size_without_point_text) :- channel(_,size), not mark(point), not mark(text). +hard(size_without_point_text,V) :- channel(V,_,size), not mark(V,point), not mark(V,text). % @constraint Detail requires aggregation. Detail adds a field to the group by. Detail could also be used to add information to tooltips. We may remove this later. -hard(detail_without_agg) :- channel(_,detail), not aggregate(_,_). +hard(detail_without_agg,V) :- channel(V,_,detail), not aggregate(V,_,_). % @constraint Do not use log for bar or area mark as they are often misleading. We may remove this rule in the future. -hard(area_bar_with_log) :- mark(bar;area), log(E), channel(E,(x;y)). +hard(area_bar_with_log,V) :- mark(V,(bar;area)), channel(V,E,(x;y)), log(V,E). % @constraint Rect mark needs discrete x and y. -hard(rect_without_d_d) :- mark(rect), not is_d_d. +hard(rect_without_d_d,V) :- mark(V,rect), not is_d_d(V). % @constraint Don't use the same field on x and y. -hard(same_field_x_and_y) :- { field(E,F) : channel(E,x); field(E,F) : channel(E,y) } >= 2, field(F). +hard(same_field_x_and_y,V) :- visualization(V), { field(V,E,F) : channel(V,E,x); field(V,E,F) : channel(V,E,y) } >= 2, field(F). % @constraint Don't use count on x and y. -hard(count_on_x_and_y):- channel(EX,x), channel(EY,y), aggregate(EX,count), aggregate(EY,count). +hard(count_on_x_and_y,V):- channel(V,EX,x), channel(V,EY,y), aggregate(V,EX,count), aggregate(V,EY,count). % @constraint If we use aggregation, then all continuous fields need to be aggeragted. -hard(aggregate_not_all_continuous):- aggregate(_,_), continuous(E), not aggregate(E,_). +hard(aggregate_not_all_continuous,V):- aggregate(V,E,_), continuous(V,E), not aggregate(V,E,_). % @constraint Don't use count twice. -hard(count_twice) :- { aggregate(_,count) } = 2. +hard(count_twice) :- visualization(V), { aggregate(V,_,count) } = 2. % === Global properties === % @constraint Bars and area cannot overlap. -hard(bar_area_overlap) :- mark(bar;area), overlap. +hard(bar_area_overlap,V) :- mark(V,(bar;area)), overlap(V). % @constraint Rects shouldn't overlap. They are used for dioscrete heatmaps. -hard(rect_overlap) :- mark(rect), overlap. +hard(rect_overlap,V) :- mark(V,rect), overlap(V). % == Stacking == % @constraint Only use stacking for bar and area. -hard(stack_without_bar_area) :- stack(_), not mark(bar), not mark(area). +hard(stack_without_bar_area,V) :- stack(V,_), not mark(V,bar), not mark(V,area). % @constraint Don't stack if aggregation is not summative (summative are count, sum, distinct, valid, missing). -hard(stack_without_summative_agg,E,A) :- stack(E,_), aggregate(E,A), not summative_aggregate_op(A). +hard(stack_without_summative_agg,V,E,A) :- aggregate(V,E,A), stack(E,_), not summative_aggregate_op(A). % @constraint Need to stack if we use bar, area with discrete color. -hard(no_stack_with_bar_area_discrete_color,E) :- mark(bar;area), channel(E,color), discrete(E), not stack(_). +hard(no_stack_with_bar_area_discrete_color,V,E) :- mark(V,(bar;area)), encoding(V,E), channel(V,E,color), discrete(V,E), not stack(V,_). % @constraint Can only use stack if we also use discrete color, or detail. -hard(stack_without_discrete_color_or_detail) :- stack(_), not channel_discrete(color), not channel(_,detail). +hard(stack_without_discrete_color_or_detail,V) :- stack(V,_), not channel_discrete(V,color), { channel(V,E,detail) } = 0. % @constraint If we use stack and detail, we also have to use quantitative color. -hard(stack_detail_without_q_color) :- stack(_), channel(_,detail), not channel(_,color). -hard(stack_detail_without_q_color,E) :- stack(_), channel(_,detail), channel(E,color), not aggregate(E,_). +hard(stack_detail_without_q_color,V) :- stack(V,_), channel(V,_,detail), not channel(V,_,color). +hard(stack_detail_without_q_color,V,E) :- stack(V,_), channel(V,_,detail), channel(V,E,color), not aggregate(V,E,_). % @constraint Stack can only be on continuous. -hard(stack_discrete,E) :- stack(E,_), discrete(E). +hard(stack_discrete,V,E) :- encoding(V,E), stack(V,E,_), discrete(V,E). % @constraint Stack can only be on x or y. -hard(stack_without_x_y,E) :- stack(E,_), not channel(E,x), not channel(E,y). +hard(stack_without_x_y,V,E) :- encoding(V,E), stack(V,E,_), not channel(V,E,x), not channel(V,E,y). % @constraint Cannot use non positional continuous with stack unless it's aggregated. -hard(stack_with_non_positional_non_agg,E,C) :- stack(_), non_positional(C), channel(E,C), not aggregate(E,_), continuous(E). +hard(stack_with_non_positional_non_agg,V,E,C) :- stack(V,_), encoding(V,E), non_positional(C), channel(V,E,C), not aggregate(V,E,_), continuous(V,E). % @constraint Vega-Lite currently supports 8 shapes. -hard(shape_with_cardinality_gt_eight,E,C) :- channel(E,shape), enc_cardinality(E,C), C > 8. +hard(shape_with_cardinality_gt_eight,V,E,C) :- channel(V,E,shape), enc_cardinality(V,E,C), C > 8. % @constraint At most 20 categorical colors. -hard(color_with_cardinality_gt_twenty,E,C) :- channel(E,color), discrete(E), enc_cardinality(E,C), C > 20. +hard(color_with_cardinality_gt_twenty,V,E,C) :- channel(V,E,color), discrete(V,E), enc_cardinality(V,E,C), C > 20. % === Type checks === % @constraint Check mark. -hard(invalid_mark,M) :- mark(M), not marktype(M). +hard(invalid_mark,V,M) :- mark(V,M), not marktype(M). % @constraint Check types of encoding properties. -hard(invalid_channel,C) :- channel(_,C), not channel(C). -hard(invalid_field,F) :- field(_,F), not field(F). -hard(invalid_type,T) :- type(_,T), not type(T). -hard(invalid_agg,A) :- aggregate(_,A), not aggregate_op(A). -hard(invalid_bin,B) :- bin(_,B), not B >= 0. % @constraint Bin has to be a natural number. +hard(invalid_channel,V,C) :- channel(V,_,C), not channel(C). +hard(invalid_field,V,F) :- field(V,_,F), not field(F). +hard(invalid_type,V,T) :- type(V,_,T), not type(T). +hard(invalid_agg,V,A) :- aggregate(V,_,A), not aggregate_op(A). +hard(invalid_bin,V,B) :- bin(V,_,B), not B >= 0. % @constraint Bin has to be a natural number. % @constraint Fieldtype has to be primitive type. -hard(invalid_fieldtype,T) :- fieldtype(_,T), not primitive_type(T). +hard(invalid_fieldtype,V,T) :- visualization(V), fieldtype(_,T), not primitive_type(T). % @constraint Task has to be one of the tasks. -hard(invalid_task,T) :- task(T), not tasks(T). +hard(invalid_task,V,T) :- visualization(V), task(V,T), not tasks(T). % @constraint Num_rows has to be larger than 0. -hard(invalid_num_rows,S) :- num_rows(S), S < 0. +hard(invalid_num_rows,V,S) :- visualization(V), num_rows(S), S < 0. % @constraint Cardinality has to be larger than 0. -hard(invalid_cardinality,C) :- cardinality(_,C), C < 0. +hard(invalid_cardinality,V,C) :- visualization(V), cardinality(_,C), C < 0. % @constraint Entropy has to be positive. -hard(invalid_entropy,E) :- entropy(_,E), E < 0. +hard(invalid_entropy,V,E) :- visualization(V), entropy(_,E), E < 0. % @constraint Extent only allowed for numbers (for now). -hard(invalid_extent_non_number,F) :- extent(F,_,_), not fieldtype(F,number). +hard(invalid_extent_non_number,V,F) :- visualization(V), extent(F,_,_), not fieldtype(F,number). % @constraint Order has to be correct. -hard(invalid_extent_order,MIN,MAX):- extent(_,MIN,MAX), MIN > MAX. +hard(invalid_extent_order,V,MIN,MAX):- visualization(V), extent(_,MIN,MAX), MIN > MAX. % @constraint The name of a field cannot be the name of an encoding. This is to prevent errors coming from the shortcuts in define.lp. -hard(encoding_field_same_name,N) :- encoding(N), field(N). +hard(encoding_field_same_name,V,N) :- visualization(V), encoding(V,N), field(N). \ No newline at end of file diff --git a/asp/optimize.lp b/asp/optimize.lp index 240c069..02bc159 100644 --- a/asp/optimize.lp +++ b/asp/optimize.lp @@ -1,3 +1,3 @@ % Minimize the feature weight -#minimize { W,F,Q: soft_weight(F,W), soft(F,Q) }. +#minimize { W,F,V,Q: soft_weight(F,W), soft(F,V,Q); W,F,V1,V2: compare_weight(F,W), compare(F,V1,V2) }. diff --git a/asp/output.lp b/asp/output.lp index 7e4778f..e760401 100644 --- a/asp/output.lp +++ b/asp/output.lp @@ -2,16 +2,20 @@ #show data/1. -#show mark/1. +#show mark/2. -#show type/2. -#show channel/2. -#show field/2. -#show aggregate/2. -#show bin/2. -#show stack/2. +#show visualization/1. +#show encoding/2. -#show log/1. -#show zero/1. +#show type/3. +#show channel/3. +#show field/3. +#show aggregate/3. +#show bin/3. +#show stack/3. -#show soft/2. +#show log/2. +#show zero/2. + +#show soft/3. +#show compare/3. diff --git a/asp/process_compare.py b/asp/process_compare.py new file mode 100644 index 0000000..d20d197 --- /dev/null +++ b/asp/process_compare.py @@ -0,0 +1,35 @@ +""" +Reads the weights file and generates assign_weights.lp and weights.json +""" + +import json +import os +import re + + +def absolute_path(p: str) -> str: + return os.path.join(os.path.dirname(os.path.abspath(__file__)), p) + + +def main(): + with open(absolute_path("compare_weights.lp")) as weight_constants, open( + absolute_path("assign_compare_weights.lp"), "w" + ) as assign: + + assign.write("%% GENERATED FILE. DO NOT EDIT.\n\n") + + weights = {} + + for line in weight_constants.readlines(): + match = re.search("#const (.*)_weight = ([\-0-9]*)", line) + if match: + name = match.group(1) + value = int(match.group(2)) + + weights[f"{name}_weight"] = value + + assign.write(f"compare_weight({name},{name}_weight).\n") + +if __name__ == "__main__": + main() +`` \ No newline at end of file diff --git a/asp/soft.lp b/asp/soft.lp index 5fae38e..f8008f4 100644 --- a/asp/soft.lp +++ b/asp/soft.lp @@ -3,467 +3,465 @@ % ====== Preferences ====== % @constraint Prefer to use raw (no aggregate). -soft(aggregate,E) :- aggregate(E,_). +soft(aggregate,V,E) :- aggregate(V,E,_). % @constraint Prefer to not bin. -soft(bin,E) :- bin(E,_). +soft(bin,V,E) :- bin(V,E,_). % @constraint Prefer binning with at most 12 buckets. -soft(bin_high,E) :- bin(E,B), B > 12. +soft(bin_high,V,E) :- bin(V,E,B), B > 12. % @constraint Prefer binning with more than 7 buckets. -soft(bin_low,E) :- bin(E,B), B <= 7. +soft(bin_low,V,E) :- bin(V,E,B), B <= 7. % @constraint Prefer to use fewer encodings. -soft(encoding,E) :- encoding(E). +soft(encoding,V,E) :- encoding(V,E). % @constraint Prefer to use fewer encodings with fields (count does not have a field). -soft(encoding_field,E) :- encoding(E), field(E,_). +soft(encoding_field,V,E) :- field(V,E,_). % @constraint Prefer not to use the same field twice. -soft(same_field_2,F) :- field(F), { field(_,F) } = 2. +soft(same_field_2,V,F) :- visualization(V), field(F), { field(V,_,F) } = 2. % @constraint Prefer not to use the same field three or more times. -% @weight {16} -soft(same_field_gte3,F) :- field(F), { field(_,F) } >= 3. -% @end +soft(same_field_gte3,V,F) :- visualization(V), field(F), { field(V,_,F) } >= 3. % @constraint Prefer not to use count more than once. -soft(count_twice) :- { aggregate(_,count) } = 2. +soft(count_twice,V) :- visualization(V), { aggregate(V,_,count) } = 2. % @constraint Shape channel should not have too high cardinality. -soft(shape_cardinality,E) :- channel(E,shape), discrete_cardinality(E,C), C > 5. +soft(shape_cardinality,V,E) :- channel(V,E,shape), discrete_cardinality(V,E,C), C > 5. % @constraint Numbers should not be nominal. -soft(number_nominal,E) :- type(E,nominal), field(E,F), fieldtype(F,number). +soft(number_nominal,V,E) :- type(V,E,nominal), field(V,E,F), fieldtype(F,number). % @constraint Binned quantitative field should not have too low cardinality. -soft(bin_cardinality,E) :- type(E,quantitative), bin(E,_), enc_cardinality(E,C), C < 15. +soft(bin_cardinality,V,E) :- type(V,E,quantitative), bin(V,E,_), enc_cardinality(V,E,C), C < 15. % @constraint Prefer quantitative for bin. -soft(quant_bin,E) :- bin(E,_), not type(E,quantitative). +soft(quant_bin,V,E) :- bin(V,E,_), not type(V,E,quantitative). % @constraint Plots with only nominal, ordinal, binned q, or t with time unit should add either an aggregation (e.g. count) or a quantitative field. -soft(only_discrete) :- not continuous(_). +soft(only_discrete,V) :- visualization(V), not continuous(V,_). % @constraint Prefer not to use multiple non-positional encoding channels. -soft(multiple_non_pos) :- {channel(_,C): non_positional(C)} > 1. +soft(multiple_non_pos,V) :- visualization(V), { channel(V,_,C): non_positional(C) } > 1. % @constraint Prefer not to use non-positional channels until all positional channels are used. -soft(non_positional_pref) :- channel(_,C), non_positional(C), not channel(_,(x;y)). +soft(non_positional_pref,V) :- channel(V,_,C), non_positional(C), not channel(V,_,(x;y)). % @constraint Aggregate plots should not use raw continuous as group by. -soft(aggregate_group_by_raw,E) :- aggregate(_,_), continuous(E), not aggregate(E,_). +soft(aggregate_group_by_raw,E) :- aggregate(V,_,_), continuous(V,E), not aggregate(V,E,_). % @constraint Aggregate should also have a discrete encoding to group by. -soft(agg_dim) :- aggregate(_,_), not discrete(_). +soft(agg_dim,V) :- aggregate(V,_,_), not discrete(V,_). % @constraint Prefer not to use plot with both x and y discrete and no aggregate as it leads to occlusion. -soft(x_y_raw,E) :- channel(EX,x), discrete(EX), channel(EY,y), discrete(EY), not aggregate(E,_), continuous(E). +soft(x_y_raw,V,E) :- channel(V,EX,x), discrete(V,EX), channel(V,EY,y), discrete(V,EY), encoding(V,E), not aggregate(V,E,_), continuous(V,E). % @constraint Prefer not to use log scale. -soft(log,E) :- log(E). +soft(log,V,E) :- log(V,E). % @constraint Prefer to include zero for continuous (binned doesn't need zero). -soft(zero,E) :- continuous(E), not zero(E). +soft(zero,V,E) :- continuous(V,E), not zero(V,E). % @constraint Prefer zero size (even when binned). -soft(zero_size) :- channel(E,size), not zero(E). +soft(zero_size,V) :- channel(V,E,size), not zero(V,E). % @constraint Prefer zero positional. -soft(zero_positional) :- continuous(E), channel(E,(x;y)), not zero(E). +soft(zero_positional,V) :- continuous(V,E), channel(V,E,(x;y)), not zero(V,E). % @constraint Prefer not to use zero when the difference between min and max is larger than distance to 0. -soft(zero_skew) :- enc_extent(E,MIN,MAX), EX = MAX - MIN, |MAX| > EX, |MIN| > EX, zero(E). +soft(zero_skew,V) :- enc_extent(V,E,MIN,MAX), EX = MAX - MIN, |MAX| > EX, |MIN| > EX, zero(V,E). % @constraint Do not include zero when the range of data includes zero. -soft(includes_zero) :- zero(E), extent(E,MIN,MAX), MIN < 0, MAX > 0. +soft(includes_zero,V,E) :- zero(V,E), field(V,E,F), extent(F,MIN,MAX), MIN < 0, MAX > 0. % @constraint Prefer to use only x instead of only y. -soft(only_x) :- channel(_,y), not channel(_,x). +soft(only_x,V) :- channel(V,_,y), not channel(V,_,x). % @constraint Chart orientation for bar and tick (with and without bin). Binned fields have short labels if they are quantitative while otherwise labels can be long. -soft(orientation_binned) :- bin(E,_), type(E,quantitative), not channel(E,x). +soft(orientation_binned,V) :- bin(V,E,_), type(V,E,quantitative), not channel(V,E,x). % @constraint Prefer not to use ordinal for fields with high cardinality. -soft(high_cardinality_ordinal,E) :- type(E,ordinal), discrete_cardinality(E,C), C > 30. +soft(high_cardinality_ordinal,V,E) :- type(V,E,ordinal), discrete_cardinality(V,E,C), C > 30. % @constraint Prefer not to use nominal for fields with high cardinality. -soft(high_cardinality_nominal,E) :- type(E,nominal), enc_cardinality(E,C), C > 12. +soft(high_cardinality_nominal,V,E) :- type(V,E,nominal), enc_cardinality(V,E,C), C > 12. % @constraint Prefer not to use high cardinality nominal for color. -soft(high_cardinality_nominal_color,E) :- type(E,nominal), channel(E,color), enc_cardinality(E,C), C > 10. +soft(high_cardinality_nominal_color,V,E) :- type(V,E,nominal), channel(V,E,color), enc_cardinality(V,E,C), C > 10. % @constraint Avoid high cardinality on x or column as it causes horizontal scrolling. -soft(horizontal_scrolling,E) :- channel(E,x), discrete_cardinality(E,C), C > 50. -soft(horizontal_scrolling,E) :- channel(E,columm), discrete_cardinality(E,C), C > 5. +soft(horizontal_scrolling,V,E) :- channel(V,E,x), discrete_cardinality(V,E,C), C > 50. +soft(horizontal_scrolling,V,E) :- channel(V,E,columm), discrete_cardinality(V,E,C), C > 5. % @constraint Prefer to use temporal type with dates. -soft(temporal_date,E) :- field(E,F), fieldtype(F,datetime), not type(E,temporal). +soft(temporal_date,V,E) :- field(V,E,F), fieldtype(F,datetime), not type(V,E,temporal). % @constraint Prefer quantitative for numbers with high cardinality. -soft(quantitative_numbers) :- field(E,F), fieldtype(F,number), cardinality(F,C), C > 20, not bin(E,_), not type(E,quantitative). +soft(quantitative_numbers,V) :- field(V,E,F), fieldtype(F,number), cardinality(F,C), C > 20, not bin(V,E,_), not type(V,E,quantitative). % @constraint Overplotting. Prefer not to use x and y for continuous with high cardinality and low entropy without aggregation because the points will overplot. -soft(position_entropy,E) :- channel(E,(x;y)), continuous(E), enc_cardinality(E,C), C > 100, enc_entropy(E,EN), EN <= 12, not aggregate(E,_). +soft(position_entropy,V,E) :- channel(V,E,(x;y)), continuous(V,E), enc_cardinality(V,E,C), C > 100, enc_entropy(V,E,EN), EN <= 12, not aggregate(V,E,_). % @constraint Prefer not to use size when the cardinality is large on x or y. -soft(high_cardinality_size,E) :- continuous(E), channel(_,size), enc_cardinality(E,C), C > 100, channel(E,(x;y)). +soft(high_cardinality_size,V,E) :- continuous(V,E), channel(V,_,size), enc_cardinality(V,E,C), C > 100, channel(V,E,(x;y)). % @constraint Prefer not to aggregate for value tasks. -soft(value_agg) :- task(value), aggregate(_,_). +soft(value_agg,V) :- task(V,value), aggregate(V,_,_). % @constraint Prefer not to use row and column for summary tasks as it makes it difficult to compare. -soft(facet_summary,E) :- task(summary), channel(E,row). +soft(facet_summary,V,E) :- task(V,summary), channel(V,E,row). % @constraint Positional interactions as suggested by Kim et al. -soft(x_row) :- channel(_,x), channel(_,row). +soft(x_row,V) :- channel(V,_,x), channel(V,_,row). % @constraint Positional interactions as suggested by Kim et al. -soft(y_row) :- channel(_,y), channel(_,row). +soft(y_row,V) :- channel(V,_,y), channel(V,_,row). % @constraint Positional interactions as suggested by Kim et al. -soft(x_column) :- channel(_,x), channel(_,column). +soft(x_column,V) :- channel(V,_,x), channel(V,_,column). % @constraint Positional interactions as suggested by Kim et al. -soft(y_column) :- channel(_,y), channel(_,column). +soft(y_column,V) :- channel(V,_,y), channel(V,_,column). % @constraint Entropy, primary quantitaty interactions as suggested by Kim et al. -soft(color_entropy_high, E) :- channel(E,color), enc_entropy(E,EN), EN > 12, type(E,quantitative), enc_interesting(E). +soft(color_entropy_high,V,E) :- channel(V,E,color), enc_entropy(V,E,EN), EN > 12, type(V,E,quantitative), enc_interesting(V,E). % @constraint Entropy, primary quantitaty interactions as suggested by Kim et al. -soft(color_entropy_low, E) :- channel(E,color), enc_entropy(E,EN), EN <= 12, type(E,quantitative), enc_interesting(E). +soft(color_entropy_low,V,E) :- channel(V,E,color), enc_entropy(V,E,EN), EN <= 12, type(V,E,quantitative), enc_interesting(V,E). % @constraint Entropy, primary quantitaty interactions as suggested by Kim et al. -soft(size_entropy_high, E) :- channel(E,size), enc_entropy(E,EN), EN > 12, type(E,quantitative), enc_interesting(E). +soft(size_entropy_high,V,E) :- channel(V,E,size), enc_entropy(V,E,EN), EN > 12, type(V,E,quantitative), enc_interesting(V,E). % @constraint Entropy, primary quantitaty interactions as suggested by Kim et al. -soft(size_entropy_low, E) :- channel(E,size), enc_entropy(E,EN), EN <= 12, type(E,quantitative), enc_interesting(E). +soft(size_entropy_low,V,E) :- channel(V,E,size), enc_entropy(V,E,EN), EN <= 12, type(V,E,quantitative), enc_interesting(V,E). % @constraint Prefer not to use continuous on x, discrete on y, and column. -soft(c_d_column) :- channel_continuous(x), channel_discrete(y), channel(_,column). +soft(c_d_column,V) :- channel_continuous(V,x), channel_discrete(V,y), channel(V,_,column). % @constraint Prefer time on x. -soft(temporal_y) :- type(E,temporal), not channel(E,x). +soft(temporal_y,V) :- type(V,E,temporal), not channel(V,E,x). % @constraint Prefer not to overlap with DxD. -soft(d_d_overlap) :- is_d_d, overlap. +soft(d_d_overlap,V) :- is_d_d(V), overlap(V). % ====== Rankings ====== % === Data Types === % @constraint Prefer quantitative > ordinal > nominal. -soft(type_q,E) :- type(E,quantitative). +soft(type_q,V,E) :- type(V,E,quantitative). % @constraint Prefer quantitative > ordinal > nominal. -soft(type_o,E) :- type(E,ordinal). +soft(type_o,V,E) :- type(V,E,ordinal). % @constraint Prefer quantitative > ordinal > nominal. -soft(type_n,E) :- type(E,nominal). +soft(type_n,V,E) :- type(V,E,nominal). % === Mark types === % @constraint Continuous by continuous for point mark. -soft(c_c_point) :- is_c_c, mark(point). +soft(c_c_point,V) :- is_c_c(V), mark(V,point). % @constraint Continuous by continuous for line mark. -soft(c_c_line) :- is_c_c, mark(line). +soft(c_c_line,V) :- is_c_c(V), mark(V,line). % @constraint Continuous by continuous for area mark. -soft(c_c_area) :- is_c_c, mark(area). +soft(c_c_area,V) :- is_c_c(V), mark(V,area). % @constraint Continuous by continuous for text mark. -soft(c_c_text) :- is_c_c, mark(text). +soft(c_c_text,V) :- is_c_c(V), mark(V,text). % @constraint Continuous by continuous for tick mark. -soft(c_c_tick) :- is_c_c, mark(tick). +soft(c_c_tick,V) :- is_c_c(V), mark(V,tick). % @constraint Continuous by discrete for point mark. -soft(c_d_point) :- is_c_d, not no_overlap, mark(point). +soft(c_d_point,V) :- is_c_d(V), not no_overlap(V), mark(V,point). % @constraint Continuous by discrete for bar mark. -soft(c_d_bar) :- is_c_d, not no_overlap, mark(bar). +soft(c_d_bar,V) :- is_c_d(V), not no_overlap(V), mark(V,bar). % @constraint Continuous by discrete for line mark. -soft(c_d_line) :- is_c_d, not no_overlap, mark(line). +soft(c_d_line,V) :- is_c_d(V), not no_overlap(V), mark(V,line). % @constraint Continuous by discrete for area mark. -soft(c_d_area) :- is_c_d, not no_overlap, mark(area). +soft(c_d_area,V) :- is_c_d(V), not no_overlap(V), mark(V,area). % @constraint Continuous by discrete for text mark. -soft(c_d_text) :- is_c_d, not no_overlap, mark(text). +soft(c_d_text,V) :- is_c_d(V), not no_overlap(V), mark(V,text). % @constraint Continuous by discrete for tick mark. -soft(c_d_tick) :- is_c_d, not no_overlap, mark(tick). +soft(c_d_tick,V) :- is_c_d(V), not no_overlap(V), mark(V,tick). % @constraint Continuous by discrete for point mark with no overlap. -soft(c_d_no_overlap_point) :- is_c_d, no_overlap, mark(point). +soft(c_d_no_overlap_point,V) :- is_c_d(V), no_overlap(V), mark(V,point). % @constraint Continuous by discrete for bar mark with no overlap. -soft(c_d_no_overlap_bar) :- is_c_d, no_overlap, mark(bar). +soft(c_d_no_overlap_bar,V) :- is_c_d(V), no_overlap(V), mark(V,bar). % @constraint Continuous by discrete for line mark with no overlap. -soft(c_d_no_overlap_line) :- is_c_d, no_overlap, mark(line). +soft(c_d_no_overlap_line,V) :- is_c_d(V), no_overlap(V), mark(V,line). % @constraint Continuous by discrete for area mark with no overlap. -soft(c_d_no_overlap_area) :- is_c_d, no_overlap, mark(area). +soft(c_d_no_overlap_area,V) :- is_c_d(V), no_overlap(V), mark(V,area). % @constraint Continuous by discrete for text mark with no overlap. -soft(c_d_no_overlap_text) :- is_c_d, no_overlap, mark(text). +soft(c_d_no_overlap_text,V) :- is_c_d(V), no_overlap(V), mark(V,text). % @constraint Continuous by discrete for tick mark with no overlap. -soft(c_d_no_overlap_tick) :- is_c_d, no_overlap, mark(tick). +soft(c_d_no_overlap_tick,V) :- is_c_d(V), no_overlap(V), mark(V,tick). % @constraint Discrete by discrete for point mark. -soft(d_d_point) :- is_d_d, mark(point). +soft(d_d_point,V) :- is_d_d(V), mark(V,point). % @constraint Discrete by discrete for point mark. -soft(d_d_text) :- is_d_d, mark(text). +soft(d_d_text,V) :- is_d_d(V), mark(V,text). % @constraint Discrete by discrete for point mark. -soft(d_d_rect) :- is_d_d, mark(rect). +soft(d_d_rect,V) :- is_d_d(V), mark(V,rect). % === Channel rankings à la APT === % @constraint Continuous on x channel. -soft(continuous_x,E) :- channel(E,x), continuous(E). +soft(continuous_x,V,E) :- channel(V,E,x), continuous(V,E). % @constraint Continuous on y channel. -soft(continuous_y,E) :- channel(E,y), continuous(E). +soft(continuous_y,V,E) :- channel(V,E,y), continuous(V,E). % @constraint Continuous on color channel. -soft(continuous_color,E) :- channel(E,color), continuous(E). +soft(continuous_color,V,E) :- channel(V,E,color), continuous(V,E). % @constraint Continuous on size channel. -soft(continuous_size,E) :- channel(E,size), continuous(E). +soft(continuous_size,V,E) :- channel(V,E,size), continuous(V,E). % @constraint Continuous on text channel. -soft(continuous_text,E) :- channel(E,text), continuous(E). +soft(continuous_text,V,E) :- channel(V,E,text), continuous(V,E). % @constraint Ordered on x channel. -soft(ordered_x,E) :- channel(E,x), discrete(E), not type(E,nominal). +soft(ordered_x,V,E) :- channel(V,E,x), discrete(V,E), not type(V,E,nominal). % @constraint Ordered on y channel. -soft(ordered_y,E) :- channel(E,y), discrete(E), not type(E,nominal). +soft(ordered_y,V,E) :- channel(V,E,y), discrete(V,E), not type(V,E,nominal). % @constraint Ordered on color channel. -soft(ordered_color,E) :- channel(E,color), discrete(E), not type(E,nominal). +soft(ordered_color,V,E) :- channel(V,E,color), discrete(V,E), not type(V,E,nominal). % @constraint Ordered on size channel. -soft(ordered_size,E) :- channel(E,size), discrete(E), not type(E,nominal). +soft(ordered_size,V,E) :- channel(V,E,size), discrete(V,E), not type(V,E,nominal). % @constraint Ordered on text channel. -soft(ordered_text,E) :- channel(E,text), discrete(E), not type(E,nominal). +soft(ordered_text,V,E) :- channel(V,E,text), discrete(V,E), not type(V,E,nominal). % @constraint Ordered on row channel. -soft(ordered_row,E) :- channel(E,row), discrete(E), not type(E,nominal). +soft(ordered_row,V,E) :- channel(V,E,row), discrete(V,E), not type(V,E,nominal). % @constraint Ordered on column channel. -soft(ordered_column,E) :- channel(E,column), discrete(E), not type(E,nominal). +soft(ordered_column,V,E) :- channel(V,E,column), discrete(V,E), not type(V,E,nominal). % @constraint Nominal on x channel. -soft(nominal_x,E) :- channel(E,x), type(E,nominal). +soft(nominal_x,V,E) :- channel(V,E,x), type(V,E,nominal). % @constraint Nominal on y channel. -soft(nominal_y,E) :- channel(E,y), type(E,nominal). +soft(nominal_y,V,E) :- channel(V,E,y), type(V,E,nominal). % @constraint Nominal on color channel. -soft(nominal_color,E) :- channel(E,color), type(E,nominal). +soft(nominal_color,V,E) :- channel(V,E,color), type(V,E,nominal). % @constraint Nominal on shape channel. -soft(nominal_shape,E) :- channel(E,shape), type(E,nominal). +soft(nominal_shape,V,E) :- channel(V,E,shape), type(V,E,nominal). % @constraint Nominal on text channel. -soft(nominal_text,E) :- channel(E,text), type(E,nominal). +soft(nominal_text,V,E) :- channel(V,E,text), type(V,E,nominal). % @constraint Nominal on row channel. -soft(nominal_row,E) :- channel(E,row), type(E,nominal). +soft(nominal_row,V,E) :- channel(V,E,row), type(V,E,nominal). % @constraint Nominal on column channel. -soft(nominal_column,E) :- channel(E,column), type(E,nominal). +soft(nominal_column,V,E) :- channel(V,E,column), type(V,E,nominal). % @constraint Nominal on detail channel. -soft(nominal_detail,E) :- channel(E,detail), type(E,nominal). +soft(nominal_detail,V,E) :- channel(V,E,detail), type(V,E,nominal). % @constraint Interesting on x channel. -soft(interesting_x,E) :- channel(E,x), enc_interesting(E). +soft(interesting_x,V,E) :- channel(V,E,x), enc_interesting(V,E). % @constraint Interesting on y channel. -soft(interesting_y,E) :- channel(E,y), enc_interesting(E). +soft(interesting_y,V,E) :- channel(V,E,y), enc_interesting(V,E). % @constraint Interesting on color channel. -soft(interesting_color,E) :- channel(E,color), enc_interesting(E). +soft(interesting_color,V,E) :- channel(V,E,color), enc_interesting(V,E). % @constraint Interesting on size channel. -soft(interesting_size,E) :- channel(E,size), enc_interesting(E). +soft(interesting_size,V,E) :- channel(V,E,size), enc_interesting(V,E). % @constraint Interesting on shape channel. -soft(interesting_shape,E) :- channel(E,shape), enc_interesting(E). +soft(interesting_shape,V,E) :- channel(V,E,shape), enc_interesting(V,E). % @constraint Interesting on text channel. -soft(interesting_text,E) :- channel(E,text), enc_interesting(E). +soft(interesting_text,V,E) :- channel(V,E,text), enc_interesting(V,E). % @constraint Interesting on row channel. -soft(interesting_row,E) :- channel(E,row), enc_interesting(E). +soft(interesting_row,V,E) :- channel(V,E,row), enc_interesting(V,E). % @constraint Interesting on column channel. -soft(interesting_column,E) :- channel(E,column), enc_interesting(E). +soft(interesting_column,V,E) :- channel(V,E,column), enc_interesting(V,E). % @constraint Interesting on detail channel. -soft(interesting_detail,E) :- channel(E,detail), enc_interesting(E). +soft(interesting_detail,V,E) :- channel(V,E,detail), enc_interesting(V,E). % === Aggregations === % @constraint Count as aggregate op. -soft(aggregate_count,E) :- aggregate(E,count). +soft(aggregate_count,V,E) :- aggregate(V,E,count). % @constraint Sum as aggregate op. -soft(aggregate_sum,E) :- aggregate(E,sum). +soft(aggregate_sum,V,E) :- aggregate(V,E,sum). % @constraint Mean as aggregate op. -soft(aggregate_mean,E) :- aggregate(E,mean). +soft(aggregate_mean,V,E) :- aggregate(V,E,mean). % @constraint Median as aggregate op. -soft(aggregate_median,E) :- aggregate(E,median). +soft(aggregate_median,V,E) :- aggregate(V,E,median). % @constraint Min as aggregate op. -soft(aggregate_min,E) :- aggregate(E,min). +soft(aggregate_min,V,E) :- aggregate(V,E,min). % @constraint Max as aggregate op. -soft(aggregate_max,E) :- aggregate(E,max). +soft(aggregate_max,V,E) :- aggregate(V,E,max). % @constraint Standard Deviation as aggregate op. -soft(aggregate_stdev,E) :- aggregate(E,stdev). +soft(aggregate_stdev,V,E) :- aggregate(V,E,stdev). % === Stack === % @constraint Zero base for stack op. -soft(stack_zero) :- stack(zero). +soft(stack_zero,V) :- stack(V,zero). % @constraint Normalize between groupbys as stack op. -soft(stack_normalize) :- stack(normalize). +soft(stack_normalize,V) :- stack(V,normalize). % === Task - marktype correlations === % @constraint Point mark for value tasks. -soft(value_point) :- task(value), mark(point). +soft(value_point,V) :- task(V,value), mark(V,point). % @constraint Bar mark for value tasks. -soft(value_bar) :- task(value), mark(bar). +soft(value_bar,V) :- task(V,value), mark(V,bar). % @constraint Line mark for value tasks. -soft(value_line) :- task(value), mark(line). +soft(value_line,V) :- task(V,value), mark(V,line). % @constraint Area mark for value tasks. -soft(value_area) :- task(value), mark(area). +soft(value_area,V) :- task(V,value), mark(V,area). % @constraint Text mark for value tasks. -soft(value_text) :- task(value), mark(text). +soft(value_text,V) :- task(V,value), mark(V,text). % @constraint Tick mark for value tasks. -soft(value_tick) :- task(value), mark(tick). +soft(value_tick,V) :- task(V,value), mark(V,tick). % @end % @constraint Rect mark for value tasks. -soft(value_rect) :- task(value), mark(rect). +soft(value_rect,V) :- task(V,value), mark(V,rect). % @constraint Point mark for summary tasks. -soft(summary_point) :- task(summary), mark(point). +soft(summary_point,V) :- task(V,summary), mark(V,point). % @constraint Bar mark for summary tasks. -soft(summary_bar) :- task(summary), mark(bar). +soft(summary_bar,V) :- task(V,summary), mark(V,bar). % @constraint Line mark for summary tasks. -soft(summary_line) :- task(summary), mark(line). +soft(summary_line,V) :- task(V,summary), mark(V,line). % @constraint Area mark for summary tasks. -soft(summary_area) :- task(summary), mark(area). +soft(summary_area,V) :- task(V,summary), mark(V,area). % @constraint Text mark for summary tasks. -soft(summary_text) :- task(summary), mark(text). +soft(summary_text,V) :- task(V,summary), mark(V,text). % @constraint Tick mark for summary tasks. -soft(summary_tick) :- task(summary), mark(tick). +soft(summary_tick,V) :- task(V,summary), mark(V,tick). % @constraint Rect mark for summary tasks. -soft(summary_rect) :- task(summary), mark(rect). +soft(summary_rect,V) :- task(V,summary), mark(V,rect). % === Task - channel correlations === % @constraint Continuous x for value tasks. -soft(value_continuous_x,E) :- task(value), channel(E,x), continuous(E), enc_interesting(E). +soft(value_continuous_x,V,E) :- task(V,value), channel(V,E,x), continuous(V,E), enc_interesting(V,E). % @constraint Continuous y for value tasks. -soft(value_continuous_y,E) :- task(value), channel(E,y), continuous(E), enc_interesting(E). +soft(value_continuous_y,V,E) :- task(V,value), channel(V,E,y), continuous(V,E), enc_interesting(V,E). % @constraint Continuous color for value tasks. -soft(value_continuous_color,E) :- task(value), channel(E,color), continuous(E), enc_interesting(E). +soft(value_continuous_color,V,E) :- task(V,value), channel(V,E,color), continuous(V,E), enc_interesting(V,E). % @constraint Continuous size for value tasks. -soft(value_continuous_size,E) :- task(value), channel(E,size), continuous(E), enc_interesting(E). +soft(value_continuous_size,V,E) :- task(V,value), channel(V,E,size), continuous(V,E), enc_interesting(V,E). % @constraint Continuous text for value tasks. -soft(value_continuous_text,E) :- task(value), channel(E,text), continuous(E), enc_interesting(E). +soft(value_continuous_text,V,E) :- task(V,value), channel(V,E,text), continuous(V,E), enc_interesting(V,E). % @constraint Discrete x for value tasks. -soft(value_discrete_x,E) :- task(value), channel(E,x), discrete(E), enc_interesting(E). +soft(value_discrete_x,V,E) :- task(V,value), channel(V,E,x), discrete(V,E), enc_interesting(V,E). % @constraint Discrete y for value tasks. -soft(value_discrete_y,E) :- task(value), channel(E,y), discrete(E), enc_interesting(E). +soft(value_discrete_y,V,E) :- task(V,value), channel(V,E,y), discrete(V,E), enc_interesting(V,E). % @constraint Discrete color for value tasks. -soft(value_discrete_color,E) :- task(value), channel(E,color), discrete(E), enc_interesting(E). +soft(value_discrete_color,V,E) :- task(V,value), channel(V,E,color), discrete(V,E), enc_interesting(V,E). % @constraint Discrete shape for value tasks. -soft(value_discrete_shape,E) :- task(value), channel(E,shape), discrete(E), enc_interesting(E). +soft(value_discrete_shape,V,E) :- task(V,value), channel(V,E,shape), discrete(V,E), enc_interesting(V,E). % @constraint Discrete size for value tasks. -soft(value_discrete_size,E) :- task(value), channel(E,size), discrete(E), enc_interesting(E). +soft(value_discrete_size,V,E) :- task(V,value), channel(V,E,size), discrete(V,E), enc_interesting(V,E). % @constraint Discrete text for value tasks. -soft(value_discrete_text,E) :- task(value), channel(E,text), discrete(E), enc_interesting(E). +soft(value_discrete_text,V,E) :- task(V,value), channel(V,E,text), discrete(V,E), enc_interesting(V,E). % @constraint Discrete row for value tasks. -soft(value_discrete_row,E) :- task(value), channel(E,row), discrete(E), enc_interesting(E). +soft(value_discrete_row,V,E) :- task(V,value), channel(V,E,row), discrete(V,E), enc_interesting(V,E). % @constraint Discrete column for value tasks. -soft(value_discrete_column,E) :- task(value), channel(E,column), discrete(E), enc_interesting(E). +soft(value_discrete_column,E) :- task(V,value), channel(V,E,column), discrete(V,E), enc_interesting(V,E). % @constraint Continuous x for summary tasks. -soft(summary_continuous_x,E) :- task(summary), channel(E,x), continuous(E), enc_interesting(E). +soft(summary_continuous_x,E) :- task(V,summary), channel(V,E,x), continuous(V,E), enc_interesting(V,E). % @constraint Continuous y for summary tasks. -soft(summary_continuous_y,E) :- task(summary), channel(E,y), continuous(E), enc_interesting(E). +soft(summary_continuous_y,E) :- task(V,summary), channel(V,E,y), continuous(V,E), enc_interesting(V,E). % @constraint Continuous color for summary tasks. -soft(summary_continuous_color,E) :- task(summary), channel(E,color), continuous(E), enc_interesting(E). +soft(summary_continuous_color,E) :- task(V,summary), channel(V,E,color), continuous(V,E), enc_interesting(V,E). % @constraint Continuous size for summary tasks. -soft(summary_continuous_size,E) :- task(summary), channel(E,size), continuous(E), enc_interesting(E). +soft(summary_continuous_size,E) :- task(V,summary), channel(V,E,size), continuous(V,E), enc_interesting(V,E). % @constraint Continuous text for summary tasks. -soft(summary_continuous_text,E) :- task(summary), channel(E,text), continuous(E), enc_interesting(E). +soft(summary_continuous_text,E) :- task(V,summary), channel(V,E,text), continuous(V,E), enc_interesting(V,E). % @constraint Discrete x for summary tasks. -soft(summary_discrete_x,E) :- task(summary), channel(E,x), discrete(E), enc_interesting(E). +soft(summary_discrete_x,E) :- task(V,summary), channel(V,E,x), discrete(V,E), enc_interesting(V,E). % @constraint Discrete y for summary tasks. -soft(summary_discrete_y,E) :- task(summary), channel(E,y), discrete(E), enc_interesting(E). +soft(summary_discrete_y,E) :- task(V,summary), channel(V,E,y), discrete(V,E), enc_interesting(V,E). % @constraint Discrete color for summary tasks. -soft(summary_discrete_color,E) :- task(summary), channel(E,color), discrete(E), enc_interesting(E). +soft(summary_discrete_color,E) :- task(V,summary), channel(V,E,color), discrete(V,E), enc_interesting(V,E). % @constraint Discrete shape for summary tasks. -soft(summary_discrete_shape,E) :- task(summary), channel(E,shape), discrete(E), enc_interesting(E). +soft(summary_discrete_shape,E) :- task(V,summary), channel(V,E,shape), discrete(V,E), enc_interesting(V,E). % @constraint Discrete size for summary tasks. -soft(summary_discrete_size,E) :- task(summary), channel(E,size), discrete(E), enc_interesting(E). +soft(summary_discrete_size,E) :- task(V,summary), channel(V,E,size), discrete(V,E), enc_interesting(V,E). % @constraint Discrete text for summary tasks. -soft(summary_discrete_text,E) :- task(summary), channel(E,text), discrete(E), enc_interesting(E). +soft(summary_discrete_text,E) :- task(V,summary), channel(V,E,text), discrete(V,E), enc_interesting(V,E). % @constraint Discrete row for summary tasks. -soft(summary_discrete_row,E) :- task(summary), channel(E,row), discrete(E), enc_interesting(E). +soft(summary_discrete_row,E) :- task(V,summary), channel(V,E,row), discrete(V,E), enc_interesting(V,E). % @constraint Discrete column for summary tasks. -soft(summary_discrete_column,E) :- task(summary), channel(E,column), discrete(E), enc_interesting(E). \ No newline at end of file +soft(summary_discrete_column,E) :- task(V,summary), channel(V,E,column), discrete(V,E), enc_interesting(V,E). \ No newline at end of file diff --git a/draco/js.py b/draco/js.py index a57e0a3..fd586a1 100644 --- a/draco/js.py +++ b/draco/js.py @@ -39,7 +39,6 @@ def asp2vl(asp: List[str]) -> Dict: if stderr: logger.error("stderr: %s", stderr) - print(stdout) return json.loads(stdout) diff --git a/draco/run.py b/draco/run.py index 7291a83..97f2fcc 100644 --- a/draco/run.py +++ b/draco/run.py @@ -26,6 +26,9 @@ "assign_weights.lp", "optimize.lp", "output.lp", + "compare.lp", + "assign_compare_weights.lp", + "compare_weights.lp" ] DRACO_LP_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../asp") @@ -47,6 +50,8 @@ def __init__(self, answers: Answers, cost: Optional[int] = None) -> None: cost = int(body[0]) elif head == "soft": violations[body[0]] += 1 + elif head == "compare": + violations[body[0]] += 1 else: b = ",".join(map(str, body)) props.append(f"{head}({b}).") @@ -55,8 +60,8 @@ def __init__(self, answers: Answers, cost: Optional[int] = None) -> None: self.violations = violations self.cost = cost - def as_vl(self) -> Dict: - return asp2vl(self.props) + def as_vl(self,v) -> Dict: + return asp2vl(self.props)[v] def load_file(path: str) -> bytes: diff --git a/examples/multi.py b/examples/multi.py new file mode 100644 index 0000000..0b17b7c --- /dev/null +++ b/examples/multi.py @@ -0,0 +1,104 @@ +from draco.run import run + +# program = """% ====== Data definitions ====== +# data("cars.json"). +# num_rows(142). + +# fieldtype(horsepower,number). +# cardinality(horsepower,94). + +# fieldtype(acceleration,number). +# cardinality(acceleration,96). + +# % ====== Query constraints ====== +# visualization(v1). + +# encoding(v1,e0). +# :- not field(v1,e0,acceleration). + +# encoding(v1,e1). +# :- not field(v1,e1,horsepower).""" + +# asp = program.split('\n') + +# result = run(asp) + +# print('{0}'.format('\n'.join(result.props))) + + + +# program = """% ====== Data definitions ====== +# data("cars.json"). +# num_rows(142). + +# fieldtype(horsepower,number). +# cardinality(horsepower,94). + +# fieldtype(acceleration,number). +# cardinality(acceleration,96). + +# % ====== Query constraints ====== +# visualization(v1). +# data("cars.json"). +# type(v1,e0,quantitative). +# type(v1,e1,quantitative). +# field(v1,e0,acceleration). +# field(v1,e1,horsepower). +# channel(v1,e0,x). +# channel(v1,e1,y). +# zero(v1,e0). +# zero(v1,e1). +# mark(v1,point).""" + +# asp = program.split('\n') +# result = run(asp) + +# print('{0}'.format('\n'.join(result.props))) + + + +program = """% ====== Data definitions ====== +data("cars.json"). +num_rows(142). + +fieldtype(horsepower,number). +cardinality(horsepower,94). + +fieldtype(acceleration,number). +cardinality(acceleration,96). + +% ====== Query constraints ====== +visualization(v1). +% base(v1). +data("cars.json"). +encoding(v1,e0). +encoding(v1,e1). +type(v1,e0,quantitative). +type(v1,e1,quantitative). +field(v1,e0,acceleration). +field(v1,e1,horsepower). +channel(v1,e0,x). +channel(v1,e1,y). +zero(v1,e0). +zero(v1,e1). +:- log(v1,_). +:- bin(v1,_,_). +:- aggregate(v1,_,_). +:- stack(v1,_). +:- not { encoding(v1,_) } = 2. +mark(v1,point). + +visualization(v2). + +mark(v2,bar). + +encoding(v2,e0). +:- not field(v2,e0,acceleration). + +encoding(v2,e1). +:- not field(v2,e1,horsepower).""" + +asp = program.split('\n') +result = run(asp) + +print('{0}'.format('\n'.join(result.props))) \ No newline at end of file diff --git a/js/src/asp2vl.ts b/js/src/asp2vl.ts index 959f3e5..cd6b658 100644 --- a/js/src/asp2vl.ts +++ b/js/src/asp2vl.ts @@ -1,11 +1,29 @@ import { TopLevelFacetedUnitSpec } from 'vega-lite/build/src/spec'; -const REGEX = /(\w+)\(([\w\.\/]+)(,([\w\.]+))?\)/; +const REGEX = /(\w+)\(([\w\.\/]+)(,([\w\.]+))?(,([\w\.]+))?\)/; +const V_REGEX = /visualization\((.*)\)./; /** * Convert from ASP to Vega-Lite. */ -export default function asp2vl(facts: string[]): TopLevelFacetedUnitSpec { +export default function asp2vl(facts: string[]): TopLevelFacetedUnitSpec[] { + const visualizations = facts.filter(fact => { + const extract = V_REGEX.exec(fact); + return extract !== null; + }).map(fact => { + const extract = V_REGEX.exec(fact); + return extract[1]; + }); + + + const result = visualizations.map(v => { + return asp2vl_single(facts, v); + }); + + return result; +} + +function asp2vl_single(facts: string[], v: string) { let mark = ''; let url = 'data/cars.json'; // default dataset const encodings: { [enc: string]: any } = {}; @@ -14,7 +32,11 @@ export default function asp2vl(facts: string[]): TopLevelFacetedUnitSpec { // TODO: Better handle quoted fields. We currently simply remove all ". const cleanedValue = value.replace(/\"/g, ''); const negSymbol = value.trim().startsWith(':-'); // TODO: remove this - const [_, predicate, first, __, second] = REGEX.exec(cleanedValue) as any; + const [_, predicate, viz, __, first, ___, second] = REGEX.exec(cleanedValue) as any; + + if (viz !== v || predicate === 'visualization') { + continue; + } if (predicate === 'mark') { mark = first; diff --git a/js/src/cql2asp.ts b/js/src/cql2asp.ts index 6911684..4946a28 100644 --- a/js/src/cql2asp.ts +++ b/js/src/cql2asp.ts @@ -3,10 +3,10 @@ const HOLE = '?'; export default function cql2asp(spec: any) { const mark = subst_if_hole(spec.mark); - const facts = []; + const facts = ['visualization(v1).']; if (mark) { - facts.push(`mark(${spec.mark}).`); + facts.push(`mark(v1,${spec.mark}).`); } if ('data' in spec && 'url' in spec.data) { @@ -16,7 +16,7 @@ export default function cql2asp(spec: any) { for (let i = 0; i < spec.encodings.length; i++) { const enc = spec.encodings[i]; const eid = `e${i}`; - facts.push(`encoding(${eid}).`); + facts.push(`encoding(v1,${eid}).`); let encFieldType = null; let encZero = null; @@ -44,39 +44,39 @@ export default function cql2asp(spec: any) { if ('zero' in fieldContent) { encZero = fieldContent.zero; if (fieldContent.zero) { - facts.push(`zero(${eid}).`); + facts.push(`zero(v1,${eid}).`); } else { - facts.push(`:- zero(${eid}).`); + facts.push(`:- zero(v1,${eid}).`); } } if ('log' in fieldContent) { if (fieldContent.log) { - facts.push(`log(${eid}).`); + facts.push(`log(v1,${eid}).`); } else { - facts.push(`:-log(${eid}).`); + facts.push(`:-log(v1,${eid}).`); } } } else if (field === 'bin') { if (fieldContent.maxbins) { facts.push(`${field}(${eid},${fieldContent.maxbins}).`); } else if (fieldContent) { - facts.push(`:- not bin(${eid},_).`); + facts.push(`:- not bin(v1,${eid},_).`); } else { - facts.push(`:- bin(${eid},_).`); + facts.push(`:- bin(v1,${eid},_).`); } } else if (field === 'field') { // fields can have spaces and start with capital letters - facts.push(`${field}(${eid},"${fieldContent}").`); + facts.push(`${field}(v1,${eid},"${fieldContent}").`); } else { // translate normal fields if (field !== 'bin') { - facts.push(`${field}(${eid},${fieldContent}).`); + facts.push(`${field}(v1,${eid},${fieldContent}).`); } } } if (encFieldType === 'quantitative' && encZero === null && encBinned === null) { - facts.push(`zero(${eid}).`); + facts.push(`zero(v1,${eid}).`); } } From cdf218412bd4cdb24e2d286abb671cf52425254d Mon Sep 17 00:00:00 2001 From: Halden Lin Date: Tue, 12 Feb 2019 21:12:52 -0800 Subject: [PATCH 02/25] preliminary full graphscape --- asp/compare.lp | 169 +++++++++++++++++++++++++++++++++++++++------- asp/generate.lp | 4 +- asp/optimize.lp | 5 +- draco/run.py | 3 +- examples/multi.py | 117 +++++++++++++++++++++----------- js/src/asp2vl.ts | 11 +-- 6 files changed, 234 insertions(+), 75 deletions(-) diff --git a/asp/compare.lp b/asp/compare.lp index d3c16d4..2f10309 100644 --- a/asp/compare.lp +++ b/asp/compare.lp @@ -1,31 +1,148 @@ %% FILE GENERATED BY graphscapeToAsp.js, DO NOT MODIFY %% -compare(edit_area_bar,V1,V2) :- mark(V1,area), mark(V2,bar). -compare(edit_area_line,V1,V2) :- mark(V1,area), mark(V2,line). -compare(edit_area_point,V1,V2) :- mark(V1,area), mark(V2,point). -compare(edit_area_text,V1,V2) :- mark(V1,area), mark(V2,text). -compare(edit_area_tick,V1,V2) :- mark(V1,area), mark(V2,tick). -compare(edit_bar_line,V1,V2) :- mark(V1,bar), mark(V2,line). -compare(edit_bar_point,V1,V2) :- mark(V1,bar), mark(V2,point). -compare(edit_bar_text,V1,V2) :- mark(V1,bar), mark(V2,text). -compare(edit_bar_tick,V1,V2) :- mark(V1,bar), mark(V2,tick). -compare(edit_line_point,V1,V2) :- mark(V1,line), mark(V2,point). -compare(edit_line_text,V1,V2) :- mark(V1,line), mark(V2,text). -compare(edit_line_tick,V1,V2) :- mark(V1,line), mark(V2,tick). -compare(edit_point_text,V1,V2) :- mark(V1,point), mark(V2,text). -compare(edit_point_tick,V1,V2) :- mark(V1,point), mark(V2,tick). -compare(edit_text_tick,V1,V2) :- mark(V1,text), mark(V2,tick). +comparable(V1,V2) :- visualization(V1), base(V1), visualization(V2), V1 != V2. +% MARK EDITS +compare(edit_area_bar,V1,V2) :- comparable(V1,V2), mark(V1,area), mark(V2,bar). +compare(edit_area_line,V1,V2) :- comparable(V1,V2), mark(V1,area), mark(V2,line). +compare(edit_area_point,V1,V2) :- comparable(V1,V2), mark(V1,area), mark(V2,point). +compare(edit_area_text,V1,V2) :- comparable(V1,V2), mark(V1,area), mark(V2,text). +compare(edit_area_tick,V1,V2) :- comparable(V1,V2), mark(V1,area), mark(V2,tick). +compare(edit_bar_line,V1,V2) :- comparable(V1,V2), mark(V1,bar), mark(V2,line). +compare(edit_bar_point,V1,V2) :- comparable(V1,V2), mark(V1,bar), mark(V2,point). +compare(edit_bar_text,V1,V2) :- comparable(V1,V2), mark(V1,bar), mark(V2,text). +compare(edit_bar_tick,V1,V2) :- comparable(V1,V2), mark(V1,bar), mark(V2,tick). +compare(edit_line_point,V1,V2) :- comparable(V1,V2), mark(V1,line), mark(V2,point). +compare(edit_line_text,V1,V2) :- comparable(V1,V2), mark(V1,line), mark(V2,text). +compare(edit_line_tick,V1,V2) :- comparable(V1,V2), mark(V1,line), mark(V2,tick). +compare(edit_point_text,V1,V2) :- comparable(V1,V2), mark(V1,point), mark(V2,text). +compare(edit_point_tick,V1,V2) :- comparable(V1,V2), mark(V1,point), mark(V2,tick). +compare(edit_text_tick,V1,V2) :- comparable(V1,V2), mark(V1,text), mark(V2,tick). -compare(edit_scale,V1,V2) :- visualization(V1), visualization(V2), log(V1,E), not log(V2,E). -compare(edit_scale,V1,V2) :- visualization(V1), visualization(V2), zero(V1,E), not zero(V2,E). -compare(edit_scale,V1,V2) :- visualization(V1), visualization(V2), not log(V1,E), log(V2,E). -compare(edit_scale,V1,V2) :- visualization(V1), visualization(V2), not zero(V1,E), zero(V2,E). -compare(edit_bin,V1,V2) :- visualization(V1), visualization(V2), bin(V1,E,_), not bin(V2,E,_). -compare(edit_bin,V1,V2) :- visualization(V1), visualization(V2), not bin(V1,E,_), bin(V2,E,_). +% ENCODING EDITS +compare(edit_add_x,V1,V2) :- not compare(edit_add_x_count,V1,V2), comparable(V1,V2), visualization(V1), channel(V2,E2,x), field(V2,E2,F2), not channel(V1,_,x), not field(V1,_,F2). +compare(edit_add_y,V1,V2) :- not compare(edit_add_y_count,V1,V2), comparable(V1,V2), visualization(V1), channel(V2,E2,y), field(V2,E2,F2), not channel(V1,_,y), not field(V1,_,F2). +compare(edit_add_color,V1,V2) :- not compare(edit_add_color_count,V1,V2), comparable(V1,V2), visualization(V1), channel(V2,E2,color), field(V2,E2,F2), not channel(V1,_,color), not field(V1,_,F2). +compare(edit_add_shape,V1,V2) :- not compare(edit_add_shape_count,V1,V2), comparable(V1,V2), visualization(V1), channel(V2,E2,shape), field(V2,E2,F2), not channel(V1,_,shape), not field(V1,_,F2). +compare(edit_add_size,V1,V2) :- not compare(edit_add_size_count,V1,V2), comparable(V1,V2), visualization(V1), channel(V2,E2,size), field(V2,E2,F2), not channel(V1,_,size), not field(V1,_,F2). +compare(edit_add_row,V1,V2) :- not compare(edit_add_row_count,V1,V2), comparable(V1,V2), visualization(V1), channel(V2,E2,row), field(V2,E2,F2), not channel(V1,_,row), not field(V1,_,F2). +compare(edit_add_column,V1,V2) :- not compare(edit_add_column_count,V1,V2), comparable(V1,V2), visualization(V1), channel(V2,E2,column), field(V2,E2,F2), not channel(V1,_,column), not field(V1,_,F2). +compare(edit_add_text,V1,V2) :- not compare(edit_add_text_count,V1,V2), comparable(V1,V2), visualization(V1), channel(V2,E2,text), field(V2,E2,F2), not channel(V1,_,text), not field(V1,_,F2). +compare(edit_add_x_count,V1,V2) :- comparable(V1,V2), visualization(V1), channel(V2,E2,x), field(V2,E2,F2), not channel(V1,_,x), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_add_y_count,V1,V2) :- comparable(V1,V2), visualization(V1), channel(V2,E2,y), field(V2,E2,F2), not channel(V1,_,y), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_add_color_count,V1,V2) :- comparable(V1,V2), visualization(V1), channel(V2,E2,color), field(V2,E2,F2), not channel(V1,_,color), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_add_shape_count,V1,V2) :- comparable(V1,V2), visualization(V1), channel(V2,E2,shape), field(V2,E2,F2), not channel(V1,_,shape), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_add_size_count,V1,V2) :- comparable(V1,V2), visualization(V1), channel(V2,E2,size), field(V2,E2,F2), not channel(V1,_,size), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_add_row_count,V1,V2) :- comparable(V1,V2), visualization(V1), channel(V2,E2,row), field(V2,E2,F2), not channel(V1,_,row), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_add_column_count,V1,V2) :- comparable(V1,V2), visualization(V1), channel(V2,E2,column), field(V2,E2,F2), not channel(V1,_,column), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_add_text_count,V1,V2) :- comparable(V1,V2), visualization(V1), channel(V2,E2,text), field(V2,E2,F2), not channel(V1,_,text), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_remove_x_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,x), field(V1,E1,F1), visualization(V2), not channel(V2,_,x), not field(V2,_,F1), aggregate(V1,E1,count). +compare(edit_remove_y_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,y), field(V1,E1,F1), visualization(V2), not channel(V2,_,y), not field(V2,_,F1), aggregate(V1,E1,count). +compare(edit_remove_color_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,color), field(V1,E1,F1), visualization(V2), not channel(V2,_,color), not field(V2,_,F1), aggregate(V1,E1,count). +compare(edit_remove_shape_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,shape), field(V1,E1,F1), visualization(V2), not channel(V2,_,shape), not field(V2,_,F1), aggregate(V1,E1,count). +compare(edit_remove_size_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,size), field(V1,E1,F1), visualization(V2), not channel(V2,_,size), not field(V2,_,F1), aggregate(V1,E1,count). +compare(edit_remove_row_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,row), field(V1,E1,F1), visualization(V2), not channel(V2,_,row), not field(V2,_,F1), aggregate(V1,E1,count). +compare(edit_remove_column_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,column), field(V1,E1,F1), visualization(V2), not channel(V2,_,column), not field(V2,_,F1), aggregate(V1,E1,count). +compare(edit_remove_text_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,text), field(V1,E1,F1), visualization(V2), not channel(V2,_,text), not field(V2,_,F1), aggregate(V1,E1,count). +compare(edit_remove_x,V1,V2) :- not compare(edit_remove_x_count,V1,V2), comparable(V1,V2), channel(V1,E1,x), field(V1,E1,F1), visualization(V2), not channel(V2,_,x), not field(V2,_,F1). +compare(edit_remove_y,V1,V2) :- not compare(edit_remove_y_count,V1,V2), comparable(V1,V2), channel(V1,E1,y), field(V1,E1,F1), visualization(V2), not channel(V2,_,y), not field(V2,_,F1). +compare(edit_remove_color,V1,V2) :- not compare(edit_remove_color_count,V1,V2), comparable(V1,V2), channel(V1,E1,color), field(V1,E1,F1), visualization(V2), not channel(V2,_,color), not field(V2,_,F1). +compare(edit_remove_shape,V1,V2) :- not compare(edit_remove_shape_count,V1,V2), comparable(V1,V2), channel(V1,E1,shape), field(V1,E1,F1), visualization(V2), not channel(V2,_,shape), not field(V2,_,F1). +compare(edit_remove_size,V1,V2) :- not compare(edit_remove_size_count,V1,V2), comparable(V1,V2), channel(V1,E1,size), field(V1,E1,F1), visualization(V2), not channel(V2,_,size), not field(V2,_,F1). +compare(edit_remove_row,V1,V2) :- not compare(edit_remove_row_count,V1,V2), comparable(V1,V2), channel(V1,E1,row), field(V1,E1,F1), visualization(V2), not channel(V2,_,row), not field(V2,_,F1). +compare(edit_remove_column,V1,V2) :- not compare(edit_remove_column_count,V1,V2), comparable(V1,V2), channel(V1,E1,column), field(V1,E1,F1), visualization(V2), not channel(V2,_,column), not field(V2,_,F1). +compare(edit_remove_text,V1,V2) :- not compare(edit_remove_text_count,V1,V2), comparable(V1,V2), channel(V1,E1,text), field(V1,E1,F1), visualization(V2), not channel(V2,_,text), not field(V2,_,F1). +compare(edit_modify_x,V1,V2) :- not compare(edit_modify_x_add_count,V1,V2), not compare(edit_modify_x_remove_count,V1,V2), comparable(V1,V2), channel(V1,E1,x), channel(V2,E2,x), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_y,V1,V2) :- not compare(edit_modify_y_add_count,V1,V2), not compare(edit_modify_y_remove_count,V1,V2), comparable(V1,V2), channel(V1,E1,y), channel(V2,E2,y), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_color,V1,V2) :- not compare(edit_modify_color_add_count,V1,V2), not compare(edit_modify_color_remove_count,V1,V2), comparable(V1,V2), channel(V1,E1,color), channel(V2,E2,color), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_shape,V1,V2) :- not compare(edit_modify_shape_add_count,V1,V2), not compare(edit_modify_shape_remove_count,V1,V2), comparable(V1,V2), channel(V1,E1,shape), channel(V2,E2,shape), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_size,V1,V2) :- not compare(edit_modify_size_add_count,V1,V2), not compare(edit_modify_size_remove_count,V1,V2), comparable(V1,V2), channel(V1,E1,size), channel(V2,E2,size), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_row,V1,V2) :- not compare(edit_modify_row_add_count,V1,V2), not compare(edit_modify_row_remove_count,V1,V2), comparable(V1,V2), channel(V1,E1,row), channel(V2,E2,row), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_column,V1,V2) :- not compare(edit_modify_column_add_count,V1,V2), not compare(edit_modify_column_remove_count,V1,V2), comparable(V1,V2), channel(V1,E1,column), channel(V2,E2,column), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_text,V1,V2) :- not compare(edit_modify_text_add_count,V1,V2), not compare(edit_modify_text_remove_count,V1,V2), comparable(V1,V2), channel(V1,E1,text), channel(V2,E2,text), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_x_add_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,x), channel(V2,E2,x), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_modify_y_add_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,y), channel(V2,E2,y), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_modify_color_add_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,color), channel(V2,E2,color), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_modify_shape_add_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,shape), channel(V2,E2,shape), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_modify_size_add_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,size), channel(V2,E2,size), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_modify_row_add_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,row), channel(V2,E2,row), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_modify_column_add_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,column), channel(V2,E2,column), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_modify_text_add_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,text), channel(V2,E2,text), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_modify_x_remove_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,x), channel(V2,E2,x), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). +compare(edit_modify_y_remove_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,y), channel(V2,E2,y), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). +compare(edit_modify_color_remove_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,color), channel(V2,E2,color), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). +compare(edit_modify_shape_remove_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,shape), channel(V2,E2,shape), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). +compare(edit_modify_size_remove_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,size), channel(V2,E2,size), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). +compare(edit_modify_row_remove_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,row), channel(V2,E2,row), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). +compare(edit_modify_column_remove_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,column), channel(V2,E2,column), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). +compare(edit_modify_text_remove_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,text), channel(V2,E2,text), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). +compare(edit_move_x_row,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,row), channel(V1,E1B,row), channel(V2,E2B,x), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_x_column,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,column), channel(V1,E1B,column), channel(V2,E2B,x), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_x_size,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,size), channel(V1,E1B,size), channel(V2,E2B,x), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_x_shape,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,shape), channel(V1,E1B,shape), channel(V2,E2B,x), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_x_color,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,color), channel(V1,E1B,color), channel(V2,E2B,x), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_x_y,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,y), channel(V1,E1B,y), channel(V2,E2B,x), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_x_text,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,text), channel(V1,E1B,text), channel(V2,E2B,x), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_y_row,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,row), channel(V1,E1B,row), channel(V2,E2B,y), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_y_column,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,column), channel(V1,E1B,column), channel(V2,E2B,y), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_y_size,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,size), channel(V1,E1B,size), channel(V2,E2B,y), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_y_shape,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,shape), channel(V1,E1B,shape), channel(V2,E2B,y), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_y_color,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,color), channel(V1,E1B,color), channel(V2,E2B,y), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_y_x,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,x), channel(V1,E1B,x), channel(V2,E2B,y), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_y_text,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,text), channel(V1,E1B,text), channel(V2,E2B,y), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_color_row,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,row), channel(V1,E1B,row), channel(V2,E2B,color), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_color_column,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,column), channel(V1,E1B,column), channel(V2,E2B,color), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_color_size,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,size), channel(V1,E1B,size), channel(V2,E2B,color), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_color_shape,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,shape), channel(V1,E1B,shape), channel(V2,E2B,color), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_color_y,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,y), channel(V1,E1B,y), channel(V2,E2B,color), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_color_x,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,x), channel(V1,E1B,x), channel(V2,E2B,color), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_color_text,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,text), channel(V1,E1B,text), channel(V2,E2B,color), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_shape_row,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,row), channel(V1,E1B,row), channel(V2,E2B,shape), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_shape_column,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,column), channel(V1,E1B,column), channel(V2,E2B,shape), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_shape_size,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,size), channel(V1,E1B,size), channel(V2,E2B,shape), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_shape_color,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,color), channel(V1,E1B,color), channel(V2,E2B,shape), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_shape_y,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,y), channel(V1,E1B,y), channel(V2,E2B,shape), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_shape_x,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,x), channel(V1,E1B,x), channel(V2,E2B,shape), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_shape_text,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,text), channel(V1,E1B,text), channel(V2,E2B,shape), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_size_row,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,row), channel(V1,E1B,row), channel(V2,E2B,size), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_size_column,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,column), channel(V1,E1B,column), channel(V2,E2B,size), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_size_shape,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,shape), channel(V1,E1B,shape), channel(V2,E2B,size), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_size_color,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,color), channel(V1,E1B,color), channel(V2,E2B,size), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_size_y,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,y), channel(V1,E1B,y), channel(V2,E2B,size), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_size_x,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,x), channel(V1,E1B,x), channel(V2,E2B,size), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_size_text,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,text), channel(V1,E1B,text), channel(V2,E2B,size), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_text_row,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,row), channel(V1,E1B,row), channel(V2,E2B,text), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_text_column,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,column), channel(V1,E1B,column), channel(V2,E2B,text), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_text_shape,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,shape), channel(V1,E1B,shape), channel(V2,E2B,text), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_text_color,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,color), channel(V1,E1B,color), channel(V2,E2B,text), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_text_y,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,y), channel(V1,E1B,y), channel(V2,E2B,text), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_text_x,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,x), channel(V1,E1B,x), channel(V2,E2B,text), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_text_size,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,size), channel(V1,E1B,size), channel(V2,E2B,text), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_column_row,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,row), channel(V1,E1B,row), channel(V2,E2B,column), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_column_size,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,size), channel(V1,E1B,size), channel(V2,E2B,column), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_column_shape,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,shape), channel(V1,E1B,shape), channel(V2,E2B,column), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_column_color,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,color), channel(V1,E1B,color), channel(V2,E2B,column), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_column_y,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,y), channel(V1,E1B,y), channel(V2,E2B,column), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_column_x,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,x), channel(V1,E1B,x), channel(V2,E2B,column), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_column_text,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,text), channel(V1,E1B,text), channel(V2,E2B,column), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_row_column,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,column), channel(V1,E1B,column), channel(V2,E2B,row), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_row_size,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,size), channel(V1,E1B,size), channel(V2,E2B,row), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_row_shape,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,shape), channel(V1,E1B,shape), channel(V2,E2B,row), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_row_color,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,color), channel(V1,E1B,color), channel(V2,E2B,row), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_row_y,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,y), channel(V1,E1B,y), channel(V2,E2B,row), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_row_x,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,x), channel(V1,E1B,x), channel(V2,E2B,row), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_row_text,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,text), channel(V1,E1B,text), channel(V2,E2B,row), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_swap_x_y,V1,V2) :- comparable(V1,V2), channel(V1,E1A,x), channel(V1,E1B,y), channel(V2,E2A,x), channel(V2,E2B,y), field(V1,E1A,FA), field(V2,E2B,FA), field(V1,E1B,FB), field(V2,E2A,FB), E2A > E2B, E1A > E1B. +compare(edit_swap_row_column,V1,V2) :- comparable(V1,V2), channel(V1,E1A,row), channel(V1,E1B,column), channel(V2,E2A,row), channel(V2,E2B,column), field(V1,E1A,FA), field(V2,E2B,FA), field(V1,E1B,FB), field(V2,E2A,FB), E2A > E2B, E1A > E1B. -compare(edit_aggregate,V1,V2) :- visualization(V1), visualization(V2), aggregate(V1,E,A1), aggregate(V2,E,A2), A1 != A2. -compare(edit_aggregate,V1,V2) :- visualization(V1), visualization(V2), aggregate(V1,E,_), not aggregate(V2,E,_). -compare(edit_aggregate,V1,V2) :- visualization(V1), visualization(V2), not aggregate(V1,E,_), aggregate(V2,E,_). -compare(edit_move_y_color,V1,V2) :- visualization(V1), visualization(V2), channel(V1,E,y), channel(V2,E,color). -compare(edit_move_x_color,V1,V2) :- visualization(V1), visualization(V2), channel(V1,E,x), channel(V2,E,color). \ No newline at end of file +compare(edit_scale,V1,V2) :- comparable(V1,V2), visualization(V1), visualization(V2), log(V1,E), not log(V2,E). +compare(edit_scale,V1,V2) :- comparable(V1,V2), visualization(V1), visualization(V2), zero(V1,E), not zero(V2,E). +compare(edit_scale,V1,V2) :- comparable(V1,V2), visualization(V1), visualization(V2), not log(V1,E), log(V2,E). +compare(edit_scale,V1,V2) :- comparable(V1,V2), visualization(V1), visualization(V2), not zero(V1,E), zero(V2,E). + +compare(edit_bin,V1,V2) :- comparable(V1,V2), visualization(V1), visualization(V2), bin(V1,E,_), not bin(V2,E,_). +compare(edit_bin,V1,V2) :- comparable(V1,V2), visualization(V1), visualization(V2), not bin(V1,E,_), bin(V2,E,_). + +compare(edit_aggregate,V1,V2) :- comparable(V1,V2), visualization(V1), visualization(V2), aggregate(V1,E,A1), aggregate(V2,E,A2), A1 != A2. +compare(edit_aggregate,V1,V2) :- comparable(V1,V2), visualization(V1), visualization(V2), aggregate(V1,E,_), not aggregate(V2,E,_). +compare(edit_aggregate,V1,V2) :- comparable(V1,V2), visualization(V1), visualization(V2), not aggregate(V1,E,_), aggregate(V2,E,_). \ No newline at end of file diff --git a/asp/generate.lp b/asp/generate.lp index 3f3bf0e..b284b50 100644 --- a/asp/generate.lp +++ b/asp/generate.lp @@ -3,7 +3,7 @@ % encodings % maximum number for each multi channel encoding -#const max_extra_encs = 5. +#const max_extra_encs = 1. obj_id(1..max_extra_encs). @@ -21,7 +21,7 @@ obj_id(1..max_extra_encs). 0 { field(V,E,F): field(F) } 1 :- encoding(V,E). 0 { aggregate(V,E,A): aggregate_op(A) } 1 :- encoding(V,E). 0 { bin(V,E,B): binning(B) } 1 :- encoding(V,E). -0 { zero(V,E) } 1 :- encoding(V,E). +0 { zero(V,E) } 1 :- encoding(V,E). 0 { log(V,E) } 1 :- encoding(V,E). % pick one mark type diff --git a/asp/optimize.lp b/asp/optimize.lp index 02bc159..cdee188 100644 --- a/asp/optimize.lp +++ b/asp/optimize.lp @@ -1,3 +1,6 @@ % Minimize the feature weight -#minimize { W,F,V,Q: soft_weight(F,W), soft(F,V,Q); W,F,V1,V2: compare_weight(F,W), compare(F,V1,V2) }. +% #minimize { W,F,V,Q: soft_weight(F,W), soft(F,V,Q); W,F,V1,V2: compare_weight(F,W), compare(F,V1,V2) }. + +#minimize { W@2,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. +#minimize { W@1,F,V1,V2: compare_weight(F,W), compare(F,V1,V2) }. \ No newline at end of file diff --git a/draco/run.py b/draco/run.py index 97f2fcc..b1ab35c 100644 --- a/draco/run.py +++ b/draco/run.py @@ -61,7 +61,8 @@ def __init__(self, answers: Answers, cost: Optional[int] = None) -> None: self.cost = cost def as_vl(self,v) -> Dict: - return asp2vl(self.props)[v] + specs = asp2vl(self.props) + return specs[v] def load_file(path: str) -> bytes: diff --git a/examples/multi.py b/examples/multi.py index 0b17b7c..56c6731 100644 --- a/examples/multi.py +++ b/examples/multi.py @@ -57,46 +57,83 @@ -program = """% ====== Data definitions ====== -data("cars.json"). -num_rows(142). - -fieldtype(horsepower,number). -cardinality(horsepower,94). - -fieldtype(acceleration,number). -cardinality(acceleration,96). - -% ====== Query constraints ====== -visualization(v1). -% base(v1). -data("cars.json"). -encoding(v1,e0). -encoding(v1,e1). -type(v1,e0,quantitative). -type(v1,e1,quantitative). -field(v1,e0,acceleration). -field(v1,e1,horsepower). -channel(v1,e0,x). -channel(v1,e1,y). -zero(v1,e0). -zero(v1,e1). -:- log(v1,_). -:- bin(v1,_,_). -:- aggregate(v1,_,_). -:- stack(v1,_). -:- not { encoding(v1,_) } = 2. -mark(v1,point). - -visualization(v2). - -mark(v2,bar). - -encoding(v2,e0). -:- not field(v2,e0,acceleration). - -encoding(v2,e1). -:- not field(v2,e1,horsepower).""" +program = """visualization("view"). +num_rows(406). + +fieldtype("Acceleration",number). +cardinality("Acceleration", 96). +fieldtype("Cylinders",number). +cardinality("Cylinders", 5). +fieldtype("Displacement",number). +cardinality("Displacement", 83). +fieldtype("Horsepower",number). +cardinality("Horsepower", 94). +fieldtype("Miles_per_Gallon",number). +cardinality("Miles_per_Gallon", 130). +fieldtype("Name",string). +cardinality("Name", 311). +fieldtype("Origin",string). +cardinality("Origin", 3). +fieldtype("Weight_in_lbs",number). +cardinality("Weight_in_lbs", 356). +fieldtype("Year",number). +cardinality("Year", 12). + +mark("view",point). +encoding("view",e0). +:- not field("view",e0,"Horsepower"). +aggregate("view",e0,mean). +channel("view",e0,x). +encoding("view",e1). +:- not field("view",e1,"Miles_per_Gallon"). +visualization("first"). +num_rows(406). + +fieldtype("Acceleration",number). +cardinality("Acceleration", 96). +fieldtype("Cylinders",number). +cardinality("Cylinders", 5). +fieldtype("Displacement",number). +cardinality("Displacement", 83). +fieldtype("Horsepower",number). +cardinality("Horsepower", 94). +fieldtype("Miles_per_Gallon",number). +cardinality("Miles_per_Gallon", 130). +fieldtype("Name",string). +cardinality("Name", 311). +fieldtype("Origin",string). +cardinality("Origin", 3). +fieldtype("Weight_in_lbs",number). +cardinality("Weight_in_lbs", 356). +fieldtype("Year",number). +cardinality("Year", 12). + +encoding("first",e0). +base("first"). +:- not field("first",e0,"Horsepower"). +aggregate("first",e0,mean). +channel("first",e0,x). +encoding("first",e1). +:- not field("first",e1,"Miles_per_Gallon"). +visualization("first"). +encoding("first",e0). +encoding("first",e1). +aggregate("first",e0,mean). +channel("first",e0,x). +bin("first",e1,10). +type("first",e0,quantitative). +type("first",e1,quantitative). +field("first",e0,"Horsepower"). +field("first",e1,"Miles_per_Gallon"). +channel("first",e1,y). +zero("first",e0). +mark("first",bar). +:- not { encoding("first",_) } = 2. +:- not { channel("first",_,_) } = 2. +:- not { bin("first",_,_) } = 1. +:- not { type("first",_,_) } = 2. +:- not { field("first",_,_) } = 2. +:- not { zero("first",_) } = 1.""" asp = program.split('\n') result = run(asp) diff --git a/js/src/asp2vl.ts b/js/src/asp2vl.ts index cd6b658..3cccd51 100644 --- a/js/src/asp2vl.ts +++ b/js/src/asp2vl.ts @@ -6,7 +6,7 @@ const V_REGEX = /visualization\((.*)\)./; /** * Convert from ASP to Vega-Lite. */ -export default function asp2vl(facts: string[]): TopLevelFacetedUnitSpec[] { +export default function asp2vl(facts: string[]): {[name: string]: TopLevelFacetedUnitSpec} { const visualizations = facts.filter(fact => { const extract = V_REGEX.exec(fact); return extract !== null; @@ -16,9 +16,10 @@ export default function asp2vl(facts: string[]): TopLevelFacetedUnitSpec[] { }); - const result = visualizations.map(v => { - return asp2vl_single(facts, v); - }); + const result = visualizations.reduce((dict, v) => { + dict[v] = asp2vl_single(facts, v); + return dict; + }, {}); return result; } @@ -34,7 +35,7 @@ function asp2vl_single(facts: string[], v: string) { const negSymbol = value.trim().startsWith(':-'); // TODO: remove this const [_, predicate, viz, __, first, ___, second] = REGEX.exec(cleanedValue) as any; - if (viz !== v || predicate === 'visualization') { + if (viz !== v.replace(/\"/g, '') || predicate === 'visualization') { continue; } From 01d0da0d630da156796cfbb8de7dfbdbeb5d545d Mon Sep 17 00:00:00 2001 From: Halden Lin Date: Tue, 12 Feb 2019 21:35:52 -0800 Subject: [PATCH 03/25] bug fix edits --- asp/compare.lp | 194 ++++++++++++++++++++++++------------------------ asp/optimize.lp | 6 +- 2 files changed, 100 insertions(+), 100 deletions(-) diff --git a/asp/compare.lp b/asp/compare.lp index 2f10309..5118da0 100644 --- a/asp/compare.lp +++ b/asp/compare.lp @@ -19,38 +19,38 @@ compare(edit_text_tick,V1,V2) :- comparable(V1,V2), mark(V1,text), mark(V2,tick) % ENCODING EDITS -compare(edit_add_x,V1,V2) :- not compare(edit_add_x_count,V1,V2), comparable(V1,V2), visualization(V1), channel(V2,E2,x), field(V2,E2,F2), not channel(V1,_,x), not field(V1,_,F2). -compare(edit_add_y,V1,V2) :- not compare(edit_add_y_count,V1,V2), comparable(V1,V2), visualization(V1), channel(V2,E2,y), field(V2,E2,F2), not channel(V1,_,y), not field(V1,_,F2). -compare(edit_add_color,V1,V2) :- not compare(edit_add_color_count,V1,V2), comparable(V1,V2), visualization(V1), channel(V2,E2,color), field(V2,E2,F2), not channel(V1,_,color), not field(V1,_,F2). -compare(edit_add_shape,V1,V2) :- not compare(edit_add_shape_count,V1,V2), comparable(V1,V2), visualization(V1), channel(V2,E2,shape), field(V2,E2,F2), not channel(V1,_,shape), not field(V1,_,F2). -compare(edit_add_size,V1,V2) :- not compare(edit_add_size_count,V1,V2), comparable(V1,V2), visualization(V1), channel(V2,E2,size), field(V2,E2,F2), not channel(V1,_,size), not field(V1,_,F2). -compare(edit_add_row,V1,V2) :- not compare(edit_add_row_count,V1,V2), comparable(V1,V2), visualization(V1), channel(V2,E2,row), field(V2,E2,F2), not channel(V1,_,row), not field(V1,_,F2). -compare(edit_add_column,V1,V2) :- not compare(edit_add_column_count,V1,V2), comparable(V1,V2), visualization(V1), channel(V2,E2,column), field(V2,E2,F2), not channel(V1,_,column), not field(V1,_,F2). -compare(edit_add_text,V1,V2) :- not compare(edit_add_text_count,V1,V2), comparable(V1,V2), visualization(V1), channel(V2,E2,text), field(V2,E2,F2), not channel(V1,_,text), not field(V1,_,F2). -compare(edit_add_x_count,V1,V2) :- comparable(V1,V2), visualization(V1), channel(V2,E2,x), field(V2,E2,F2), not channel(V1,_,x), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_add_y_count,V1,V2) :- comparable(V1,V2), visualization(V1), channel(V2,E2,y), field(V2,E2,F2), not channel(V1,_,y), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_add_color_count,V1,V2) :- comparable(V1,V2), visualization(V1), channel(V2,E2,color), field(V2,E2,F2), not channel(V1,_,color), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_add_shape_count,V1,V2) :- comparable(V1,V2), visualization(V1), channel(V2,E2,shape), field(V2,E2,F2), not channel(V1,_,shape), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_add_size_count,V1,V2) :- comparable(V1,V2), visualization(V1), channel(V2,E2,size), field(V2,E2,F2), not channel(V1,_,size), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_add_row_count,V1,V2) :- comparable(V1,V2), visualization(V1), channel(V2,E2,row), field(V2,E2,F2), not channel(V1,_,row), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_add_column_count,V1,V2) :- comparable(V1,V2), visualization(V1), channel(V2,E2,column), field(V2,E2,F2), not channel(V1,_,column), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_add_text_count,V1,V2) :- comparable(V1,V2), visualization(V1), channel(V2,E2,text), field(V2,E2,F2), not channel(V1,_,text), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_remove_x_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,x), field(V1,E1,F1), visualization(V2), not channel(V2,_,x), not field(V2,_,F1), aggregate(V1,E1,count). -compare(edit_remove_y_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,y), field(V1,E1,F1), visualization(V2), not channel(V2,_,y), not field(V2,_,F1), aggregate(V1,E1,count). -compare(edit_remove_color_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,color), field(V1,E1,F1), visualization(V2), not channel(V2,_,color), not field(V2,_,F1), aggregate(V1,E1,count). -compare(edit_remove_shape_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,shape), field(V1,E1,F1), visualization(V2), not channel(V2,_,shape), not field(V2,_,F1), aggregate(V1,E1,count). -compare(edit_remove_size_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,size), field(V1,E1,F1), visualization(V2), not channel(V2,_,size), not field(V2,_,F1), aggregate(V1,E1,count). -compare(edit_remove_row_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,row), field(V1,E1,F1), visualization(V2), not channel(V2,_,row), not field(V2,_,F1), aggregate(V1,E1,count). -compare(edit_remove_column_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,column), field(V1,E1,F1), visualization(V2), not channel(V2,_,column), not field(V2,_,F1), aggregate(V1,E1,count). -compare(edit_remove_text_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,text), field(V1,E1,F1), visualization(V2), not channel(V2,_,text), not field(V2,_,F1), aggregate(V1,E1,count). -compare(edit_remove_x,V1,V2) :- not compare(edit_remove_x_count,V1,V2), comparable(V1,V2), channel(V1,E1,x), field(V1,E1,F1), visualization(V2), not channel(V2,_,x), not field(V2,_,F1). -compare(edit_remove_y,V1,V2) :- not compare(edit_remove_y_count,V1,V2), comparable(V1,V2), channel(V1,E1,y), field(V1,E1,F1), visualization(V2), not channel(V2,_,y), not field(V2,_,F1). -compare(edit_remove_color,V1,V2) :- not compare(edit_remove_color_count,V1,V2), comparable(V1,V2), channel(V1,E1,color), field(V1,E1,F1), visualization(V2), not channel(V2,_,color), not field(V2,_,F1). -compare(edit_remove_shape,V1,V2) :- not compare(edit_remove_shape_count,V1,V2), comparable(V1,V2), channel(V1,E1,shape), field(V1,E1,F1), visualization(V2), not channel(V2,_,shape), not field(V2,_,F1). -compare(edit_remove_size,V1,V2) :- not compare(edit_remove_size_count,V1,V2), comparable(V1,V2), channel(V1,E1,size), field(V1,E1,F1), visualization(V2), not channel(V2,_,size), not field(V2,_,F1). -compare(edit_remove_row,V1,V2) :- not compare(edit_remove_row_count,V1,V2), comparable(V1,V2), channel(V1,E1,row), field(V1,E1,F1), visualization(V2), not channel(V2,_,row), not field(V2,_,F1). -compare(edit_remove_column,V1,V2) :- not compare(edit_remove_column_count,V1,V2), comparable(V1,V2), channel(V1,E1,column), field(V1,E1,F1), visualization(V2), not channel(V2,_,column), not field(V2,_,F1). -compare(edit_remove_text,V1,V2) :- not compare(edit_remove_text_count,V1,V2), comparable(V1,V2), channel(V1,E1,text), field(V1,E1,F1), visualization(V2), not channel(V2,_,text), not field(V2,_,F1). +compare(edit_add_x,V1,V2) :- not compare(edit_add_x_count,V1,V2), comparable(V1,V2), channel(V2,E2,x), field(V2,E2,F2), not channel(V1,_,x), not field(V1,_,F2). +compare(edit_add_y,V1,V2) :- not compare(edit_add_y_count,V1,V2), comparable(V1,V2), channel(V2,E2,y), field(V2,E2,F2), not channel(V1,_,y), not field(V1,_,F2). +compare(edit_add_color,V1,V2) :- not compare(edit_add_color_count,V1,V2), comparable(V1,V2), channel(V2,E2,color), field(V2,E2,F2), not channel(V1,_,color), not field(V1,_,F2). +compare(edit_add_shape,V1,V2) :- not compare(edit_add_shape_count,V1,V2), comparable(V1,V2), channel(V2,E2,shape), field(V2,E2,F2), not channel(V1,_,shape), not field(V1,_,F2). +compare(edit_add_size,V1,V2) :- not compare(edit_add_size_count,V1,V2), comparable(V1,V2), channel(V2,E2,size), field(V2,E2,F2), not channel(V1,_,size), not field(V1,_,F2). +compare(edit_add_row,V1,V2) :- not compare(edit_add_row_count,V1,V2), comparable(V1,V2), channel(V2,E2,row), field(V2,E2,F2), not channel(V1,_,row), not field(V1,_,F2). +compare(edit_add_column,V1,V2) :- not compare(edit_add_column_count,V1,V2), comparable(V1,V2), channel(V2,E2,column), field(V2,E2,F2), not channel(V1,_,column), not field(V1,_,F2). +compare(edit_add_text,V1,V2) :- not compare(edit_add_text_count,V1,V2), comparable(V1,V2), channel(V2,E2,text), field(V2,E2,F2), not channel(V1,_,text), not field(V1,_,F2). +compare(edit_add_x_count,V1,V2) :- comparable(V1,V2), channel(V2,E2,x), field(V2,E2,F2), not channel(V1,_,x), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_add_y_count,V1,V2) :- comparable(V1,V2), channel(V2,E2,y), field(V2,E2,F2), not channel(V1,_,y), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_add_color_count,V1,V2) :- comparable(V1,V2), channel(V2,E2,color), field(V2,E2,F2), not channel(V1,_,color), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_add_shape_count,V1,V2) :- comparable(V1,V2), channel(V2,E2,shape), field(V2,E2,F2), not channel(V1,_,shape), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_add_size_count,V1,V2) :- comparable(V1,V2), channel(V2,E2,size), field(V2,E2,F2), not channel(V1,_,size), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_add_row_count,V1,V2) :- comparable(V1,V2), channel(V2,E2,row), field(V2,E2,F2), not channel(V1,_,row), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_add_column_count,V1,V2) :- comparable(V1,V2), channel(V2,E2,column), field(V2,E2,F2), not channel(V1,_,column), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_add_text_count,V1,V2) :- comparable(V1,V2), channel(V2,E2,text), field(V2,E2,F2), not channel(V1,_,text), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_remove_x_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,x), field(V1,E1,F1), not channel(V2,_,x), not field(V2,_,F1), aggregate(V1,E1,count). +compare(edit_remove_y_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,y), field(V1,E1,F1), not channel(V2,_,y), not field(V2,_,F1), aggregate(V1,E1,count). +compare(edit_remove_color_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,color), field(V1,E1,F1), not channel(V2,_,color), not field(V2,_,F1), aggregate(V1,E1,count). +compare(edit_remove_shape_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,shape), field(V1,E1,F1), not channel(V2,_,shape), not field(V2,_,F1), aggregate(V1,E1,count). +compare(edit_remove_size_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,size), field(V1,E1,F1), not channel(V2,_,size), not field(V2,_,F1), aggregate(V1,E1,count). +compare(edit_remove_row_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,row), field(V1,E1,F1), not channel(V2,_,row), not field(V2,_,F1), aggregate(V1,E1,count). +compare(edit_remove_column_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,column), field(V1,E1,F1), not channel(V2,_,column), not field(V2,_,F1), aggregate(V1,E1,count). +compare(edit_remove_text_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,text), field(V1,E1,F1), not channel(V2,_,text), not field(V2,_,F1), aggregate(V1,E1,count). +compare(edit_remove_x,V1,V2) :- not compare(edit_remove_x_count,V1,V2), comparable(V1,V2), channel(V1,E1,x), field(V1,E1,F1), not channel(V2,_,x), not field(V2,_,F1). +compare(edit_remove_y,V1,V2) :- not compare(edit_remove_y_count,V1,V2), comparable(V1,V2), channel(V1,E1,y), field(V1,E1,F1), not channel(V2,_,y), not field(V2,_,F1). +compare(edit_remove_color,V1,V2) :- not compare(edit_remove_color_count,V1,V2), comparable(V1,V2), channel(V1,E1,color), field(V1,E1,F1), not channel(V2,_,color), not field(V2,_,F1). +compare(edit_remove_shape,V1,V2) :- not compare(edit_remove_shape_count,V1,V2), comparable(V1,V2), channel(V1,E1,shape), field(V1,E1,F1), not channel(V2,_,shape), not field(V2,_,F1). +compare(edit_remove_size,V1,V2) :- not compare(edit_remove_size_count,V1,V2), comparable(V1,V2), channel(V1,E1,size), field(V1,E1,F1), not channel(V2,_,size), not field(V2,_,F1). +compare(edit_remove_row,V1,V2) :- not compare(edit_remove_row_count,V1,V2), comparable(V1,V2), channel(V1,E1,row), field(V1,E1,F1), not channel(V2,_,row), not field(V2,_,F1). +compare(edit_remove_column,V1,V2) :- not compare(edit_remove_column_count,V1,V2), comparable(V1,V2), channel(V1,E1,column), field(V1,E1,F1), not channel(V2,_,column), not field(V2,_,F1). +compare(edit_remove_text,V1,V2) :- not compare(edit_remove_text_count,V1,V2), comparable(V1,V2), channel(V1,E1,text), field(V1,E1,F1), not channel(V2,_,text), not field(V2,_,F1). compare(edit_modify_x,V1,V2) :- not compare(edit_modify_x_add_count,V1,V2), not compare(edit_modify_x_remove_count,V1,V2), comparable(V1,V2), channel(V1,E1,x), channel(V2,E2,x), field(V2,E2,F2), not field(V1,_,F2). compare(edit_modify_y,V1,V2) :- not compare(edit_modify_y_add_count,V1,V2), not compare(edit_modify_y_remove_count,V1,V2), comparable(V1,V2), channel(V1,E1,y), channel(V2,E2,y), field(V2,E2,F2), not field(V1,_,F2). compare(edit_modify_color,V1,V2) :- not compare(edit_modify_color_add_count,V1,V2), not compare(edit_modify_color_remove_count,V1,V2), comparable(V1,V2), channel(V1,E1,color), channel(V2,E2,color), field(V2,E2,F2), not field(V1,_,F2). @@ -75,74 +75,74 @@ compare(edit_modify_size_remove_count,V1,V2) :- comparable(V1,V2), channel(V1,E1 compare(edit_modify_row_remove_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,row), channel(V2,E2,row), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). compare(edit_modify_column_remove_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,column), channel(V2,E2,column), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). compare(edit_modify_text_remove_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,text), channel(V2,E2,text), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). -compare(edit_move_x_row,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,row), channel(V1,E1B,row), channel(V2,E2B,x), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_x_column,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,column), channel(V1,E1B,column), channel(V2,E2B,x), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_x_size,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,size), channel(V1,E1B,size), channel(V2,E2B,x), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_x_shape,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,shape), channel(V1,E1B,shape), channel(V2,E2B,x), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_x_color,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,color), channel(V1,E1B,color), channel(V2,E2B,x), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_x_y,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,y), channel(V1,E1B,y), channel(V2,E2B,x), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_x_text,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,text), channel(V1,E1B,text), channel(V2,E2B,x), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_y_row,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,row), channel(V1,E1B,row), channel(V2,E2B,y), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_y_column,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,column), channel(V1,E1B,column), channel(V2,E2B,y), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_y_size,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,size), channel(V1,E1B,size), channel(V2,E2B,y), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_y_shape,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,shape), channel(V1,E1B,shape), channel(V2,E2B,y), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_y_color,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,color), channel(V1,E1B,color), channel(V2,E2B,y), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_y_x,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,x), channel(V1,E1B,x), channel(V2,E2B,y), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_y_text,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,text), channel(V1,E1B,text), channel(V2,E2B,y), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_color_row,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,row), channel(V1,E1B,row), channel(V2,E2B,color), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_color_column,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,column), channel(V1,E1B,column), channel(V2,E2B,color), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_color_size,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,size), channel(V1,E1B,size), channel(V2,E2B,color), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_color_shape,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,shape), channel(V1,E1B,shape), channel(V2,E2B,color), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_color_y,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,y), channel(V1,E1B,y), channel(V2,E2B,color), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_color_x,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,x), channel(V1,E1B,x), channel(V2,E2B,color), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_color_text,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,text), channel(V1,E1B,text), channel(V2,E2B,color), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_shape_row,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,row), channel(V1,E1B,row), channel(V2,E2B,shape), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_shape_column,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,column), channel(V1,E1B,column), channel(V2,E2B,shape), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_shape_size,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,size), channel(V1,E1B,size), channel(V2,E2B,shape), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_shape_color,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,color), channel(V1,E1B,color), channel(V2,E2B,shape), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_shape_y,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,y), channel(V1,E1B,y), channel(V2,E2B,shape), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_shape_x,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,x), channel(V1,E1B,x), channel(V2,E2B,shape), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_shape_text,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,text), channel(V1,E1B,text), channel(V2,E2B,shape), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_size_row,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,row), channel(V1,E1B,row), channel(V2,E2B,size), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_size_column,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,column), channel(V1,E1B,column), channel(V2,E2B,size), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_size_shape,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,shape), channel(V1,E1B,shape), channel(V2,E2B,size), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_size_color,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,color), channel(V1,E1B,color), channel(V2,E2B,size), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_size_y,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,y), channel(V1,E1B,y), channel(V2,E2B,size), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_size_x,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,x), channel(V1,E1B,x), channel(V2,E2B,size), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_size_text,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,text), channel(V1,E1B,text), channel(V2,E2B,size), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_text_row,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,row), channel(V1,E1B,row), channel(V2,E2B,text), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_text_column,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,column), channel(V1,E1B,column), channel(V2,E2B,text), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_text_shape,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,shape), channel(V1,E1B,shape), channel(V2,E2B,text), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_text_color,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,color), channel(V1,E1B,color), channel(V2,E2B,text), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_text_y,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,y), channel(V1,E1B,y), channel(V2,E2B,text), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_text_x,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,x), channel(V1,E1B,x), channel(V2,E2B,text), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_text_size,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,size), channel(V1,E1B,size), channel(V2,E2B,text), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_column_row,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,row), channel(V1,E1B,row), channel(V2,E2B,column), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_column_size,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,size), channel(V1,E1B,size), channel(V2,E2B,column), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_column_shape,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,shape), channel(V1,E1B,shape), channel(V2,E2B,column), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_column_color,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,color), channel(V1,E1B,color), channel(V2,E2B,column), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_column_y,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,y), channel(V1,E1B,y), channel(V2,E2B,column), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_column_x,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,x), channel(V1,E1B,x), channel(V2,E2B,column), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_column_text,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,text), channel(V1,E1B,text), channel(V2,E2B,column), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_row_column,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,column), channel(V1,E1B,column), channel(V2,E2B,row), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_row_size,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,size), channel(V1,E1B,size), channel(V2,E2B,row), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_row_shape,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,shape), channel(V1,E1B,shape), channel(V2,E2B,row), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_row_color,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,color), channel(V1,E1B,color), channel(V2,E2B,row), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_row_y,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,y), channel(V1,E1B,y), channel(V2,E2B,row), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_row_x,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,x), channel(V1,E1B,x), channel(V2,E2B,row), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. -compare(edit_move_row_text,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,text), channel(V1,E1B,text), channel(V2,E2B,row), field(V1,E1B,F1B), field(V2,E2B,F2B), E1A > E1B, E2A > E2B, F1B > F2B. +compare(edit_move_x_row,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,row). +compare(edit_move_x_column,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,column). +compare(edit_move_x_size,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,size). +compare(edit_move_x_shape,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,shape). +compare(edit_move_x_color,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,color). +compare(edit_move_x_y,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,y). +compare(edit_move_x_text,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,text). +compare(edit_move_y_row,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,row). +compare(edit_move_y_column,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,column). +compare(edit_move_y_size,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,size). +compare(edit_move_y_shape,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,shape). +compare(edit_move_y_color,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,color). +compare(edit_move_y_x,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,x). +compare(edit_move_y_text,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,text). +compare(edit_move_color_row,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,row). +compare(edit_move_color_column,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,column). +compare(edit_move_color_size,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,size). +compare(edit_move_color_shape,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,shape). +compare(edit_move_color_y,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,y). +compare(edit_move_color_x,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,x). +compare(edit_move_color_text,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,text). +compare(edit_move_shape_row,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,row). +compare(edit_move_shape_column,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,column). +compare(edit_move_shape_size,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,size). +compare(edit_move_shape_color,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,color). +compare(edit_move_shape_y,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,y). +compare(edit_move_shape_x,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,x). +compare(edit_move_shape_text,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,text). +compare(edit_move_size_row,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,row). +compare(edit_move_size_column,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,column). +compare(edit_move_size_shape,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,shape). +compare(edit_move_size_color,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,color). +compare(edit_move_size_y,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,y). +compare(edit_move_size_x,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,x). +compare(edit_move_size_text,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,text). +compare(edit_move_text_row,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,row). +compare(edit_move_text_column,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,column). +compare(edit_move_text_shape,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,shape). +compare(edit_move_text_color,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,color). +compare(edit_move_text_y,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,y). +compare(edit_move_text_x,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,x). +compare(edit_move_text_size,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,size). +compare(edit_move_column_row,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,row). +compare(edit_move_column_size,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,size). +compare(edit_move_column_shape,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,shape). +compare(edit_move_column_color,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,color). +compare(edit_move_column_y,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,y). +compare(edit_move_column_x,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,x). +compare(edit_move_column_text,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,text). +compare(edit_move_row_column,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,column). +compare(edit_move_row_size,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,size). +compare(edit_move_row_shape,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,shape). +compare(edit_move_row_color,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,color). +compare(edit_move_row_y,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,y). +compare(edit_move_row_x,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,x). +compare(edit_move_row_text,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,text). compare(edit_swap_x_y,V1,V2) :- comparable(V1,V2), channel(V1,E1A,x), channel(V1,E1B,y), channel(V2,E2A,x), channel(V2,E2B,y), field(V1,E1A,FA), field(V2,E2B,FA), field(V1,E1B,FB), field(V2,E2A,FB), E2A > E2B, E1A > E1B. compare(edit_swap_row_column,V1,V2) :- comparable(V1,V2), channel(V1,E1A,row), channel(V1,E1B,column), channel(V2,E2A,row), channel(V2,E2B,column), field(V1,E1A,FA), field(V2,E2B,FA), field(V1,E1B,FB), field(V2,E2A,FB), E2A > E2B, E1A > E1B. -compare(edit_scale,V1,V2) :- comparable(V1,V2), visualization(V1), visualization(V2), log(V1,E), not log(V2,E). -compare(edit_scale,V1,V2) :- comparable(V1,V2), visualization(V1), visualization(V2), zero(V1,E), not zero(V2,E). -compare(edit_scale,V1,V2) :- comparable(V1,V2), visualization(V1), visualization(V2), not log(V1,E), log(V2,E). -compare(edit_scale,V1,V2) :- comparable(V1,V2), visualization(V1), visualization(V2), not zero(V1,E), zero(V2,E). +compare(edit_scale,V1,V2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), log(V1,E1), not log(V2,E2). +compare(edit_scale,V1,V2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), not log(V1,E1), log(V2,E2). +compare(edit_scale,V1,V2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), zero(V1,E1), not zero(V2,E2). +compare(edit_scale,V1,V2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), not zero(V1,E1), zero(V2,E2). -compare(edit_bin,V1,V2) :- comparable(V1,V2), visualization(V1), visualization(V2), bin(V1,E,_), not bin(V2,E,_). -compare(edit_bin,V1,V2) :- comparable(V1,V2), visualization(V1), visualization(V2), not bin(V1,E,_), bin(V2,E,_). +compare(edit_bin,V1,V2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), bin(V1,E1,_), not bin(V2,E2,_). +compare(edit_bin,V1,V2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), not bin(V1,E1,_), bin(V2,E2,_). -compare(edit_aggregate,V1,V2) :- comparable(V1,V2), visualization(V1), visualization(V2), aggregate(V1,E,A1), aggregate(V2,E,A2), A1 != A2. -compare(edit_aggregate,V1,V2) :- comparable(V1,V2), visualization(V1), visualization(V2), aggregate(V1,E,_), not aggregate(V2,E,_). -compare(edit_aggregate,V1,V2) :- comparable(V1,V2), visualization(V1), visualization(V2), not aggregate(V1,E,_), aggregate(V2,E,_). \ No newline at end of file +compare(edit_aggregate,V1,V2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), aggregate(V1,E1,A1), aggregate(V2,E2,A2), A1 != A2. +compare(edit_aggregate,V1,V2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), aggregate(V1,E1,_), not aggregate(V2,E2,_). +compare(edit_aggregate,V1,V2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), not aggregate(V1,E1,_), aggregate(V2,E2,_). \ No newline at end of file diff --git a/asp/optimize.lp b/asp/optimize.lp index cdee188..5285575 100644 --- a/asp/optimize.lp +++ b/asp/optimize.lp @@ -1,6 +1,6 @@ % Minimize the feature weight -% #minimize { W,F,V,Q: soft_weight(F,W), soft(F,V,Q); W,F,V1,V2: compare_weight(F,W), compare(F,V1,V2) }. +#minimize { W,F,V,Q: soft_weight(F,W), soft(F,V,Q); W,F,V1,V2: compare_weight(F,W), compare(F,V1,V2) }. -#minimize { W@2,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. -#minimize { W@1,F,V1,V2: compare_weight(F,W), compare(F,V1,V2) }. \ No newline at end of file +% #minimize { W@2,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. +% #minimize { W@1,F,V1,V2: compare_weight(F,W), compare(F,V1,V2) }. \ No newline at end of file From d9c68b587c37c742a20dacd6d413814a36e18e79 Mon Sep 17 00:00:00 2001 From: Halden Lin Date: Wed, 13 Feb 2019 11:10:23 -0800 Subject: [PATCH 04/25] better multiview handling --- asp/assign_weights.lp | 1 + asp/compare.lp | 261 ++++++++++++++++++++++-------------------- asp/hard.lp | 2 +- asp/output.lp | 2 + asp/soft.lp | 5 + asp/weights.lp | 5 +- data/weights.json | 5 +- draco/run.py | 13 ++- 8 files changed, 161 insertions(+), 133 deletions(-) diff --git a/asp/assign_weights.lp b/asp/assign_weights.lp index b292c42..606fe52 100644 --- a/asp/assign_weights.lp +++ b/asp/assign_weights.lp @@ -13,6 +13,7 @@ soft_weight(same_field_2,same_field_2_weight). soft_weight(same_field_gte3,same_field_gte3_weight). soft_weight(count_twice,count_twice_weight). soft_weight(shape_cardinality,shape_cardinality_weight). +soft_weight(string_non_nominal,string_non_nominal_weight). soft_weight(number_nominal,number_nominal_weight). soft_weight(bin_cardinality,bin_cardinality_weight). soft_weight(quant_bin,quant_bin_weight). diff --git a/asp/compare.lp b/asp/compare.lp index 5118da0..c3f5099 100644 --- a/asp/compare.lp +++ b/asp/compare.lp @@ -2,147 +2,162 @@ comparable(V1,V2) :- visualization(V1), base(V1), visualization(V2), V1 != V2. % MARK EDITS compare(edit_area_bar,V1,V2) :- comparable(V1,V2), mark(V1,area), mark(V2,bar). +compare(edit_area_bar,V1,V2) :- comparable(V1,V2), mark(V1,bar), mark(V2,area). compare(edit_area_line,V1,V2) :- comparable(V1,V2), mark(V1,area), mark(V2,line). +compare(edit_area_line,V1,V2) :- comparable(V1,V2), mark(V1,line), mark(V2,area). compare(edit_area_point,V1,V2) :- comparable(V1,V2), mark(V1,area), mark(V2,point). +compare(edit_area_point,V1,V2) :- comparable(V1,V2), mark(V1,point), mark(V2,area). compare(edit_area_text,V1,V2) :- comparable(V1,V2), mark(V1,area), mark(V2,text). +compare(edit_area_text,V1,V2) :- comparable(V1,V2), mark(V1,text), mark(V2,area). compare(edit_area_tick,V1,V2) :- comparable(V1,V2), mark(V1,area), mark(V2,tick). +compare(edit_area_tick,V1,V2) :- comparable(V1,V2), mark(V1,tick), mark(V2,area). compare(edit_bar_line,V1,V2) :- comparable(V1,V2), mark(V1,bar), mark(V2,line). +compare(edit_bar_line,V1,V2) :- comparable(V1,V2), mark(V1,line), mark(V2,bar). compare(edit_bar_point,V1,V2) :- comparable(V1,V2), mark(V1,bar), mark(V2,point). +compare(edit_bar_point,V1,V2) :- comparable(V1,V2), mark(V1,point), mark(V2,bar). compare(edit_bar_text,V1,V2) :- comparable(V1,V2), mark(V1,bar), mark(V2,text). +compare(edit_bar_text,V1,V2) :- comparable(V1,V2), mark(V1,text), mark(V2,bar). compare(edit_bar_tick,V1,V2) :- comparable(V1,V2), mark(V1,bar), mark(V2,tick). +compare(edit_bar_tick,V1,V2) :- comparable(V1,V2), mark(V1,tick), mark(V2,bar). compare(edit_line_point,V1,V2) :- comparable(V1,V2), mark(V1,line), mark(V2,point). +compare(edit_line_point,V1,V2) :- comparable(V1,V2), mark(V1,point), mark(V2,line). compare(edit_line_text,V1,V2) :- comparable(V1,V2), mark(V1,line), mark(V2,text). +compare(edit_line_text,V1,V2) :- comparable(V1,V2), mark(V1,text), mark(V2,line). compare(edit_line_tick,V1,V2) :- comparable(V1,V2), mark(V1,line), mark(V2,tick). +compare(edit_line_tick,V1,V2) :- comparable(V1,V2), mark(V1,tick), mark(V2,line). compare(edit_point_text,V1,V2) :- comparable(V1,V2), mark(V1,point), mark(V2,text). +compare(edit_point_text,V1,V2) :- comparable(V1,V2), mark(V1,text), mark(V2,point). compare(edit_point_tick,V1,V2) :- comparable(V1,V2), mark(V1,point), mark(V2,tick). +compare(edit_point_tick,V1,V2) :- comparable(V1,V2), mark(V1,tick), mark(V2,point). compare(edit_text_tick,V1,V2) :- comparable(V1,V2), mark(V1,text), mark(V2,tick). +compare(edit_text_tick,V1,V2) :- comparable(V1,V2), mark(V1,tick), mark(V2,text). % ENCODING EDITS -compare(edit_add_x,V1,V2) :- not compare(edit_add_x_count,V1,V2), comparable(V1,V2), channel(V2,E2,x), field(V2,E2,F2), not channel(V1,_,x), not field(V1,_,F2). -compare(edit_add_y,V1,V2) :- not compare(edit_add_y_count,V1,V2), comparable(V1,V2), channel(V2,E2,y), field(V2,E2,F2), not channel(V1,_,y), not field(V1,_,F2). -compare(edit_add_color,V1,V2) :- not compare(edit_add_color_count,V1,V2), comparable(V1,V2), channel(V2,E2,color), field(V2,E2,F2), not channel(V1,_,color), not field(V1,_,F2). -compare(edit_add_shape,V1,V2) :- not compare(edit_add_shape_count,V1,V2), comparable(V1,V2), channel(V2,E2,shape), field(V2,E2,F2), not channel(V1,_,shape), not field(V1,_,F2). -compare(edit_add_size,V1,V2) :- not compare(edit_add_size_count,V1,V2), comparable(V1,V2), channel(V2,E2,size), field(V2,E2,F2), not channel(V1,_,size), not field(V1,_,F2). -compare(edit_add_row,V1,V2) :- not compare(edit_add_row_count,V1,V2), comparable(V1,V2), channel(V2,E2,row), field(V2,E2,F2), not channel(V1,_,row), not field(V1,_,F2). -compare(edit_add_column,V1,V2) :- not compare(edit_add_column_count,V1,V2), comparable(V1,V2), channel(V2,E2,column), field(V2,E2,F2), not channel(V1,_,column), not field(V1,_,F2). -compare(edit_add_text,V1,V2) :- not compare(edit_add_text_count,V1,V2), comparable(V1,V2), channel(V2,E2,text), field(V2,E2,F2), not channel(V1,_,text), not field(V1,_,F2). -compare(edit_add_x_count,V1,V2) :- comparable(V1,V2), channel(V2,E2,x), field(V2,E2,F2), not channel(V1,_,x), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_add_y_count,V1,V2) :- comparable(V1,V2), channel(V2,E2,y), field(V2,E2,F2), not channel(V1,_,y), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_add_color_count,V1,V2) :- comparable(V1,V2), channel(V2,E2,color), field(V2,E2,F2), not channel(V1,_,color), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_add_shape_count,V1,V2) :- comparable(V1,V2), channel(V2,E2,shape), field(V2,E2,F2), not channel(V1,_,shape), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_add_size_count,V1,V2) :- comparable(V1,V2), channel(V2,E2,size), field(V2,E2,F2), not channel(V1,_,size), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_add_row_count,V1,V2) :- comparable(V1,V2), channel(V2,E2,row), field(V2,E2,F2), not channel(V1,_,row), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_add_column_count,V1,V2) :- comparable(V1,V2), channel(V2,E2,column), field(V2,E2,F2), not channel(V1,_,column), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_add_text_count,V1,V2) :- comparable(V1,V2), channel(V2,E2,text), field(V2,E2,F2), not channel(V1,_,text), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_remove_x_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,x), field(V1,E1,F1), not channel(V2,_,x), not field(V2,_,F1), aggregate(V1,E1,count). -compare(edit_remove_y_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,y), field(V1,E1,F1), not channel(V2,_,y), not field(V2,_,F1), aggregate(V1,E1,count). -compare(edit_remove_color_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,color), field(V1,E1,F1), not channel(V2,_,color), not field(V2,_,F1), aggregate(V1,E1,count). -compare(edit_remove_shape_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,shape), field(V1,E1,F1), not channel(V2,_,shape), not field(V2,_,F1), aggregate(V1,E1,count). -compare(edit_remove_size_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,size), field(V1,E1,F1), not channel(V2,_,size), not field(V2,_,F1), aggregate(V1,E1,count). -compare(edit_remove_row_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,row), field(V1,E1,F1), not channel(V2,_,row), not field(V2,_,F1), aggregate(V1,E1,count). -compare(edit_remove_column_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,column), field(V1,E1,F1), not channel(V2,_,column), not field(V2,_,F1), aggregate(V1,E1,count). -compare(edit_remove_text_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,text), field(V1,E1,F1), not channel(V2,_,text), not field(V2,_,F1), aggregate(V1,E1,count). -compare(edit_remove_x,V1,V2) :- not compare(edit_remove_x_count,V1,V2), comparable(V1,V2), channel(V1,E1,x), field(V1,E1,F1), not channel(V2,_,x), not field(V2,_,F1). -compare(edit_remove_y,V1,V2) :- not compare(edit_remove_y_count,V1,V2), comparable(V1,V2), channel(V1,E1,y), field(V1,E1,F1), not channel(V2,_,y), not field(V2,_,F1). -compare(edit_remove_color,V1,V2) :- not compare(edit_remove_color_count,V1,V2), comparable(V1,V2), channel(V1,E1,color), field(V1,E1,F1), not channel(V2,_,color), not field(V2,_,F1). -compare(edit_remove_shape,V1,V2) :- not compare(edit_remove_shape_count,V1,V2), comparable(V1,V2), channel(V1,E1,shape), field(V1,E1,F1), not channel(V2,_,shape), not field(V2,_,F1). -compare(edit_remove_size,V1,V2) :- not compare(edit_remove_size_count,V1,V2), comparable(V1,V2), channel(V1,E1,size), field(V1,E1,F1), not channel(V2,_,size), not field(V2,_,F1). -compare(edit_remove_row,V1,V2) :- not compare(edit_remove_row_count,V1,V2), comparable(V1,V2), channel(V1,E1,row), field(V1,E1,F1), not channel(V2,_,row), not field(V2,_,F1). -compare(edit_remove_column,V1,V2) :- not compare(edit_remove_column_count,V1,V2), comparable(V1,V2), channel(V1,E1,column), field(V1,E1,F1), not channel(V2,_,column), not field(V2,_,F1). -compare(edit_remove_text,V1,V2) :- not compare(edit_remove_text_count,V1,V2), comparable(V1,V2), channel(V1,E1,text), field(V1,E1,F1), not channel(V2,_,text), not field(V2,_,F1). -compare(edit_modify_x,V1,V2) :- not compare(edit_modify_x_add_count,V1,V2), not compare(edit_modify_x_remove_count,V1,V2), comparable(V1,V2), channel(V1,E1,x), channel(V2,E2,x), field(V2,E2,F2), not field(V1,_,F2). -compare(edit_modify_y,V1,V2) :- not compare(edit_modify_y_add_count,V1,V2), not compare(edit_modify_y_remove_count,V1,V2), comparable(V1,V2), channel(V1,E1,y), channel(V2,E2,y), field(V2,E2,F2), not field(V1,_,F2). -compare(edit_modify_color,V1,V2) :- not compare(edit_modify_color_add_count,V1,V2), not compare(edit_modify_color_remove_count,V1,V2), comparable(V1,V2), channel(V1,E1,color), channel(V2,E2,color), field(V2,E2,F2), not field(V1,_,F2). -compare(edit_modify_shape,V1,V2) :- not compare(edit_modify_shape_add_count,V1,V2), not compare(edit_modify_shape_remove_count,V1,V2), comparable(V1,V2), channel(V1,E1,shape), channel(V2,E2,shape), field(V2,E2,F2), not field(V1,_,F2). -compare(edit_modify_size,V1,V2) :- not compare(edit_modify_size_add_count,V1,V2), not compare(edit_modify_size_remove_count,V1,V2), comparable(V1,V2), channel(V1,E1,size), channel(V2,E2,size), field(V2,E2,F2), not field(V1,_,F2). -compare(edit_modify_row,V1,V2) :- not compare(edit_modify_row_add_count,V1,V2), not compare(edit_modify_row_remove_count,V1,V2), comparable(V1,V2), channel(V1,E1,row), channel(V2,E2,row), field(V2,E2,F2), not field(V1,_,F2). -compare(edit_modify_column,V1,V2) :- not compare(edit_modify_column_add_count,V1,V2), not compare(edit_modify_column_remove_count,V1,V2), comparable(V1,V2), channel(V1,E1,column), channel(V2,E2,column), field(V2,E2,F2), not field(V1,_,F2). -compare(edit_modify_text,V1,V2) :- not compare(edit_modify_text_add_count,V1,V2), not compare(edit_modify_text_remove_count,V1,V2), comparable(V1,V2), channel(V1,E1,text), channel(V2,E2,text), field(V2,E2,F2), not field(V1,_,F2). -compare(edit_modify_x_add_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,x), channel(V2,E2,x), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_modify_y_add_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,y), channel(V2,E2,y), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_modify_color_add_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,color), channel(V2,E2,color), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_modify_shape_add_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,shape), channel(V2,E2,shape), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_modify_size_add_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,size), channel(V2,E2,size), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_modify_row_add_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,row), channel(V2,E2,row), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_modify_column_add_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,column), channel(V2,E2,column), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_modify_text_add_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,text), channel(V2,E2,text), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_modify_x_remove_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,x), channel(V2,E2,x), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). -compare(edit_modify_y_remove_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,y), channel(V2,E2,y), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). -compare(edit_modify_color_remove_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,color), channel(V2,E2,color), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). -compare(edit_modify_shape_remove_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,shape), channel(V2,E2,shape), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). -compare(edit_modify_size_remove_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,size), channel(V2,E2,size), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). -compare(edit_modify_row_remove_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,row), channel(V2,E2,row), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). -compare(edit_modify_column_remove_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,column), channel(V2,E2,column), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). -compare(edit_modify_text_remove_count,V1,V2) :- comparable(V1,V2), channel(V1,E1,text), channel(V2,E2,text), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). -compare(edit_move_x_row,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,row). -compare(edit_move_x_column,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,column). -compare(edit_move_x_size,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,size). -compare(edit_move_x_shape,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,shape). -compare(edit_move_x_color,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,color). -compare(edit_move_x_y,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,y). -compare(edit_move_x_text,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,text). -compare(edit_move_y_row,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,row). -compare(edit_move_y_column,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,column). -compare(edit_move_y_size,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,size). -compare(edit_move_y_shape,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,shape). -compare(edit_move_y_color,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,color). -compare(edit_move_y_x,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,x). -compare(edit_move_y_text,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,text). -compare(edit_move_color_row,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,row). -compare(edit_move_color_column,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,column). -compare(edit_move_color_size,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,size). -compare(edit_move_color_shape,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,shape). -compare(edit_move_color_y,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,y). -compare(edit_move_color_x,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,x). -compare(edit_move_color_text,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,text). -compare(edit_move_shape_row,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,row). -compare(edit_move_shape_column,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,column). -compare(edit_move_shape_size,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,size). -compare(edit_move_shape_color,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,color). -compare(edit_move_shape_y,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,y). -compare(edit_move_shape_x,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,x). -compare(edit_move_shape_text,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,text). -compare(edit_move_size_row,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,row). -compare(edit_move_size_column,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,column). -compare(edit_move_size_shape,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,shape). -compare(edit_move_size_color,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,color). -compare(edit_move_size_y,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,y). -compare(edit_move_size_x,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,x). -compare(edit_move_size_text,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,text). -compare(edit_move_text_row,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,row). -compare(edit_move_text_column,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,column). -compare(edit_move_text_shape,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,shape). -compare(edit_move_text_color,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,color). -compare(edit_move_text_y,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,y). -compare(edit_move_text_x,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,x). -compare(edit_move_text_size,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,size). -compare(edit_move_column_row,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,row). -compare(edit_move_column_size,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,size). -compare(edit_move_column_shape,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,shape). -compare(edit_move_column_color,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,color). -compare(edit_move_column_y,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,y). -compare(edit_move_column_x,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,x). -compare(edit_move_column_text,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,text). -compare(edit_move_row_column,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,column). -compare(edit_move_row_size,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,size). -compare(edit_move_row_shape,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,shape). -compare(edit_move_row_color,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,color). -compare(edit_move_row_y,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,y). -compare(edit_move_row_x,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,x). -compare(edit_move_row_text,V1,V2) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,text). -compare(edit_swap_x_y,V1,V2) :- comparable(V1,V2), channel(V1,E1A,x), channel(V1,E1B,y), channel(V2,E2A,x), channel(V2,E2B,y), field(V1,E1A,FA), field(V2,E2B,FA), field(V1,E1B,FB), field(V2,E2A,FB), E2A > E2B, E1A > E1B. -compare(edit_swap_row_column,V1,V2) :- comparable(V1,V2), channel(V1,E1A,row), channel(V1,E1B,column), channel(V2,E2A,row), channel(V2,E2B,column), field(V1,E1A,FA), field(V2,E2B,FA), field(V1,E1B,FB), field(V2,E2A,FB), E2A > E2B, E1A > E1B. +compare(edit_add_x,V1,V2,E2,F2) :- not compare(edit_add_x_count,V1,V2,E2,F2), comparable(V1,V2), channel(V2,E2,x), field(V2,E2,F2), not channel(V1,_,x), not field(V1,_,F2). +compare(edit_add_y,V1,V2,E2,F2) :- not compare(edit_add_y_count,V1,V2,E2,F2), comparable(V1,V2), channel(V2,E2,y), field(V2,E2,F2), not channel(V1,_,y), not field(V1,_,F2). +compare(edit_add_color,V1,V2,E2,F2) :- not compare(edit_add_color_count,V1,V2,E2,F2), comparable(V1,V2), channel(V2,E2,color), field(V2,E2,F2), not channel(V1,_,color), not field(V1,_,F2). +compare(edit_add_shape,V1,V2,E2,F2) :- not compare(edit_add_shape_count,V1,V2,E2,F2), comparable(V1,V2), channel(V2,E2,shape), field(V2,E2,F2), not channel(V1,_,shape), not field(V1,_,F2). +compare(edit_add_size,V1,V2,E2,F2) :- not compare(edit_add_size_count,V1,V2,E2,F2), comparable(V1,V2), channel(V2,E2,size), field(V2,E2,F2), not channel(V1,_,size), not field(V1,_,F2). +compare(edit_add_row,V1,V2,E2,F2) :- not compare(edit_add_row_count,V1,V2,E2,F2), comparable(V1,V2), channel(V2,E2,row), field(V2,E2,F2), not channel(V1,_,row), not field(V1,_,F2). +compare(edit_add_column,V1,V2,E2,F2) :- not compare(edit_add_column_count,V1,V2,E2,F2), comparable(V1,V2), channel(V2,E2,column), field(V2,E2,F2), not channel(V1,_,column), not field(V1,_,F2). +compare(edit_add_text,V1,V2,E2,F2) :- not compare(edit_add_text_count,V1,V2,E2,F2), comparable(V1,V2), channel(V2,E2,text), field(V2,E2,F2), not channel(V1,_,text), not field(V1,_,F2). +compare(edit_add_x_count,V1,V2,E2,F2) :- comparable(V1,V2), channel(V2,E2,x), field(V2,E2,F2), not channel(V1,_,x), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_add_y_count,V1,V2,E2,F2) :- comparable(V1,V2), channel(V2,E2,y), field(V2,E2,F2), not channel(V1,_,y), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_add_color_count,V1,V2,E2,F2) :- comparable(V1,V2), channel(V2,E2,color), field(V2,E2,F2), not channel(V1,_,color), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_add_shape_count,V1,V2,E2,F2) :- comparable(V1,V2), channel(V2,E2,shape), field(V2,E2,F2), not channel(V1,_,shape), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_add_size_count,V1,V2,E2,F2) :- comparable(V1,V2), channel(V2,E2,size), field(V2,E2,F2), not channel(V1,_,size), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_add_row_count,V1,V2,E2,F2) :- comparable(V1,V2), channel(V2,E2,row), field(V2,E2,F2), not channel(V1,_,row), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_add_column_count,V1,V2,E2,F2) :- comparable(V1,V2), channel(V2,E2,column), field(V2,E2,F2), not channel(V1,_,column), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_add_text_count,V1,V2,E2,F2) :- comparable(V1,V2), channel(V2,E2,text), field(V2,E2,F2), not channel(V1,_,text), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_remove_x_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,x), field(V1,E1,F1), not channel(V2,_,x), not field(V2,_,F1), aggregate(V1,E1,count). +compare(edit_remove_y_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,y), field(V1,E1,F1), not channel(V2,_,y), not field(V2,_,F1), aggregate(V1,E1,count). +compare(edit_remove_color_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,color), field(V1,E1,F1), not channel(V2,_,color), not field(V2,_,F1), aggregate(V1,E1,count). +compare(edit_remove_shape_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,shape), field(V1,E1,F1), not channel(V2,_,shape), not field(V2,_,F1), aggregate(V1,E1,count). +compare(edit_remove_size_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,size), field(V1,E1,F1), not channel(V2,_,size), not field(V2,_,F1), aggregate(V1,E1,count). +compare(edit_remove_row_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,row), field(V1,E1,F1), not channel(V2,_,row), not field(V2,_,F1), aggregate(V1,E1,count). +compare(edit_remove_column_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,column), field(V1,E1,F1), not channel(V2,_,column), not field(V2,_,F1), aggregate(V1,E1,count). +compare(edit_remove_text_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,text), field(V1,E1,F1), not channel(V2,_,text), not field(V2,_,F1), aggregate(V1,E1,count). +compare(edit_remove_x,V1,V2,E1,F1) :- not compare(edit_remove_x_count,V1,V2,E1,F1), comparable(V1,V2), channel(V1,E1,x), field(V1,E1,F1), not channel(V2,_,x), not field(V2,_,F1). +compare(edit_remove_y,V1,V2,E1,F1) :- not compare(edit_remove_y_count,V1,V2,E1,F1), comparable(V1,V2), channel(V1,E1,y), field(V1,E1,F1), not channel(V2,_,y), not field(V2,_,F1). +compare(edit_remove_color,V1,V2,E1,F1) :- not compare(edit_remove_color_count,V1,V2,E1,F1), comparable(V1,V2), channel(V1,E1,color), field(V1,E1,F1), not channel(V2,_,color), not field(V2,_,F1). +compare(edit_remove_shape,V1,V2,E1,F1) :- not compare(edit_remove_shape_count,V1,V2,E1,F1), comparable(V1,V2), channel(V1,E1,shape), field(V1,E1,F1), not channel(V2,_,shape), not field(V2,_,F1). +compare(edit_remove_size,V1,V2,E1,F1) :- not compare(edit_remove_size_count,V1,V2,E1,F1), comparable(V1,V2), channel(V1,E1,size), field(V1,E1,F1), not channel(V2,_,size), not field(V2,_,F1). +compare(edit_remove_row,V1,V2,E1,F1) :- not compare(edit_remove_row_count,V1,V2,E1,F1), comparable(V1,V2), channel(V1,E1,row), field(V1,E1,F1), not channel(V2,_,row), not field(V2,_,F1). +compare(edit_remove_column,V1,V2,E1,F1) :- not compare(edit_remove_column_count,V1,V2,E1,F1), comparable(V1,V2), channel(V1,E1,column), field(V1,E1,F1), not channel(V2,_,column), not field(V2,_,F1). +compare(edit_remove_text,V1,V2,E1,F1) :- not compare(edit_remove_text_count,V1,V2,E1,F1), comparable(V1,V2), channel(V1,E1,text), field(V1,E1,F1), not channel(V2,_,text), not field(V2,_,F1). +compare(edit_modify_x,V1,V2,E1,F2) :- not compare(edit_modify_x_add_count,V1,V2,E1,E2), not compare(edit_modify_x_remove_count,V1,V2,E1,E2), comparable(V1,V2), channel(V1,E1,x), channel(V2,E2,x), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_y,V1,V2,E1,F2) :- not compare(edit_modify_y_add_count,V1,V2,E1,E2), not compare(edit_modify_y_remove_count,V1,V2,E1,E2), comparable(V1,V2), channel(V1,E1,y), channel(V2,E2,y), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_color,V1,V2,E1,F2) :- not compare(edit_modify_color_add_count,V1,V2,E1,E2), not compare(edit_modify_color_remove_count,V1,V2,E1,E2), comparable(V1,V2), channel(V1,E1,color), channel(V2,E2,color), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_shape,V1,V2,E1,F2) :- not compare(edit_modify_shape_add_count,V1,V2,E1,E2), not compare(edit_modify_shape_remove_count,V1,V2,E1,E2), comparable(V1,V2), channel(V1,E1,shape), channel(V2,E2,shape), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_size,V1,V2,E1,F2) :- not compare(edit_modify_size_add_count,V1,V2,E1,E2), not compare(edit_modify_size_remove_count,V1,V2,E1,E2), comparable(V1,V2), channel(V1,E1,size), channel(V2,E2,size), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_row,V1,V2,E1,F2) :- not compare(edit_modify_row_add_count,V1,V2,E1,E2), not compare(edit_modify_row_remove_count,V1,V2,E1,E2), comparable(V1,V2), channel(V1,E1,row), channel(V2,E2,row), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_column,V1,V2,E1,F2) :- not compare(edit_modify_column_add_count,V1,V2,E1,E2), not compare(edit_modify_column_remove_count,V1,V2,E1,E2), comparable(V1,V2), channel(V1,E1,column), channel(V2,E2,column), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_text,V1,V2,E1,F2) :- not compare(edit_modify_text_add_count,V1,V2,E1,E2), not compare(edit_modify_text_remove_count,V1,V2,E1,E2), comparable(V1,V2), channel(V1,E1,text), channel(V2,E2,text), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_x_add_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,x), channel(V2,E2,x), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_modify_y_add_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,y), channel(V2,E2,y), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_modify_color_add_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,color), channel(V2,E2,color), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_modify_shape_add_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,shape), channel(V2,E2,shape), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_modify_size_add_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,size), channel(V2,E2,size), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_modify_row_add_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,row), channel(V2,E2,row), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_modify_column_add_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,column), channel(V2,E2,column), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_modify_text_add_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,text), channel(V2,E2,text), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_modify_x_remove_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,x), channel(V2,E2,x), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). +compare(edit_modify_y_remove_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,y), channel(V2,E2,y), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). +compare(edit_modify_color_remove_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,color), channel(V2,E2,color), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). +compare(edit_modify_shape_remove_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,shape), channel(V2,E2,shape), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). +compare(edit_modify_size_remove_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,size), channel(V2,E2,size), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). +compare(edit_modify_row_remove_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,row), channel(V2,E2,row), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). +compare(edit_modify_column_remove_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,column), channel(V2,E2,column), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). +compare(edit_modify_text_remove_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,text), channel(V2,E2,text), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). +compare(edit_move_x_row,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,row). +compare(edit_move_x_column,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,column). +compare(edit_move_x_size,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,size). +compare(edit_move_x_shape,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,shape). +compare(edit_move_x_color,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,color). +compare(edit_move_x_y,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,y). +compare(edit_move_x_text,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,text). +compare(edit_move_y_row,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,row). +compare(edit_move_y_column,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,column). +compare(edit_move_y_size,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,size). +compare(edit_move_y_shape,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,shape). +compare(edit_move_y_color,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,color). +compare(edit_move_y_x,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,x). +compare(edit_move_y_text,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,text). +compare(edit_move_color_row,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,row). +compare(edit_move_color_column,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,column). +compare(edit_move_color_size,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,size). +compare(edit_move_color_shape,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,shape). +compare(edit_move_color_y,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,y). +compare(edit_move_color_x,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,x). +compare(edit_move_color_text,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,text). +compare(edit_move_shape_row,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,row). +compare(edit_move_shape_column,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,column). +compare(edit_move_shape_size,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,size). +compare(edit_move_shape_color,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,color). +compare(edit_move_shape_y,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,y). +compare(edit_move_shape_x,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,x). +compare(edit_move_shape_text,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,text). +compare(edit_move_size_row,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,row). +compare(edit_move_size_column,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,column). +compare(edit_move_size_shape,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,shape). +compare(edit_move_size_color,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,color). +compare(edit_move_size_y,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,y). +compare(edit_move_size_x,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,x). +compare(edit_move_size_text,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,text). +compare(edit_move_text_row,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,row). +compare(edit_move_text_column,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,column). +compare(edit_move_text_shape,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,shape). +compare(edit_move_text_color,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,color). +compare(edit_move_text_y,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,y). +compare(edit_move_text_x,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,x). +compare(edit_move_text_size,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,size). +compare(edit_move_column_row,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,row). +compare(edit_move_column_size,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,size). +compare(edit_move_column_shape,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,shape). +compare(edit_move_column_color,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,color). +compare(edit_move_column_y,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,y). +compare(edit_move_column_x,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,x). +compare(edit_move_column_text,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,text). +compare(edit_move_row_column,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,column). +compare(edit_move_row_size,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,size). +compare(edit_move_row_shape,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,shape). +compare(edit_move_row_color,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,color). +compare(edit_move_row_y,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,y). +compare(edit_move_row_x,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,x). +compare(edit_move_row_text,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,text). +compare(edit_swap_x_y,V1,V2,E1A,E2A) :- comparable(V1,V2), channel(V1,E1A,x), channel(V1,E1B,y), channel(V2,E2A,x), channel(V2,E2B,y), field(V1,E1A,FA), field(V2,E2B,FA), field(V1,E1B,FB), field(V2,E2A,FB), E2A > E2B, E1A > E1B. +compare(edit_swap_row_column,V1,V2,E1A,E2A) :- comparable(V1,V2), channel(V1,E1A,row), channel(V1,E1B,column), channel(V2,E2A,row), channel(V2,E2B,column), field(V1,E1A,FA), field(V2,E2B,FA), field(V1,E1B,FB), field(V2,E2A,FB), E2A > E2B, E1A > E1B. -compare(edit_scale,V1,V2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), log(V1,E1), not log(V2,E2). -compare(edit_scale,V1,V2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), not log(V1,E1), log(V2,E2). -compare(edit_scale,V1,V2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), zero(V1,E1), not zero(V2,E2). -compare(edit_scale,V1,V2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), not zero(V1,E1), zero(V2,E2). +compare(edit_scale,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), log(V1,E1), not log(V2,E2). +compare(edit_scale,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), not log(V1,E1), log(V2,E2). +compare(edit_scale,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), zero(V1,E1), not zero(V2,E2). +compare(edit_scale,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), not zero(V1,E1), zero(V2,E2). -compare(edit_bin,V1,V2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), bin(V1,E1,_), not bin(V2,E2,_). -compare(edit_bin,V1,V2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), not bin(V1,E1,_), bin(V2,E2,_). +compare(edit_bin,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), bin(V1,E1,_), not bin(V2,E2,_). +compare(edit_bin,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), not bin(V1,E1,_), bin(V2,E2,_). -compare(edit_aggregate,V1,V2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), aggregate(V1,E1,A1), aggregate(V2,E2,A2), A1 != A2. -compare(edit_aggregate,V1,V2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), aggregate(V1,E1,_), not aggregate(V2,E2,_). -compare(edit_aggregate,V1,V2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), not aggregate(V1,E1,_), aggregate(V2,E2,_). \ No newline at end of file +compare(edit_aggregate,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), aggregate(V1,E1,A1), aggregate(V2,E2,A2), A1 != A2. +compare(edit_aggregate,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), aggregate(V1,E1,_), not aggregate(V2,E2,_). +compare(edit_aggregate,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), not aggregate(V1,E1,_), aggregate(V2,E2,_). \ No newline at end of file diff --git a/asp/hard.lp b/asp/hard.lp index 89bb20f..6a8f8db 100644 --- a/asp/hard.lp +++ b/asp/hard.lp @@ -148,7 +148,7 @@ hard(rect_overlap,V) :- mark(V,rect), overlap(V). hard(stack_without_bar_area,V) :- stack(V,_), not mark(V,bar), not mark(V,area). % @constraint Don't stack if aggregation is not summative (summative are count, sum, distinct, valid, missing). -hard(stack_without_summative_agg,V,E,A) :- aggregate(V,E,A), stack(E,_), not summative_aggregate_op(A). +hard(stack_without_summative_agg,V,E,A) :- aggregate(V,E,A), stack(V,E,_), not summative_aggregate_op(A). % @constraint Need to stack if we use bar, area with discrete color. hard(no_stack_with_bar_area_discrete_color,V,E) :- mark(V,(bar;area)), encoding(V,E), channel(V,E,color), discrete(V,E), not stack(V,_). diff --git a/asp/output.lp b/asp/output.lp index e760401..14e6f0c 100644 --- a/asp/output.lp +++ b/asp/output.lp @@ -5,6 +5,7 @@ #show mark/2. #show visualization/1. +#show base/1. #show encoding/2. #show type/3. @@ -18,4 +19,5 @@ #show zero/2. #show soft/3. +#show compare/5. #show compare/3. diff --git a/asp/soft.lp b/asp/soft.lp index f8008f4..4411e95 100644 --- a/asp/soft.lp +++ b/asp/soft.lp @@ -32,6 +32,11 @@ soft(count_twice,V) :- visualization(V), { aggregate(V,_,count) } = 2. % @constraint Shape channel should not have too high cardinality. soft(shape_cardinality,V,E) :- channel(V,E,shape), discrete_cardinality(V,E,C), C > 5. +% @constraint Prefer nominal string fields +soft(string_non_nominal,V,E) :- type(V,E,ordinal), field(V,E,F), fieldtype(F,string). +soft(string_non_nominal,V,E) :- type(V,E,temporal), field(V,E,F), fieldtype(F,string). +soft(string_non_nominal,V,E) :- type(V,E,quantitative), field(V,E,F), fieldtype(F,string). + % @constraint Numbers should not be nominal. soft(number_nominal,V,E) :- type(V,E,nominal), field(V,E,F), fieldtype(F,number). diff --git a/asp/weights.lp b/asp/weights.lp index 1645cf1..671d641 100644 --- a/asp/weights.lp +++ b/asp/weights.lp @@ -3,7 +3,7 @@ #const type_q_weight = 0. #const type_o_weight = 1. #const type_n_weight = 2. -#const aggregate_weight = 1. +#const aggregate_weight = 3. #const bin_weight = 2. #const bin_high_weight = 10. #const bin_low_weight = 6. @@ -13,6 +13,7 @@ #const same_field_gte3_weight = 16. #const count_twice_weight = 50. #const shape_cardinality_weight = 5. +#const string_non_nominal_weight = 2. #const number_nominal_weight = 10. #const bin_cardinality_weight = 5. #const quant_bin_weight = 1. @@ -20,7 +21,7 @@ #const only_discrete_weight = 30. #const multiple_non_pos_weight = 3. #const non_positional_pref_weight = 10. -#const aggregate_group_by_raw_weight = 3. +#const aggregate_group_by_raw_weight = 10. #const x_y_raw_weight = 1. #const log_weight = 1. #const zero_weight = 1. diff --git a/data/weights.json b/data/weights.json index 49d8cbf..91dbc93 100644 --- a/data/weights.json +++ b/data/weights.json @@ -2,7 +2,7 @@ "type_q_weight": 0, "type_o_weight": 1, "type_n_weight": 2, - "aggregate_weight": 1, + "aggregate_weight": 3, "bin_weight": 2, "bin_high_weight": 10, "bin_low_weight": 6, @@ -12,6 +12,7 @@ "same_field_gte3_weight": 16, "count_twice_weight": 50, "shape_cardinality_weight": 5, + "string_non_nominal_weight": 2, "number_nominal_weight": 10, "bin_cardinality_weight": 5, "quant_bin_weight": 1, @@ -19,7 +20,7 @@ "only_discrete_weight": 30, "multiple_non_pos_weight": 3, "non_positional_pref_weight": 10, - "aggregate_group_by_raw_weight": 3, + "aggregate_group_by_raw_weight": 10, "x_y_raw_weight": 1, "log_weight": 1, "zero_weight": 1, diff --git a/draco/run.py b/draco/run.py index b1ab35c..7ba9281 100644 --- a/draco/run.py +++ b/draco/run.py @@ -37,13 +37,13 @@ class Result: - props: List[str] + props: Dict[str,List[str]] cost: Optional[int] violations: Dict[str, int] def __init__(self, answers: Answers, cost: Optional[int] = None) -> None: violations: Dict[str, int] = defaultdict(int) - props: List[str] = [] + props: Dict[str,List[str]] = {} for ((head, body),) in answers: if head == "cost": @@ -53,18 +53,21 @@ def __init__(self, answers: Answers, cost: Optional[int] = None) -> None: elif head == "compare": violations[body[0]] += 1 else: + name = body[0] b = ",".join(map(str, body)) - props.append(f"{head}({b}).") + if (name not in props): + props[name] = [] + + props[name].append(f"{head}({b}).") self.props = props self.violations = violations self.cost = cost def as_vl(self,v) -> Dict: - specs = asp2vl(self.props) + specs = asp2vl(self.props[v]) return specs[v] - def load_file(path: str) -> bytes: content = file_cache.get(path) if content is not None: From 23e349d49e3098dcae99908a2092a176b6de8216 Mon Sep 17 00:00:00 2001 From: Halden Lin Date: Wed, 13 Feb 2019 13:33:08 -0800 Subject: [PATCH 05/25] tweak weights --- asp/compare.lp | 60 ++++++++++++++++++++++++------------------------- asp/optimize.lp | 2 +- asp/output.lp | 1 - asp/weights.lp | 8 +++---- 4 files changed, 35 insertions(+), 36 deletions(-) diff --git a/asp/compare.lp b/asp/compare.lp index c3f5099..48cfa6f 100644 --- a/asp/compare.lp +++ b/asp/compare.lp @@ -1,36 +1,36 @@ %% FILE GENERATED BY graphscapeToAsp.js, DO NOT MODIFY %% comparable(V1,V2) :- visualization(V1), base(V1), visualization(V2), V1 != V2. % MARK EDITS -compare(edit_area_bar,V1,V2) :- comparable(V1,V2), mark(V1,area), mark(V2,bar). -compare(edit_area_bar,V1,V2) :- comparable(V1,V2), mark(V1,bar), mark(V2,area). -compare(edit_area_line,V1,V2) :- comparable(V1,V2), mark(V1,area), mark(V2,line). -compare(edit_area_line,V1,V2) :- comparable(V1,V2), mark(V1,line), mark(V2,area). -compare(edit_area_point,V1,V2) :- comparable(V1,V2), mark(V1,area), mark(V2,point). -compare(edit_area_point,V1,V2) :- comparable(V1,V2), mark(V1,point), mark(V2,area). -compare(edit_area_text,V1,V2) :- comparable(V1,V2), mark(V1,area), mark(V2,text). -compare(edit_area_text,V1,V2) :- comparable(V1,V2), mark(V1,text), mark(V2,area). -compare(edit_area_tick,V1,V2) :- comparable(V1,V2), mark(V1,area), mark(V2,tick). -compare(edit_area_tick,V1,V2) :- comparable(V1,V2), mark(V1,tick), mark(V2,area). -compare(edit_bar_line,V1,V2) :- comparable(V1,V2), mark(V1,bar), mark(V2,line). -compare(edit_bar_line,V1,V2) :- comparable(V1,V2), mark(V1,line), mark(V2,bar). -compare(edit_bar_point,V1,V2) :- comparable(V1,V2), mark(V1,bar), mark(V2,point). -compare(edit_bar_point,V1,V2) :- comparable(V1,V2), mark(V1,point), mark(V2,bar). -compare(edit_bar_text,V1,V2) :- comparable(V1,V2), mark(V1,bar), mark(V2,text). -compare(edit_bar_text,V1,V2) :- comparable(V1,V2), mark(V1,text), mark(V2,bar). -compare(edit_bar_tick,V1,V2) :- comparable(V1,V2), mark(V1,bar), mark(V2,tick). -compare(edit_bar_tick,V1,V2) :- comparable(V1,V2), mark(V1,tick), mark(V2,bar). -compare(edit_line_point,V1,V2) :- comparable(V1,V2), mark(V1,line), mark(V2,point). -compare(edit_line_point,V1,V2) :- comparable(V1,V2), mark(V1,point), mark(V2,line). -compare(edit_line_text,V1,V2) :- comparable(V1,V2), mark(V1,line), mark(V2,text). -compare(edit_line_text,V1,V2) :- comparable(V1,V2), mark(V1,text), mark(V2,line). -compare(edit_line_tick,V1,V2) :- comparable(V1,V2), mark(V1,line), mark(V2,tick). -compare(edit_line_tick,V1,V2) :- comparable(V1,V2), mark(V1,tick), mark(V2,line). -compare(edit_point_text,V1,V2) :- comparable(V1,V2), mark(V1,point), mark(V2,text). -compare(edit_point_text,V1,V2) :- comparable(V1,V2), mark(V1,text), mark(V2,point). -compare(edit_point_tick,V1,V2) :- comparable(V1,V2), mark(V1,point), mark(V2,tick). -compare(edit_point_tick,V1,V2) :- comparable(V1,V2), mark(V1,tick), mark(V2,point). -compare(edit_text_tick,V1,V2) :- comparable(V1,V2), mark(V1,text), mark(V2,tick). -compare(edit_text_tick,V1,V2) :- comparable(V1,V2), mark(V1,tick), mark(V2,text). +compare(edit_area_bar,V1,V2,area,bar) :- comparable(V1,V2), mark(V1,area), mark(V2,bar). +compare(edit_area_bar,V1,V2,bar,area) :- comparable(V1,V2), mark(V1,bar), mark(V2,area). +compare(edit_area_line,V1,V2,area,line) :- comparable(V1,V2), mark(V1,area), mark(V2,line). +compare(edit_area_line,V1,V2,line,area) :- comparable(V1,V2), mark(V1,line), mark(V2,area). +compare(edit_area_point,V1,V2,area,point) :- comparable(V1,V2), mark(V1,area), mark(V2,point). +compare(edit_area_point,V1,V2,point,area) :- comparable(V1,V2), mark(V1,point), mark(V2,area). +compare(edit_area_text,V1,V2,area,text) :- comparable(V1,V2), mark(V1,area), mark(V2,text). +compare(edit_area_text,V1,V2,text,area) :- comparable(V1,V2), mark(V1,text), mark(V2,area). +compare(edit_area_tick,V1,V2,area,tick) :- comparable(V1,V2), mark(V1,area), mark(V2,tick). +compare(edit_area_tick,V1,V2,tick,area) :- comparable(V1,V2), mark(V1,tick), mark(V2,area). +compare(edit_bar_line,V1,V2,bar,line) :- comparable(V1,V2), mark(V1,bar), mark(V2,line). +compare(edit_bar_line,V1,V2,line,bar) :- comparable(V1,V2), mark(V1,line), mark(V2,bar). +compare(edit_bar_point,V1,V2,bar,point) :- comparable(V1,V2), mark(V1,bar), mark(V2,point). +compare(edit_bar_point,V1,V2,point,bar) :- comparable(V1,V2), mark(V1,point), mark(V2,bar). +compare(edit_bar_text,V1,V2,bar,text) :- comparable(V1,V2), mark(V1,bar), mark(V2,text). +compare(edit_bar_text,V1,V2,text,bar) :- comparable(V1,V2), mark(V1,text), mark(V2,bar). +compare(edit_bar_tick,V1,V2,bar,tick) :- comparable(V1,V2), mark(V1,bar), mark(V2,tick). +compare(edit_bar_tick,V1,V2,tick,bar) :- comparable(V1,V2), mark(V1,tick), mark(V2,bar). +compare(edit_line_point,V1,V2,line,point) :- comparable(V1,V2), mark(V1,line), mark(V2,point). +compare(edit_line_point,V1,V2,point,line) :- comparable(V1,V2), mark(V1,point), mark(V2,line). +compare(edit_line_text,V1,V2,line,text) :- comparable(V1,V2), mark(V1,line), mark(V2,text). +compare(edit_line_text,V1,V2,text,line) :- comparable(V1,V2), mark(V1,text), mark(V2,line). +compare(edit_line_tick,V1,V2,line,tick) :- comparable(V1,V2), mark(V1,line), mark(V2,tick). +compare(edit_line_tick,V1,V2,tick,line) :- comparable(V1,V2), mark(V1,tick), mark(V2,line). +compare(edit_point_text,V1,V2,point,text) :- comparable(V1,V2), mark(V1,point), mark(V2,text). +compare(edit_point_text,V1,V2,text,point) :- comparable(V1,V2), mark(V1,text), mark(V2,point). +compare(edit_point_tick,V1,V2,point,tick) :- comparable(V1,V2), mark(V1,point), mark(V2,tick). +compare(edit_point_tick,V1,V2,tick,point) :- comparable(V1,V2), mark(V1,tick), mark(V2,point). +compare(edit_text_tick,V1,V2,text,tick) :- comparable(V1,V2), mark(V1,text), mark(V2,tick). +compare(edit_text_tick,V1,V2,tick,text) :- comparable(V1,V2), mark(V1,tick), mark(V2,text). % ENCODING EDITS diff --git a/asp/optimize.lp b/asp/optimize.lp index 5285575..8cde161 100644 --- a/asp/optimize.lp +++ b/asp/optimize.lp @@ -1,6 +1,6 @@ % Minimize the feature weight -#minimize { W,F,V,Q: soft_weight(F,W), soft(F,V,Q); W,F,V1,V2: compare_weight(F,W), compare(F,V1,V2) }. +#minimize { WD * 10,F,V,Q: soft_weight(F,WD), soft(F,V,Q); WG,F,V1,V2,A,B: compare_weight(F,WG), compare(F,V1,V2,A,B) }. % #minimize { W@2,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. % #minimize { W@1,F,V1,V2: compare_weight(F,W), compare(F,V1,V2) }. \ No newline at end of file diff --git a/asp/output.lp b/asp/output.lp index 14e6f0c..d1c17ed 100644 --- a/asp/output.lp +++ b/asp/output.lp @@ -20,4 +20,3 @@ #show soft/3. #show compare/5. -#show compare/3. diff --git a/asp/weights.lp b/asp/weights.lp index 671d641..4c0a020 100644 --- a/asp/weights.lp +++ b/asp/weights.lp @@ -3,7 +3,7 @@ #const type_q_weight = 0. #const type_o_weight = 1. #const type_n_weight = 2. -#const aggregate_weight = 3. +#const aggregate_weight = 4. #const bin_weight = 2. #const bin_high_weight = 10. #const bin_low_weight = 6. @@ -31,7 +31,7 @@ #const includes_zero_weight = 10. #const only_x_weight = 1. -#const orientation_binned_weight = 1. +#const orientation_binned_weight = 2. #const high_cardinality_ordinal_weight = 10. #const high_cardinality_nominal_weight = 10. #const high_cardinality_nominal_color_weight = 10. @@ -99,8 +99,8 @@ #const nominal_shape_weight = 11. #const nominal_text_weight = 12. #const nominal_row_weight = 7. -#const nominal_column_weight = 10. -#const nominal_detail_weight = 20. +#const nominal_column_weight = 9. +#const nominal_detail_weight = 30. #const interesting_x_weight = 0. #const interesting_y_weight = 1. From b1691870da9cc739ba7a577b622758037db72ab0 Mon Sep 17 00:00:00 2001 From: Halden Lin Date: Wed, 20 Feb 2019 01:14:34 -0800 Subject: [PATCH 06/25] tweak weights --- asp/compare.lp | 1 + asp/optimize.lp | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/asp/compare.lp b/asp/compare.lp index 48cfa6f..890efe5 100644 --- a/asp/compare.lp +++ b/asp/compare.lp @@ -1,5 +1,6 @@ %% FILE GENERATED BY graphscapeToAsp.js, DO NOT MODIFY %% comparable(V1,V2) :- visualization(V1), base(V1), visualization(V2), V1 != V2. + % MARK EDITS compare(edit_area_bar,V1,V2,area,bar) :- comparable(V1,V2), mark(V1,area), mark(V2,bar). compare(edit_area_bar,V1,V2,bar,area) :- comparable(V1,V2), mark(V1,bar), mark(V2,area). diff --git a/asp/optimize.lp b/asp/optimize.lp index 8cde161..9680b39 100644 --- a/asp/optimize.lp +++ b/asp/optimize.lp @@ -2,5 +2,5 @@ #minimize { WD * 10,F,V,Q: soft_weight(F,WD), soft(F,V,Q); WG,F,V1,V2,A,B: compare_weight(F,WG), compare(F,V1,V2,A,B) }. -% #minimize { W@2,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. -% #minimize { W@1,F,V1,V2: compare_weight(F,W), compare(F,V1,V2) }. \ No newline at end of file +#minimize { W@2,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. +#minimize { W@1,F,V1,V2: compare_weight(F,W), compare(F,V1,V2) }. \ No newline at end of file From 946c5e275ef372c9635b7d714dbd70a07eecc797 Mon Sep 17 00:00:00 2001 From: Halden Lin Date: Thu, 28 Feb 2019 00:40:22 -0800 Subject: [PATCH 07/25] tune a little --- asp/define.lp | 2 +- asp/optimize.lp | 4 ++-- asp/weights.lp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/asp/define.lp b/asp/define.lp index 1cc89be..2840e28 100644 --- a/asp/define.lp +++ b/asp/define.lp @@ -16,7 +16,7 @@ binning(10;25;200). single_channel(x;y;color;size;shape;text;row;column). multi_channel(detail). channel(C) :- single_channel(C). -channel(C) :- multi_channel(C). +% channel(C) :- multi_channel(C). non_positional(color;size;shape;text;detail). % Possible tasks. diff --git a/asp/optimize.lp b/asp/optimize.lp index 9680b39..9f7b11e 100644 --- a/asp/optimize.lp +++ b/asp/optimize.lp @@ -2,5 +2,5 @@ #minimize { WD * 10,F,V,Q: soft_weight(F,WD), soft(F,V,Q); WG,F,V1,V2,A,B: compare_weight(F,WG), compare(F,V1,V2,A,B) }. -#minimize { W@2,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. -#minimize { W@1,F,V1,V2: compare_weight(F,W), compare(F,V1,V2) }. \ No newline at end of file +% #minimize { W@2,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. +% #minimize { W@1,F,V1,V2: compare_weight(F,W), compare(F,V1,V2) }. diff --git a/asp/weights.lp b/asp/weights.lp index 4c0a020..ae84717 100644 --- a/asp/weights.lp +++ b/asp/weights.lp @@ -13,7 +13,7 @@ #const same_field_gte3_weight = 16. #const count_twice_weight = 50. #const shape_cardinality_weight = 5. -#const string_non_nominal_weight = 2. +#const string_non_nominal_weight = 3. #const number_nominal_weight = 10. #const bin_cardinality_weight = 5. #const quant_bin_weight = 1. From 27028ed8a16672928390c032a57e5d9fd010a25b Mon Sep 17 00:00:00 2001 From: Halden Lin Date: Wed, 13 Mar 2019 13:58:56 -0700 Subject: [PATCH 08/25] add support for topk results and topk draco, graphscape --- asp/compare.lp | 12 +++--- asp/optimize.lp | 2 +- asp/optimize_draco.lp | 2 + asp/optimize_graphscape.lp | 2 + asp/output.lp | 5 ++- draco/run.py | 85 +++++++++++++++++++++++++++++++------- 6 files changed, 87 insertions(+), 21 deletions(-) create mode 100644 asp/optimize_draco.lp create mode 100644 asp/optimize_graphscape.lp diff --git a/asp/compare.lp b/asp/compare.lp index 890efe5..151e119 100644 --- a/asp/compare.lp +++ b/asp/compare.lp @@ -156,9 +156,11 @@ compare(edit_scale,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E compare(edit_scale,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), zero(V1,E1), not zero(V2,E2). compare(edit_scale,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), not zero(V1,E1), zero(V2,E2). -compare(edit_bin,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), bin(V1,E1,_), not bin(V2,E2,_). -compare(edit_bin,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), not bin(V1,E1,_), bin(V2,E2,_). +compare(edit_bin,V1,V2,E1,E2,B1,none) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), bin(V1,E1,B1), not bin(V2,E2,_). +compare(edit_bin,V1,V2,E1,E2,none,B2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), not bin(V1,E1,_), bin(V2,E2,B2). -compare(edit_aggregate,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), aggregate(V1,E1,A1), aggregate(V2,E2,A2), A1 != A2. -compare(edit_aggregate,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), aggregate(V1,E1,_), not aggregate(V2,E2,_). -compare(edit_aggregate,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), not aggregate(V1,E1,_), aggregate(V2,E2,_). \ No newline at end of file +compare(edit_aggregate,V1,V2,E1,E2,A1,A2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), aggregate(V1,E1,A1), aggregate(V2,E2,A2), A1 != A2. +compare(edit_aggregate,V1,V2,E1,E2,A1,none) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), aggregate(V1,E1,A1), not aggregate(V2,E2,_). +compare(edit_aggregate,V1,V2,E1,E2,none,A2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), not aggregate(V1,E1,_), aggregate(V2,E2,A2). + +compare(N,V1,V2,A,B,_placeholder,_placeholder) :- compare(N,V1,V2,A,B). diff --git a/asp/optimize.lp b/asp/optimize.lp index 9f7b11e..8460e2f 100644 --- a/asp/optimize.lp +++ b/asp/optimize.lp @@ -1,6 +1,6 @@ % Minimize the feature weight -#minimize { WD * 10,F,V,Q: soft_weight(F,WD), soft(F,V,Q); WG,F,V1,V2,A,B: compare_weight(F,WG), compare(F,V1,V2,A,B) }. +#minimize { WD * 10,F,V,Q: soft_weight(F,WD), soft(F,V,Q); WG,F,V1,V2,A,B,C,D: compare_weight(F,WG), compare(F,V1,V2,A,B,C,D) }. % #minimize { W@2,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. % #minimize { W@1,F,V1,V2: compare_weight(F,W), compare(F,V1,V2) }. diff --git a/asp/optimize_draco.lp b/asp/optimize_draco.lp new file mode 100644 index 0000000..40824af --- /dev/null +++ b/asp/optimize_draco.lp @@ -0,0 +1,2 @@ +#minimize { W@1,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. +#minimize { W@2,F,V1,V2,A,B,C,D : compare_weight(F,W), compare(F,V1,V2,A,B,C,D) }. diff --git a/asp/optimize_graphscape.lp b/asp/optimize_graphscape.lp new file mode 100644 index 0000000..d0e318e --- /dev/null +++ b/asp/optimize_graphscape.lp @@ -0,0 +1,2 @@ +#minimize { W@2,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. +#minimize { W@1,F,V1,V2,A,B,C,D: compare_weight(F,W), compare(F,V1,V2,A,B,C,D) }. diff --git a/asp/output.lp b/asp/output.lp index d1c17ed..63b1461 100644 --- a/asp/output.lp +++ b/asp/output.lp @@ -19,4 +19,7 @@ #show zero/2. #show soft/3. -#show compare/5. +#show compare/7. + +#show soft_weight(N,W) : soft(N,_,_), soft_weight(N,W). +#show compare_weight(N,W) : compare(N,_,_,_,_,_,_), compare_weight(N,W). diff --git a/draco/run.py b/draco/run.py index 7ba9281..9f1377d 100644 --- a/draco/run.py +++ b/draco/run.py @@ -12,6 +12,7 @@ import clyngor from clyngor.answers import Answers + from draco.js import asp2vl logging.basicConfig(level=logging.INFO) @@ -43,6 +44,13 @@ class Result: def __init__(self, answers: Answers, cost: Optional[int] = None) -> None: violations: Dict[str, int] = defaultdict(int) + draco: Dict[str, int] = defaultdict(int) + draco_list = [] + graphscape: Dict[str, int] = defaultdict(int) + graphscape_list = [] + draco_weights: Dict[str, int] = defaultdict(int) + graphscape_weights: Dict[str, int] = defaultdict(int) + props: Dict[str,List[str]] = {} for ((head, body),) in answers: @@ -50,8 +58,16 @@ def __init__(self, answers: Answers, cost: Optional[int] = None) -> None: cost = int(body[0]) elif head == "soft": violations[body[0]] += 1 + draco[body[0]] += 1 + draco_list.append(body) elif head == "compare": violations[body[0]] += 1 + graphscape[body[0]] += 1 + graphscape_list.append(body) + elif head == "soft_weight": + draco_weights[body[0]] = body[1] + elif head == "compare_weight": + graphscape_weights[body[0]] = body[1] else: name = body[0] b = ",".join(map(str, body)) @@ -60,9 +76,29 @@ def __init__(self, answers: Answers, cost: Optional[int] = None) -> None: props[name].append(f"{head}({b}).") + # print(draco_weights) + # print(draco) + draco_weight = sum([v * draco_weights[k] for k,v in draco.items()]) + graphscape_weight = sum([v * graphscape_weights[k] for k,v in graphscape.items()]) + cost = draco_weight + graphscape_weight + + + # print(graphscape_list) + # if ('\"view\"' in props): + # print('\n'.join(props["\"view\""])) + # print() + self.props = props self.violations = violations + self.draco = draco + self.graphscape = graphscape + self.draco_weights = draco_weights + self.graphscape_weights = graphscape_weights + self.draco_list = draco_list + self.graphscape_list = graphscape_list self.cost = cost + self.d = draco_weight + self.g = graphscape_weight def as_vl(self,v) -> Dict: specs = asp2vl(self.props[v]) @@ -84,16 +120,23 @@ def run_clingo( files: List[str] = None, silence_warnings=False, debug=False, + topk=False, + k=1, ) -> Tuple[str, str]: """ Run draco and return stderr and stdout """ - # default args files = files or DRACO_LP constants = constants or {} - options = ["--outf=2", "--quiet=1,2,2"] + options = ["--outf=2", "--quiet=1,2,2", "--parallel-mode=4"] + + if (topk): + files.append('topk-py.lp') + options.append('--opt-mode=OptN') + options.append("--models={0}".format(k)) + if silence_warnings: options.append("--warn=no-atom-undefined") for name, value in constants.items(): @@ -108,6 +151,7 @@ def run_clingo( program = "\n".join(draco_query) file_names = [os.path.join(DRACO_LP_DIR, f) for f in files] + asp_program = b"\n".join(map(load_file, file_names)) + program.encode("utf8") if debug: @@ -115,9 +159,8 @@ def run_clingo( fd.write(program) logger.info('Debug ASP with "clingo %s %s"', " ".join(file_names), fd.name) - + stdout, stderr = proc.communicate(asp_program) - return (stderr, stdout) @@ -128,6 +171,8 @@ def run( silence_warnings=False, debug=False, clear_cache=False, + topk=False, + k=1, ) -> Optional[Result]: """ Run clingo to compute a completion of a partial spec or violations. """ @@ -136,7 +181,7 @@ def run( logger.warning("Cleared file cache") file_cache.clear() - stderr, stdout = run_clingo(draco_query, constants, files, silence_warnings, debug) + stderr, stdout = run_clingo(draco_query, constants, files, silence_warnings, debug, topk, k) try: json_result = json.loads(stdout) @@ -154,15 +199,27 @@ def run( logger.info("Constraints are unsatisfiable.") return None elif result == "OPTIMUM FOUND": - # get the last witness, which is the best result - answers = json_result["Call"][0]["Witnesses"][-1] - - logger.debug(answers["Value"]) - - return Result( - clyngor.Answers(answers["Value"]).sorted, - cost=json_result["Models"]["Costs"][0], - ) + if (not topk): + # get the last witness, which is the best result + answers = json_result["Call"][0]["Witnesses"][-1] + + logger.debug(answers["Value"]) + + result = Result( + clyngor.Answers(answers["Value"]).sorted + ) + + return result + else: + results = [] + + for call in json_result["Call"]: + for answers in call["Witnesses"]: + result = Result( + clyngor.Answers(answers["Value"]).sorted + ) + results.append(result) + return results elif result == "SATISFIABLE": answers = json_result["Call"][0]["Witnesses"][-1] From 3452c8a45a8df21be7ad3dd4e4331e0a94f7e879 Mon Sep 17 00:00:00 2001 From: Halden Lin Date: Wed, 13 Mar 2019 15:30:21 -0700 Subject: [PATCH 09/25] add field ordering --- asp/generate.lp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/asp/generate.lp b/asp/generate.lp index b284b50..945234b 100644 --- a/asp/generate.lp +++ b/asp/generate.lp @@ -31,3 +31,6 @@ obj_id(1..max_extra_encs). % stacking 0 { stack(V,S): stacking(S) } 1 :- visualization(V). + +:- field(V,E1,F1), field(V,E2,F2), E1 > E2, F1 <= F2. +% :- channel(V,E1,C1), channel(V,E2,C2), E1 > E2, C1 <= C2. From d800969e66526b3c0c39976a2e295506824f9ea2 Mon Sep 17 00:00:00 2001 From: Halden Lin Date: Fri, 15 Mar 2019 16:04:13 -0700 Subject: [PATCH 10/25] update --- asp/soft.lp | 4 +++- asp/weights.lp | 4 ++-- draco/run.py | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/asp/soft.lp b/asp/soft.lp index 4411e95..7df745a 100644 --- a/asp/soft.lp +++ b/asp/soft.lp @@ -469,4 +469,6 @@ soft(summary_discrete_text,E) :- task(V,summary), channel(V,E,text), discrete(V, soft(summary_discrete_row,E) :- task(V,summary), channel(V,E,row), discrete(V,E), enc_interesting(V,E). % @constraint Discrete column for summary tasks. -soft(summary_discrete_column,E) :- task(V,summary), channel(V,E,column), discrete(V,E), enc_interesting(V,E). \ No newline at end of file +soft(summary_discrete_column,E) :- task(V,summary), channel(V,E,column), discrete(V,E), enc_interesting(V,E). + +:~ field(V,E1,"Horsepower"), channel(V,E1,y), field(V,E2,"Miles_per_Gallon"), channel(V,E2,x). [1] diff --git a/asp/weights.lp b/asp/weights.lp index ae84717..92be054 100644 --- a/asp/weights.lp +++ b/asp/weights.lp @@ -13,7 +13,7 @@ #const same_field_gte3_weight = 16. #const count_twice_weight = 50. #const shape_cardinality_weight = 5. -#const string_non_nominal_weight = 3. +#const string_non_nominal_weight = 4. #const number_nominal_weight = 10. #const bin_cardinality_weight = 5. #const quant_bin_weight = 1. @@ -24,7 +24,7 @@ #const aggregate_group_by_raw_weight = 10. #const x_y_raw_weight = 1. #const log_weight = 1. -#const zero_weight = 1. +#const zero_weight = 2. #const zero_size_weight = 3. #const zero_positional_weight = 1. #const zero_skew_weight = 5. diff --git a/draco/run.py b/draco/run.py index 9f1377d..eca3437 100644 --- a/draco/run.py +++ b/draco/run.py @@ -130,7 +130,7 @@ def run_clingo( files = files or DRACO_LP constants = constants or {} - options = ["--outf=2", "--quiet=1,2,2", "--parallel-mode=4"] + options = ["--outf=2", "--quiet=1,2,2", "--parallel-mode=4", "--seed=20"] if (topk): files.append('topk-py.lp') From e19c3cb0d2a35ead2813fff744245cf17bbeb7fb Mon Sep 17 00:00:00 2001 From: Halden Lin Date: Wed, 20 Mar 2019 23:02:13 -0700 Subject: [PATCH 11/25] update weights --- asp/weights.lp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/asp/weights.lp b/asp/weights.lp index 92be054..77f3697 100644 --- a/asp/weights.lp +++ b/asp/weights.lp @@ -24,7 +24,7 @@ #const aggregate_group_by_raw_weight = 10. #const x_y_raw_weight = 1. #const log_weight = 1. -#const zero_weight = 2. +#const zero_weight = 3. #const zero_size_weight = 3. #const zero_positional_weight = 1. #const zero_skew_weight = 5. From 52f9275faf243974a26a888d72868db323eee73f Mon Sep 17 00:00:00 2001 From: Halden Lin Date: Wed, 20 Mar 2019 23:19:19 -0700 Subject: [PATCH 12/25] prefer against zero bin --- asp/assign_weights.lp | 1 + asp/soft.lp | 3 +++ asp/weights.lp | 3 ++- 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/asp/assign_weights.lp b/asp/assign_weights.lp index 606fe52..f39a257 100644 --- a/asp/assign_weights.lp +++ b/asp/assign_weights.lp @@ -25,6 +25,7 @@ soft_weight(aggregate_group_by_raw,aggregate_group_by_raw_weight). soft_weight(x_y_raw,x_y_raw_weight). soft_weight(log,log_weight). soft_weight(zero,zero_weight). +soft_weight(zero_bin,zero_bin_weight). soft_weight(zero_size,zero_size_weight). soft_weight(zero_positional,zero_positional_weight). soft_weight(zero_skew,zero_skew_weight). diff --git a/asp/soft.lp b/asp/soft.lp index 7df745a..f8974a2 100644 --- a/asp/soft.lp +++ b/asp/soft.lp @@ -70,6 +70,9 @@ soft(log,V,E) :- log(V,E). % @constraint Prefer to include zero for continuous (binned doesn't need zero). soft(zero,V,E) :- continuous(V,E), not zero(V,E). +% @constraint Prefer to exclude zero for binned. +soft(zero_bin,V,E) :- bin(V,E,_), zero(V,E). + % @constraint Prefer zero size (even when binned). soft(zero_size,V) :- channel(V,E,size), not zero(V,E). diff --git a/asp/weights.lp b/asp/weights.lp index 77f3697..eb5235e 100644 --- a/asp/weights.lp +++ b/asp/weights.lp @@ -24,7 +24,8 @@ #const aggregate_group_by_raw_weight = 10. #const x_y_raw_weight = 1. #const log_weight = 1. -#const zero_weight = 3. +#const zero_weight = 1. +#const zero_bin_weight = 1. #const zero_size_weight = 3. #const zero_positional_weight = 1. #const zero_skew_weight = 5. From 88c2986a2e8c7b6a9efb79825ff4db1328d233b9 Mon Sep 17 00:00:00 2001 From: Halden Lin Date: Wed, 20 Mar 2019 23:21:06 -0700 Subject: [PATCH 13/25] fix asp2vl and modify weights --- data/weights.json | 11 ++++++----- js/src/asp2vl.ts | 6 +++--- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/data/weights.json b/data/weights.json index 91dbc93..dbf161b 100644 --- a/data/weights.json +++ b/data/weights.json @@ -2,7 +2,7 @@ "type_q_weight": 0, "type_o_weight": 1, "type_n_weight": 2, - "aggregate_weight": 3, + "aggregate_weight": 4, "bin_weight": 2, "bin_high_weight": 10, "bin_low_weight": 6, @@ -12,7 +12,7 @@ "same_field_gte3_weight": 16, "count_twice_weight": 50, "shape_cardinality_weight": 5, - "string_non_nominal_weight": 2, + "string_non_nominal_weight": 4, "number_nominal_weight": 10, "bin_cardinality_weight": 5, "quant_bin_weight": 1, @@ -24,12 +24,13 @@ "x_y_raw_weight": 1, "log_weight": 1, "zero_weight": 1, + "zero_bin_weight": 1, "zero_size_weight": 3, "zero_positional_weight": 1, "zero_skew_weight": 5, "includes_zero_weight": 10, "only_x_weight": 1, - "orientation_binned_weight": 1, + "orientation_binned_weight": 2, "high_cardinality_ordinal_weight": 10, "high_cardinality_nominal_weight": 10, "high_cardinality_nominal_color_weight": 10, @@ -89,8 +90,8 @@ "nominal_shape_weight": 11, "nominal_text_weight": 12, "nominal_row_weight": 7, - "nominal_column_weight": 10, - "nominal_detail_weight": 20, + "nominal_column_weight": 9, + "nominal_detail_weight": 30, "interesting_x_weight": 0, "interesting_y_weight": 1, "interesting_color_weight": 2, diff --git a/js/src/asp2vl.ts b/js/src/asp2vl.ts index 3cccd51..e22738f 100644 --- a/js/src/asp2vl.ts +++ b/js/src/asp2vl.ts @@ -59,13 +59,13 @@ function asp2vl_single(facts: string[], v: string) { const enc = encodings[e]; // if quantitative encoding and zero is not set, set zero to false - if (enc.type === 'quantitative' && enc.zero === undefined && enc.bin === undefined) { + if (enc.type === 'quantitative' && typeof enc.zero === 'undefined' && typeof enc.bin === 'undefined') { enc.zero = false; } const scale = { ...(enc.log ? { type: 'log' } : {}), - ...(enc.zero === undefined ? {} : enc.zero ? { zero: true } : { zero: false }), + ...(typeof enc.zero === 'undefined' ? {} : enc.zero ? { zero: true } : { zero: false }), }; encoding[enc.channel] = { @@ -73,7 +73,7 @@ function asp2vl_single(facts: string[], v: string) { ...(enc.aggregate ? { aggregate: enc.aggregate } : {}), ...(enc.field ? { field: enc.field } : {}), ...(enc.stack ? { stack: enc.stack } : {}), - ...(enc.bin !== undefined ? (+enc.bin === 10 ? { bin: true } : { bin: { maxbins: +enc.bin } }) : {}), + ...(typeof enc.bin !== 'undefined' ? (+enc.bin === 10 ? { bin: true } : { bin: { maxbins: +enc.bin } }) : {}), ...(Object.keys(scale).length ? { scale } : {}), }; } From eb2e77407120366b040a161dbf6c8a50d7222210 Mon Sep 17 00:00:00 2001 From: Halden Lin Date: Fri, 30 Aug 2019 11:37:48 -0700 Subject: [PATCH 14/25] Add bin string hard constraint. --- asp/hard.lp | 5 +- build/bundle.js | 35941 +++++++++++++++++++++++ build/bundle.js.map | 1 + build/data.d.ts | 30 + build/data.js | 77 + build/draco.d.ts | 27 + build/draco.js | 115 + build/index.d.ts | 3 + build/index.js | 4 + build/model/constraint-dictionary.d.ts | 15 + build/model/constraint-dictionary.js | 53 + build/model/constraint.d.ts | 24 + build/model/constraint.js | 51 + build/model/facts.d.ts | 12 + build/model/facts.js | 106 + build/model/index.d.ts | 5 + build/model/index.js | 6 + build/model/result.d.ts | 8 + build/model/result.js | 27 + build/model/util.d.ts | 1 + build/model/util.js | 5 + build/model/witness.d.ts | 8 + build/model/witness.js | 7 + 23 files changed, 36530 insertions(+), 1 deletion(-) create mode 100644 build/bundle.js create mode 100644 build/bundle.js.map create mode 100644 build/data.d.ts create mode 100644 build/data.js create mode 100644 build/draco.d.ts create mode 100644 build/draco.js create mode 100644 build/index.d.ts create mode 100644 build/index.js create mode 100644 build/model/constraint-dictionary.d.ts create mode 100644 build/model/constraint-dictionary.js create mode 100644 build/model/constraint.d.ts create mode 100644 build/model/constraint.js create mode 100644 build/model/facts.d.ts create mode 100644 build/model/facts.js create mode 100644 build/model/index.d.ts create mode 100644 build/model/index.js create mode 100644 build/model/result.d.ts create mode 100644 build/model/result.js create mode 100644 build/model/util.d.ts create mode 100644 build/model/util.js create mode 100644 build/model/witness.d.ts create mode 100644 build/model/witness.js diff --git a/asp/hard.lp b/asp/hard.lp index 6a8f8db..5f059cd 100644 --- a/asp/hard.lp +++ b/asp/hard.lp @@ -209,4 +209,7 @@ hard(invalid_extent_non_number,V,F) :- visualization(V), extent(F,_,_), not fiel hard(invalid_extent_order,V,MIN,MAX):- visualization(V), extent(_,MIN,MAX), MIN > MAX. % @constraint The name of a field cannot be the name of an encoding. This is to prevent errors coming from the shortcuts in define.lp. -hard(encoding_field_same_name,V,N) :- visualization(V), encoding(V,N), field(N). \ No newline at end of file +hard(encoding_field_same_name,V,N) :- visualization(V), encoding(V,N), field(N). + +% @constraint Cannot bin strings. +hard(bin_string,V,E) :- field(V,E,F), fieldtype(F,string), bin(V,E,_). diff --git a/build/bundle.js b/build/bundle.js new file mode 100644 index 0000000..3902879 --- /dev/null +++ b/build/bundle.js @@ -0,0 +1,35941 @@ +'use strict'; + +Object.defineProperty(exports, '__esModule', { value: true }); + +function ascending(a, b) { + return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; +} + +function bisector(compare) { + if (compare.length === 1) compare = ascendingComparator(compare); + return { + left: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) < 0) lo = mid + 1; + else hi = mid; + } + return lo; + }, + right: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) > 0) hi = mid; + else lo = mid + 1; + } + return lo; + } + }; +} + +function ascendingComparator(f) { + return function(d, x) { + return ascending(f(d), x); + }; +} + +var ascendingBisect = bisector(ascending); + +function extent(values, valueof) { + let min; + let max; + if (valueof === undefined) { + for (const value of values) { + if (value != null) { + if (min === undefined) { + if (value >= value) min = max = value; + } else { + if (min > value) min = value; + if (max < value) max = value; + } + } + } + } else { + let index = -1; + for (let value of values) { + if ((value = valueof(value, ++index, values)) != null) { + if (min === undefined) { + if (value >= value) min = max = value; + } else { + if (min > value) min = value; + if (max < value) max = value; + } + } + } + } + return [min, max]; +} + +function accessor(fn, fields, name) { + fn.fields = fields || []; + fn.fname = name; + return fn; +} + +function accessorName(fn) { + return fn == null ? null : fn.fname; +} + +function accessorFields(fn) { + return fn == null ? null : fn.fields; +} + +function error(message) { + throw Error(message); +} + +function splitAccessPath(p) { + var path = [], + q = null, + b = 0, + n = p.length, + s = '', + i, j, c; + + p = p + ''; + + function push() { + path.push(s + p.substring(i, j)); + s = ''; + i = j + 1; + } + + for (i=j=0; j i) { + push(); + } else { + i = j + 1; + } + } else if (c === '[') { + if (j > i) push(); + b = i = j + 1; + } else if (c === ']') { + if (!b) error('Access path missing open bracket: ' + p); + if (b > 0) push(); + b = 0; + i = j + 1; + } + } + + if (b) error('Access path missing closing bracket: ' + p); + if (q) error('Access path missing closing quote: ' + p); + + if (j > i) { + j++; + push(); + } + + return path; +} + +var isArray = Array.isArray; + +function isObject(_) { + return _ === Object(_); +} + +function isString(_) { + return typeof _ === 'string'; +} + +function $(x) { + return isArray(x) ? '[' + x.map($) + ']' + : isObject(x) || isString(x) ? + // Output valid JSON and JS source strings. + // See http://timelessrepo.com/json-isnt-a-javascript-subset + JSON.stringify(x).replace('\u2028','\\u2028').replace('\u2029', '\\u2029') + : x; +} + +function field(field, name) { + var path = splitAccessPath(field), + code = 'return _[' + path.map($).join('][') + '];'; + + return accessor( + Function('_', code), + [(field = path.length===1 ? path[0] : field)], + name || field + ); +} + +var empty = []; + +var id = field('id'); + +var identity = accessor(function(_) { return _; }, empty, 'identity'); + +var zero = accessor(function() { return 0; }, empty, 'zero'); + +var one = accessor(function() { return 1; }, empty, 'one'); + +var truthy = accessor(function() { return true; }, empty, 'true'); + +var falsy = accessor(function() { return false; }, empty, 'false'); + +function log(method, level, input) { + var msg = [level].concat([].slice.call(input)); + console[method](...msg); // eslint-disable-line no-console +} + +var None = 0; +var Error$1 = 1; +var Warn = 2; +var Info = 3; +var Debug = 4; + +function logger(_, method) { + var level = _ || None; + return { + level: function(_) { + if (arguments.length) { + level = +_; + return this; + } else { + return level; + } + }, + error: function() { + if (level >= Error$1) log(method || 'error', 'ERROR', arguments); + return this; + }, + warn: function() { + if (level >= Warn) log(method || 'warn', 'WARN', arguments); + return this; + }, + info: function() { + if (level >= Info) log(method || 'log', 'INFO', arguments); + return this; + }, + debug: function() { + if (level >= Debug) log(method || 'log', 'DEBUG', arguments); + return this; + } + } +} + +function peek(array) { + return array[array.length - 1]; +} + +function toNumber(_) { + return _ == null || _ === '' ? null : +_; +} + +function exp(sign) { + return function(x) { return sign * Math.exp(x); }; +} + +function log$1(sign) { + return function(x) { return Math.log(sign * x); }; +} + +function symlog(c) { + return function(x) { return Math.sign(x) * Math.log1p(Math.abs(x / c)); }; +} + +function symexp(c) { + return function(x) { return Math.sign(x) * Math.expm1(Math.abs(x)) * c; }; +} + +function pow(exponent) { + return function(x) { + return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent); + }; +} + +function pan(domain, delta, lift, ground) { + var d0 = lift(domain[0]), + d1 = lift(peek(domain)), + dd = (d1 - d0) * delta; + + return [ + ground(d0 - dd), + ground(d1 - dd) + ]; +} + +function panLinear(domain, delta) { + return pan(domain, delta, toNumber, identity); +} + +function panLog(domain, delta) { + var sign = Math.sign(domain[0]); + return pan(domain, delta, log$1(sign), exp(sign)); +} + +function panPow(domain, delta, exponent) { + return pan(domain, delta, pow(exponent), pow(1/exponent)); +} + +function panSymlog(domain, delta, constant) { + return pan(domain, delta, symlog(constant), symexp(constant)); +} + +function zoom(domain, anchor, scale, lift, ground) { + var d0 = lift(domain[0]), + d1 = lift(peek(domain)), + da = anchor != null ? lift(anchor) : (d0 + d1) / 2; + + return [ + ground(da + (d0 - da) * scale), + ground(da + (d1 - da) * scale) + ]; +} + +function zoomLinear(domain, anchor, scale) { + return zoom(domain, anchor, scale, toNumber, identity); +} + +function zoomLog(domain, anchor, scale) { + var sign = Math.sign(domain[0]); + return zoom(domain, anchor, scale, log$1(sign), exp(sign)); +} + +function zoomPow(domain, anchor, scale, exponent) { + return zoom(domain, anchor, scale, pow(exponent), pow(1/exponent)); +} + +function zoomSymlog(domain, anchor, scale, constant) { + return zoom(domain, anchor, scale, symlog(constant), symexp(constant)); +} + +function quarter(date) { + return 1 + ~~(new Date(date).getMonth() / 3); +} + +function utcquarter(date) { + return 1 + ~~(new Date(date).getUTCMonth() / 3); +} + +function array(_) { + return _ != null ? (isArray(_) ? _ : [_]) : []; +} + +/** + * Span-preserving range clamp. If the span of the input range is less + * than (max - min) and an endpoint exceeds either the min or max value, + * the range is translated such that the span is preserved and one + * endpoint touches the boundary of the min/max range. + * If the span exceeds (max - min), the range [min, max] is returned. + */ +function clampRange(range, min, max) { + var lo = range[0], + hi = range[1], + span; + + if (hi < lo) { + span = hi; + hi = lo; + lo = span; + } + span = hi - lo; + + return span >= (max - min) + ? [min, max] + : [ + (lo = Math.min(Math.max(lo, min), max - span)), + lo + span + ]; +} + +function isFunction(_) { + return typeof _ === 'function'; +} + +function compare(fields, orders) { + var idx = [], + cmp = (fields = array(fields)).map(function(f, i) { + if (f == null) { + return null; + } else { + idx.push(i); + return isFunction(f) ? f + : splitAccessPath(f).map($).join(']['); + } + }), + n = idx.length - 1, + ord = array(orders), + code = 'var u,v;return ', + i, j, f, u, v, d, t, lt, gt; + + if (n < 0) return null; + + for (j=0; j<=n; ++j) { + i = idx[j]; + f = cmp[i]; + + if (isFunction(f)) { + d = 'f' + i; + u = '(u=this.' + d + '(a))'; + v = '(v=this.' + d + '(b))'; + (t = t || {})[d] = f; + } else { + u = '(u=a['+f+'])'; + v = '(v=b['+f+'])'; + } + + d = '((v=v instanceof Date?+v:v),(u=u instanceof Date?+u:u))'; + + if (ord[i] !== 'descending') { + gt = 1; + lt = -1; + } else { + gt = -1; + lt = 1; + } + + code += '(' + u+'<'+v+'||u==null)&&v!=null?' + lt + + ':(u>v||v==null)&&u!=null?' + gt + + ':'+d+'!==u&&v===v?' + lt + + ':v!==v&&u===u?' + gt + + (i < n ? ':' : ':0'); + } + + f = Function('a', 'b', code + ';'); + if (t) f = f.bind(t); + + fields = fields.reduce(function(map, field) { + if (isFunction(field)) { + (accessorFields(field) || []).forEach(function(_) { map[_] = 1; }); + } else if (field != null) { + map[field + ''] = 1; + } + return map; + }, {}); + + return accessor(f, Object.keys(fields)); +} + +function constant(_) { + return isFunction(_) ? _ : function() { return _; }; +} + +function debounce(delay, handler) { + var tid, evt; + + function callback() { + handler(evt); + tid = evt = null; + } + + return function(e) { + evt = e; + if (tid) clearTimeout(tid); + tid = setTimeout(callback, delay); + }; +} + +function extend(_) { + for (var x, k, i=1, len=arguments.length; i max) max = v; + } + } + } else { + // find first valid value + for (v = f(array[i]); v == null || v !== v; v = f(array[++i])); + min = max = v; + + // visit all other values + for (; i max) max = v; + } + } + } + } + + return [min, max]; +} + +function extentIndex(array, f) { + var i = -1, + n = array.length, + a, b, c, u, v; + + if (f == null) { + while (++i < n) { + b = array[i]; + if (b != null && b >= b) { + a = c = b; + break; + } + } + u = v = i; + while (++i < n) { + b = array[i]; + if (b != null) { + if (a > b) { + a = b; + u = i; + } + if (c < b) { + c = b; + v = i; + } + } + } + } else { + while (++i < n) { + b = f(array[i], i, array); + if (b != null && b >= b) { + a = c = b; + break; + } + } + u = v = i; + while (++i < n) { + b = f(array[i], i, array); + if (b != null) { + if (a > b) { + a = b; + u = i; + } + if (c < b) { + c = b; + v = i; + } + } + } + } + + return [u, v]; +} + +var NULL = {}; + +function fastmap(input) { + var obj = {}, + map, + test; + + function has(key) { + return obj.hasOwnProperty(key) && obj[key] !== NULL; + } + + map = { + size: 0, + empty: 0, + object: obj, + has: has, + get: function(key) { + return has(key) ? obj[key] : undefined; + }, + set: function(key, value) { + if (!has(key)) { + ++map.size; + if (obj[key] === NULL) --map.empty; + } + obj[key] = value; + return this; + }, + delete: function(key) { + if (has(key)) { + --map.size; + ++map.empty; + obj[key] = NULL; + } + return this; + }, + clear: function() { + map.size = map.empty = 0; + map.object = obj = {}; + }, + test: function(_) { + if (arguments.length) { + test = _; + return map; + } else { + return test; + } + }, + clean: function() { + var next = {}, + size = 0, + key, value; + for (key in obj) { + value = obj[key]; + if (value !== NULL && (!test || !test(value))) { + next[key] = value; + ++size; + } + } + map.size = size; + map.empty = 0; + map.object = (obj = next); + } + }; + + if (input) Object.keys(input).forEach(function(key) { + map.set(key, input[key]); + }); + + return map; +} + +function flush(range, value, threshold, left, right, center) { + if (!threshold && threshold !== 0) return center; + + var a = range[0], + b = peek(range), + t = +threshold, + l, r; + + // swap endpoints if range is reversed + if (b < a) { + l = a; a = b; b = l; + } + + // compare value to endpoints + l = Math.abs(value - a); + r = Math.abs(b - value); + + // adjust if value is within threshold distance of endpoint + return l < r && l <= t ? left : r <= t ? right : center; +} + +function inherits(child, parent) { + var proto = (child.prototype = Object.create(parent.prototype)); + proto.constructor = child; + return proto; +} + +/** + * Predicate that returns true if the value lies within the span + * of the given range. The left and right flags control the use + * of inclusive (true) or exclusive (false) comparisons. + */ +function inrange(value, range, left, right) { + var r0 = range[0], r1 = range[range.length-1], t; + if (r0 > r1) { + t = r0; + r0 = r1; + r1 = t; + } + left = left === undefined || left; + right = right === undefined || right; + + return (left ? r0 <= value : r0 < value) && + (right ? value <= r1 : value < r1); +} + +function isBoolean(_) { + return typeof _ === 'boolean'; +} + +function isDate(_) { + return Object.prototype.toString.call(_) === '[object Date]'; +} + +function isNumber(_) { + return typeof _ === 'number'; +} + +function isRegExp(_) { + return Object.prototype.toString.call(_) === '[object RegExp]'; +} + +function key(fields, flat) { + if (fields) { + fields = flat + ? array(fields).map(function(f) { return f.replace(/\\(.)/g, '$1'); }) + : array(fields); + } + + var fn = !(fields && fields.length) + ? function() { return ''; } + : Function('_', 'return \'\'+' + + fields.map(function(f) { + return '_[' + (flat + ? $(f) + : splitAccessPath(f).map($).join('][') + ) + ']'; + }).join('+\'|\'+') + ';'); + + return accessor(fn, fields, 'key'); +} + +function lerp(array, frac) { + const lo = array[0], + hi = peek(array), + f = +frac; + return !f ? lo : f === 1 ? hi : lo + f * (hi - lo); +} + +function merge(compare, array0, array1, output) { + var n0 = array0.length, + n1 = array1.length; + + if (!n1) return array0; + if (!n0) return array1; + + var merged = output || new array0.constructor(n0 + n1), + i0 = 0, i1 = 0, i = 0; + + for (; i0 0 + ? array1[i1++] + : array0[i0++]; + } + + for (; i0= 0) s += str; + return s; +} + +function pad(str, length, padchar, align) { + var c = padchar || ' ', + s = str + '', + n = length - s.length; + + return n <= 0 ? s + : align === 'left' ? repeat(c, n) + s + : align === 'center' ? repeat(c, ~~(n/2)) + s + repeat(c, Math.ceil(n/2)) + : s + repeat(c, n); +} + +/** + * Return the numerical span of an array: the difference between + * the last and first values. + */ +function span(array) { + return (peek(array) - array[0]) || 0; +} + +function toBoolean(_) { + return _ == null || _ === '' ? null : !_ || _ === 'false' || _ === '0' ? false : !!_; +} + +function defaultParser(_) { + return isNumber(_) ? _ : isDate(_) ? _ : Date.parse(_); +} + +function toDate(_, parser) { + parser = parser || defaultParser; + return _ == null || _ === '' ? null : parser(_); +} + +function toString(_) { + return _ == null || _ === '' ? null : _ + ''; +} + +function toSet(_) { + for (var s={}, i=0, n=_.length; i= 0) { + list.splice(idx, 1); + } + } + return list; + }; + + return list; +} + +/** + * Invoke and await a potentially async callback function. If + * an error occurs, trap it and route to Dataflow.error. + * @param {Dataflow} df - The dataflow instance + * @param {function} callback - A callback function to invoke + * and then await. The dataflow will be passed as the single + * argument to the function. + */ +async function asyncCallback(df, callback) { + try { await callback(df); } catch (err) { df.error(err); } +} + +var TUPLE_ID_KEY = Symbol('vega_id'), + TUPLE_ID = 1; + +/** + * Checks if an input value is a registered tuple. + * @param {*} t - The value to check. + * @return {boolean} True if the input is a tuple, false otherwise. + */ +function isTuple(t) { + return !!(t && tupleid(t)); +} + +/** + * Returns the id of a tuple. + * @param {object} t - The input tuple. + * @return {*} the tuple id. + */ +function tupleid(t) { + return t[TUPLE_ID_KEY]; +} + +/** + * Sets the id of a tuple. + * @param {object} t - The input tuple. + * @param {*} id - The id value to set. + * @return {object} the input tuple. + */ +function setid(t, id) { + t[TUPLE_ID_KEY] = id; + return t; +} + +/** + * Ingest an object or value as a data tuple. + * If the input value is an object, an id field will be added to it. For + * efficiency, the input object is modified directly. A copy is not made. + * If the input value is a literal, it will be wrapped in a new object + * instance, with the value accessible as the 'data' property. + * @param datum - The value to ingest. + * @return {object} The ingested data tuple. + */ +function ingest(datum) { + var t = (datum === Object(datum)) ? datum : {data: datum}; + return tupleid(t) ? t : setid(t, TUPLE_ID++); +} + +/** + * Given a source tuple, return a derived copy. + * @param {object} t - The source tuple. + * @return {object} The derived tuple. + */ +function derive(t) { + return rederive(t, ingest({})); +} + +/** + * Rederive a derived tuple by copying values from the source tuple. + * @param {object} t - The source tuple. + * @param {object} d - The derived tuple. + * @return {object} The derived tuple. + */ +function rederive(t, d) { + for (var k in t) d[k] = t[k]; + return d; +} + +/** + * Replace an existing tuple with a new tuple. + * @param {object} t - The existing data tuple. + * @param {object} d - The new tuple that replaces the old. + * @return {object} The new tuple. + */ +function replace(t, d) { + return setid(d, tupleid(t)); +} + +function isChangeSet(v) { + return v && v.constructor === changeset; +} + +function changeset() { + var add = [], // insert tuples + rem = [], // remove tuples + mod = [], // modify tuples + remp = [], // remove by predicate + modp = [], // modify by predicate + reflow = false; + + return { + constructor: changeset, + insert: function(t) { + var d = array(t), i = 0, n = d.length; + for (; i 0) { + modify(t, f, m.value); + pulse.modifies(f); + } + } + + // process predicate-based modifications + for (i=0, n=modp.length; i 0) { + modify(t, m.field, m.value); + } + }); + pulse.modifies(m.field); + } + + // upon reflow request, populate mod with all non-removed tuples + // otherwise, populate mod with modified tuples only + if (reflow) { + pulse.mod = rem.length || remp.length + ? tuples.filter(function(t) { return cur[tupleid(t)] > 0; }) + : tuples.slice(); + } else { + for (id in out) pulse.mod.push(out[id]); + } + + return pulse; + } + }; +} + +var CACHE = '_:mod:_'; + +/** + * Hash that tracks modifications to assigned values. + * Callers *must* use the set method to update values. + */ +function Parameters() { + Object.defineProperty(this, CACHE, {writable: true, value: {}}); +} + +var prototype = Parameters.prototype; + +/** + * Set a parameter value. If the parameter value changes, the parameter + * will be recorded as modified. + * @param {string} name - The parameter name. + * @param {number} index - The index into an array-value parameter. Ignored if + * the argument is undefined, null or less than zero. + * @param {*} value - The parameter value to set. + * @param {boolean} [force=false] - If true, records the parameter as modified + * even if the value is unchanged. + * @return {Parameters} - This parameter object. + */ +prototype.set = function(name, index, value, force) { + var o = this, + v = o[name], + mod = o[CACHE]; + + if (index != null && index >= 0) { + if (v[index] !== value || force) { + v[index] = value; + mod[index + ':' + name] = -1; + mod[name] = -1; + } + } else if (v !== value || force) { + o[name] = value; + mod[name] = isArray(value) ? 1 + value.length : -1; + } + + return o; +}; + +/** + * Tests if one or more parameters has been modified. If invoked with no + * arguments, returns true if any parameter value has changed. If the first + * argument is array, returns trues if any parameter name in the array has + * changed. Otherwise, tests if the given name and optional array index has + * changed. + * @param {string} name - The parameter name to test. + * @param {number} [index=undefined] - The parameter array index to test. + * @return {boolean} - Returns true if a queried parameter was modified. + */ +prototype.modified = function(name, index) { + var mod = this[CACHE], k; + if (!arguments.length) { + for (k in mod) { if (mod[k]) return true; } + return false; + } else if (isArray(name)) { + for (k=0; k= 0) + ? (index + 1 < mod[name] || !!mod[index + ':' + name]) + : !!mod[name]; +}; + +/** + * Clears the modification records. After calling this method, + * all parameters are considered unmodified. + */ +prototype.clear = function() { + this[CACHE] = {}; + return this; +}; + +var OP_ID = 0; +var PULSE = 'pulse'; +var NO_PARAMS = new Parameters(); + +// Boolean Flags +var SKIP = 1, + MODIFIED = 2; + +/** + * An Operator is a processing node in a dataflow graph. + * Each operator stores a value and an optional value update function. + * Operators can accept a hash of named parameters. Parameter values can + * either be direct (JavaScript literals, arrays, objects) or indirect + * (other operators whose values will be pulled dynamically). Operators + * included as parameters will have this operator added as a dependency. + * @constructor + * @param {*} [init] - The initial value for this operator. + * @param {function(object, Pulse)} [update] - An update function. Upon + * evaluation of this operator, the update function will be invoked and the + * return value will be used as the new value of this operator. + * @param {object} [params] - The parameters for this operator. + * @param {boolean} [react=true] - Flag indicating if this operator should + * listen for changes to upstream operators included as parameters. + * @see parameters + */ +function Operator(init, update, params, react) { + this.id = ++OP_ID; + this.value = init; + this.stamp = -1; + this.rank = -1; + this.qrank = -1; + this.flags = 0; + + if (update) { + this._update = update; + } + if (params) this.parameters(params, react); +} + +var prototype$1 = Operator.prototype; + +/** + * Returns a list of target operators dependent on this operator. + * If this list does not exist, it is created and then returned. + * @return {UniqueList} + */ +prototype$1.targets = function() { + return this._targets || (this._targets = UniqueList(id)); +}; + +/** + * Sets the value of this operator. + * @param {*} value - the value to set. + * @return {Number} Returns 1 if the operator value has changed + * according to strict equality, returns 0 otherwise. + */ +prototype$1.set = function(value) { + if (this.value !== value) { + this.value = value; + return 1; + } else { + return 0; + } +}; + +function flag(bit) { + return function(state) { + var f = this.flags; + if (arguments.length === 0) return !!(f & bit); + this.flags = state ? (f | bit) : (f & ~bit); + return this; + }; +} + +/** + * Indicates that operator evaluation should be skipped on the next pulse. + * This operator will still propagate incoming pulses, but its update function + * will not be invoked. The skip flag is reset after every pulse, so calling + * this method will affect processing of the next pulse only. + */ +prototype$1.skip = flag(SKIP); + +/** + * Indicates that this operator's value has been modified on its most recent + * pulse. Normally modification is checked via strict equality; however, in + * some cases it is more efficient to update the internal state of an object. + * In those cases, the modified flag can be used to trigger propagation. Once + * set, the modification flag persists across pulses until unset. The flag can + * be used with the last timestamp to test if a modification is recent. + */ +prototype$1.modified = flag(MODIFIED); + +/** + * Sets the parameters for this operator. The parameter values are analyzed for + * operator instances. If found, this operator will be added as a dependency + * of the parameterizing operator. Operator values are dynamically marshalled + * from each operator parameter prior to evaluation. If a parameter value is + * an array, the array will also be searched for Operator instances. However, + * the search does not recurse into sub-arrays or object properties. + * @param {object} params - A hash of operator parameters. + * @param {boolean} [react=true] - A flag indicating if this operator should + * automatically update (react) when parameter values change. In other words, + * this flag determines if the operator registers itself as a listener on + * any upstream operators included in the parameters. + * @param {boolean} [initonly=false] - A flag indicating if this operator + * should calculate an update only upon its initiatal evaluation, then + * deregister dependencies and suppress all future update invocations. + * @return {Operator[]} - An array of upstream dependencies. + */ +prototype$1.parameters = function(params, react, initonly) { + react = react !== false; + var self = this, + argval = (self._argval = self._argval || new Parameters()), + argops = (self._argops = self._argops || []), + deps = [], + name, value, n, i; + + function add(name, index, value) { + if (value instanceof Operator) { + if (value !== self) { + if (react) value.targets().add(self); + deps.push(value); + } + argops.push({op:value, name:name, index:index}); + } else { + argval.set(name, index, value); + } + } + + for (name in params) { + value = params[name]; + + if (name === PULSE) { + array(value).forEach(function(op) { + if (!(op instanceof Operator)) { + error('Pulse parameters must be operator instances.'); + } else if (op !== self) { + op.targets().add(self); + deps.push(op); + } + }); + self.source = value; + } else if (isArray(value)) { + argval.set(name, -1, Array(n = value.length)); + for (i=0; i} - The source operators that should propagate + * to the target operator. + */ +function connect(target, sources) { + var targetRank = target.rank, i, n; + + for (i=0, n=sources.length; i pause) { + t = now; + return 1; + } else { + return 0; + } + }); +}; + +prototype$2.debounce = function(delay) { + var s = stream(); + + this.targets().add(stream(null, null, + debounce(delay, function(e) { + var df = e.dataflow; + s.receive(e); + if (df && df.run) df.run(); + }) + )); + + return s; +}; + +prototype$2.between = function(a, b) { + var active = false; + a.targets().add(stream(null, null, function() { active = true; })); + b.targets().add(stream(null, null, function() { active = false; })); + return this.filter(function() { return active; }); +}; + +/** + * Create a new event stream from an event source. + * @param {object} source - The event source to monitor. The input must + * support the addEventListener method. + * @param {string} type - The event type. + * @param {function(object): boolean} [filter] - Event filter function. + * @param {function(object): *} [apply] - Event application function. + * If provided, this function will be invoked and the result will be + * used as the downstream event value. + * @return {EventStream} + */ +function events(source, type, filter, apply) { + var df = this, + s = stream(filter, apply), + send = function(e) { + e.dataflow = df; + try { + s.receive(e); + } catch (error) { + df.error(error); + } finally { + df.run(); + } + }, + sources; + + if (typeof source === 'string' && typeof document !== 'undefined') { + sources = document.querySelectorAll(source); + } else { + sources = array(source); + } + + for (var i=0, n=sources.length; i 9999 ? "+" + pad$1(year, 6) + : pad$1(year, 4); +} + +function formatDate(date) { + var hours = date.getUTCHours(), + minutes = date.getUTCMinutes(), + seconds = date.getUTCSeconds(), + milliseconds = date.getUTCMilliseconds(); + return isNaN(date) ? "Invalid Date" + : formatYear(date.getUTCFullYear(), 4) + "-" + pad$1(date.getUTCMonth() + 1, 2) + "-" + pad$1(date.getUTCDate(), 2) + + (milliseconds ? "T" + pad$1(hours, 2) + ":" + pad$1(minutes, 2) + ":" + pad$1(seconds, 2) + "." + pad$1(milliseconds, 3) + "Z" + : seconds ? "T" + pad$1(hours, 2) + ":" + pad$1(minutes, 2) + ":" + pad$1(seconds, 2) + "Z" + : minutes || hours ? "T" + pad$1(hours, 2) + ":" + pad$1(minutes, 2) + "Z" + : ""); +} + +function dsvFormat(delimiter) { + var reFormat = new RegExp("[\"" + delimiter + "\n\r]"), + DELIMITER = delimiter.charCodeAt(0); + + function parse(text, f) { + var convert, columns, rows = parseRows(text, function(row, i) { + if (convert) return convert(row, i - 1); + columns = row, convert = f ? customConverter(row, f) : objectConverter(row); + }); + rows.columns = columns || []; + return rows; + } + + function parseRows(text, f) { + var rows = [], // output rows + N = text.length, + I = 0, // current character index + n = 0, // current line number + t, // current token + eof = N <= 0, // current token followed by EOF? + eol = false; // current token followed by EOL? + + // Strip the trailing newline. + if (text.charCodeAt(N - 1) === NEWLINE) --N; + if (text.charCodeAt(N - 1) === RETURN) --N; + + function token() { + if (eof) return EOF; + if (eol) return eol = false, EOL; + + // Unescape quotes. + var i, j = I, c; + if (text.charCodeAt(j) === QUOTE) { + while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE); + if ((i = I) >= N) eof = true; + else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true; + else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; } + return text.slice(j + 1, i - 1).replace(/""/g, "\""); + } + + // Find next delimiter or newline. + while (I < N) { + if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true; + else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; } + else if (c !== DELIMITER) continue; + return text.slice(j, i); + } + + // Return last token before EOF. + return eof = true, text.slice(j, N); + } + + while ((t = token()) !== EOF) { + var row = []; + while (t !== EOL && t !== EOF) row.push(t), t = token(); + if (f && (row = f(row, n++)) == null) continue; + rows.push(row); + } + + return rows; + } + + function preformatBody(rows, columns) { + return rows.map(function(row) { + return columns.map(function(column) { + return formatValue(row[column]); + }).join(delimiter); + }); + } + + function format(rows, columns) { + if (columns == null) columns = inferColumns(rows); + return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join("\n"); + } + + function formatBody(rows, columns) { + if (columns == null) columns = inferColumns(rows); + return preformatBody(rows, columns).join("\n"); + } + + function formatRows(rows) { + return rows.map(formatRow).join("\n"); + } + + function formatRow(row) { + return row.map(formatValue).join(delimiter); + } + + function formatValue(value) { + return value == null ? "" + : value instanceof Date ? formatDate(value) + : reFormat.test(value += "") ? "\"" + value.replace(/"/g, "\"\"") + "\"" + : value; + } + + return { + parse: parse, + parseRows: parseRows, + format: format, + formatBody: formatBody, + formatRows: formatRows + }; +} + +var csv = dsvFormat(","); + +var tsv = dsvFormat("\t"); + +function delimitedFormat(delimiter) { + const parse = function(data, format) { + const delim = {delimiter: delimiter}; + return dsv(data, format ? extend(format, delim) : delim); + }; + + parse.responseType = 'text'; + + return parse; +} + +function dsv(data, format) { + if (format.header) { + data = format.header + .map($) + .join(format.delimiter) + '\n' + data; + } + return dsvFormat(format.delimiter).parse(data + ''); +} + +dsv.responseType = 'text'; + +function isBuffer(_) { + return (typeof Buffer === 'function' && isFunction(Buffer.isBuffer)) + ? Buffer.isBuffer(_) : false; +} + +function json(data, format) { + const prop = (format && format.property) ? field(format.property) : identity; + return isObject(data) && !isBuffer(data) + ? parseJSON(prop(data)) + : prop(JSON.parse(data)); +} + +json.responseType = 'json'; + +function parseJSON(data, format) { + return (format && format.copy) + ? JSON.parse(JSON.stringify(data)) + : data; +} + +function identity$1(x) { + return x; +} + +function transform(transform) { + if (transform == null) return identity$1; + var x0, + y0, + kx = transform.scale[0], + ky = transform.scale[1], + dx = transform.translate[0], + dy = transform.translate[1]; + return function(input, i) { + if (!i) x0 = y0 = 0; + var j = 2, n = input.length, output = new Array(n); + output[0] = (x0 += input[0]) * kx + dx; + output[1] = (y0 += input[1]) * ky + dy; + while (j < n) output[j] = input[j], ++j; + return output; + }; +} + +function reverse(array, n) { + var t, j = array.length, i = j - n; + while (i < --j) t = array[i], array[i++] = array[j], array[j] = t; +} + +function feature(topology, o) { + return o.type === "GeometryCollection" + ? {type: "FeatureCollection", features: o.geometries.map(function(o) { return feature$1(topology, o); })} + : feature$1(topology, o); +} + +function feature$1(topology, o) { + var id = o.id, + bbox = o.bbox, + properties = o.properties == null ? {} : o.properties, + geometry = object(topology, o); + return id == null && bbox == null ? {type: "Feature", properties: properties, geometry: geometry} + : bbox == null ? {type: "Feature", id: id, properties: properties, geometry: geometry} + : {type: "Feature", id: id, bbox: bbox, properties: properties, geometry: geometry}; +} + +function object(topology, o) { + var transformPoint = transform(topology.transform), + arcs = topology.arcs; + + function arc(i, points) { + if (points.length) points.pop(); + for (var a = arcs[i < 0 ? ~i : i], k = 0, n = a.length; k < n; ++k) { + points.push(transformPoint(a[k], k)); + } + if (i < 0) reverse(points, n); + } + + function point(p) { + return transformPoint(p); + } + + function line(arcs) { + var points = []; + for (var i = 0, n = arcs.length; i < n; ++i) arc(arcs[i], points); + if (points.length < 2) points.push(points[0]); // This should never happen per the specification. + return points; + } + + function ring(arcs) { + var points = line(arcs); + while (points.length < 4) points.push(points[0]); // This may happen if an arc has only two points. + return points; + } + + function polygon(arcs) { + return arcs.map(ring); + } + + function geometry(o) { + var type = o.type, coordinates; + switch (type) { + case "GeometryCollection": return {type: type, geometries: o.geometries.map(geometry)}; + case "Point": coordinates = point(o.coordinates); break; + case "MultiPoint": coordinates = o.coordinates.map(point); break; + case "LineString": coordinates = line(o.arcs); break; + case "MultiLineString": coordinates = o.arcs.map(line); break; + case "Polygon": coordinates = polygon(o.arcs); break; + case "MultiPolygon": coordinates = o.arcs.map(polygon); break; + default: return null; + } + return {type: type, coordinates: coordinates}; + } + + return geometry(o); +} + +function stitch(topology, arcs) { + var stitchedArcs = {}, + fragmentByStart = {}, + fragmentByEnd = {}, + fragments = [], + emptyIndex = -1; + + // Stitch empty arcs first, since they may be subsumed by other arcs. + arcs.forEach(function(i, j) { + var arc = topology.arcs[i < 0 ? ~i : i], t; + if (arc.length < 3 && !arc[1][0] && !arc[1][1]) { + t = arcs[++emptyIndex], arcs[emptyIndex] = i, arcs[j] = t; + } + }); + + arcs.forEach(function(i) { + var e = ends(i), + start = e[0], + end = e[1], + f, g; + + if (f = fragmentByEnd[start]) { + delete fragmentByEnd[f.end]; + f.push(i); + f.end = end; + if (g = fragmentByStart[end]) { + delete fragmentByStart[g.start]; + var fg = g === f ? f : f.concat(g); + fragmentByStart[fg.start = f.start] = fragmentByEnd[fg.end = g.end] = fg; + } else { + fragmentByStart[f.start] = fragmentByEnd[f.end] = f; + } + } else if (f = fragmentByStart[end]) { + delete fragmentByStart[f.start]; + f.unshift(i); + f.start = start; + if (g = fragmentByEnd[start]) { + delete fragmentByEnd[g.end]; + var gf = g === f ? f : g.concat(f); + fragmentByStart[gf.start = g.start] = fragmentByEnd[gf.end = f.end] = gf; + } else { + fragmentByStart[f.start] = fragmentByEnd[f.end] = f; + } + } else { + f = [i]; + fragmentByStart[f.start = start] = fragmentByEnd[f.end = end] = f; + } + }); + + function ends(i) { + var arc = topology.arcs[i < 0 ? ~i : i], p0 = arc[0], p1; + if (topology.transform) p1 = [0, 0], arc.forEach(function(dp) { p1[0] += dp[0], p1[1] += dp[1]; }); + else p1 = arc[arc.length - 1]; + return i < 0 ? [p1, p0] : [p0, p1]; + } + + function flush(fragmentByEnd, fragmentByStart) { + for (var k in fragmentByEnd) { + var f = fragmentByEnd[k]; + delete fragmentByStart[f.start]; + delete f.start; + delete f.end; + f.forEach(function(i) { stitchedArcs[i < 0 ? ~i : i] = 1; }); + fragments.push(f); + } + } + + flush(fragmentByEnd, fragmentByStart); + flush(fragmentByStart, fragmentByEnd); + arcs.forEach(function(i) { if (!stitchedArcs[i < 0 ? ~i : i]) fragments.push([i]); }); + + return fragments; +} + +function mesh(topology) { + return object(topology, meshArcs.apply(this, arguments)); +} + +function meshArcs(topology, object, filter) { + var arcs, i, n; + if (arguments.length > 1) arcs = extractArcs(topology, object, filter); + else for (i = 0, arcs = new Array(n = topology.arcs.length); i < n; ++i) arcs[i] = i; + return {type: "MultiLineString", arcs: stitch(topology, arcs)}; +} + +function extractArcs(topology, object, filter) { + var arcs = [], + geomsByArc = [], + geom; + + function extract0(i) { + var j = i < 0 ? ~i : i; + (geomsByArc[j] || (geomsByArc[j] = [])).push({i: i, g: geom}); + } + + function extract1(arcs) { + arcs.forEach(extract0); + } + + function extract2(arcs) { + arcs.forEach(extract1); + } + + function extract3(arcs) { + arcs.forEach(extract2); + } + + function geometry(o) { + switch (geom = o, o.type) { + case "GeometryCollection": o.geometries.forEach(geometry); break; + case "LineString": extract1(o.arcs); break; + case "MultiLineString": case "Polygon": extract2(o.arcs); break; + case "MultiPolygon": extract3(o.arcs); break; + } + } + + geometry(object); + + geomsByArc.forEach(filter == null + ? function(geoms) { arcs.push(geoms[0].i); } + : function(geoms) { if (filter(geoms[0].g, geoms[geoms.length - 1].g)) arcs.push(geoms[0].i); }); + + return arcs; +} + +const filters = { + interior: (a, b) => a !== b, + exterior: (a, b) => a === b +}; + +function topojson(data, format) { + let method, object, property, filter; + data = json(data, format); + + if (format && format.feature) { + method = feature; + property = format.feature; + } else if (format && format.mesh) { + method = mesh; + property = format.mesh; + filter = filters[format.filter]; + } else { + error('Missing TopoJSON feature or mesh parameter.'); + } + + object = (object = data.objects[property]) + ? method(data, object, filter) + : error('Invalid TopoJSON object: ' + property); + + return object && object.features || [object]; +} + +topojson.responseType = 'json'; + +const format = { + dsv: dsv, + csv: delimitedFormat(','), + tsv: delimitedFormat('\t'), + json: json, + topojson: topojson +}; + +function formats(name, reader) { + if (arguments.length > 1) { + format[name] = reader; + return this; + } else { + return format.hasOwnProperty(name) ? format[name] : null; + } +} + +function responseType(type) { + const f = formats(type); + return f && f.responseType || 'text'; +} + +var t0 = new Date, + t1 = new Date; + +function newInterval(floori, offseti, count, field) { + + function interval(date) { + return floori(date = new Date(+date)), date; + } + + interval.floor = interval; + + interval.ceil = function(date) { + return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date; + }; + + interval.round = function(date) { + var d0 = interval(date), + d1 = interval.ceil(date); + return date - d0 < d1 - date ? d0 : d1; + }; + + interval.offset = function(date, step) { + return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date; + }; + + interval.range = function(start, stop, step) { + var range = [], previous; + start = interval.ceil(start); + step = step == null ? 1 : Math.floor(step); + if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date + do range.push(previous = new Date(+start)), offseti(start, step), floori(start); + while (previous < start && start < stop); + return range; + }; + + interval.filter = function(test) { + return newInterval(function(date) { + if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1); + }, function(date, step) { + if (date >= date) { + if (step < 0) while (++step <= 0) { + while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty + } else while (--step >= 0) { + while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty + } + } + }); + }; + + if (count) { + interval.count = function(start, end) { + t0.setTime(+start), t1.setTime(+end); + floori(t0), floori(t1); + return Math.floor(count(t0, t1)); + }; + + interval.every = function(step) { + step = Math.floor(step); + return !isFinite(step) || !(step > 0) ? null + : !(step > 1) ? interval + : interval.filter(field + ? function(d) { return field(d) % step === 0; } + : function(d) { return interval.count(0, d) % step === 0; }); + }; + } + + return interval; +} + +var millisecond = newInterval(function() { + // noop +}, function(date, step) { + date.setTime(+date + step); +}, function(start, end) { + return end - start; +}); + +// An optimized implementation for this simple case. +millisecond.every = function(k) { + k = Math.floor(k); + if (!isFinite(k) || !(k > 0)) return null; + if (!(k > 1)) return millisecond; + return newInterval(function(date) { + date.setTime(Math.floor(date / k) * k); + }, function(date, step) { + date.setTime(+date + step * k); + }, function(start, end) { + return (end - start) / k; + }); +}; + +var durationSecond = 1e3; +var durationMinute = 6e4; +var durationHour = 36e5; +var durationDay = 864e5; +var durationWeek = 6048e5; + +var second = newInterval(function(date) { + date.setTime(date - date.getMilliseconds()); +}, function(date, step) { + date.setTime(+date + step * durationSecond); +}, function(start, end) { + return (end - start) / durationSecond; +}, function(date) { + return date.getUTCSeconds(); +}); + +var minute = newInterval(function(date) { + date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond); +}, function(date, step) { + date.setTime(+date + step * durationMinute); +}, function(start, end) { + return (end - start) / durationMinute; +}, function(date) { + return date.getMinutes(); +}); + +var hour = newInterval(function(date) { + date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute); +}, function(date, step) { + date.setTime(+date + step * durationHour); +}, function(start, end) { + return (end - start) / durationHour; +}, function(date) { + return date.getHours(); +}); + +var day = newInterval(function(date) { + date.setHours(0, 0, 0, 0); +}, function(date, step) { + date.setDate(date.getDate() + step); +}, function(start, end) { + return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay; +}, function(date) { + return date.getDate() - 1; +}); + +function weekday(i) { + return newInterval(function(date) { + date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7); + date.setHours(0, 0, 0, 0); + }, function(date, step) { + date.setDate(date.getDate() + step * 7); + }, function(start, end) { + return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek; + }); +} + +var sunday = weekday(0); +var monday = weekday(1); +var tuesday = weekday(2); +var wednesday = weekday(3); +var thursday = weekday(4); +var friday = weekday(5); +var saturday = weekday(6); + +var month = newInterval(function(date) { + date.setDate(1); + date.setHours(0, 0, 0, 0); +}, function(date, step) { + date.setMonth(date.getMonth() + step); +}, function(start, end) { + return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12; +}, function(date) { + return date.getMonth(); +}); + +var year = newInterval(function(date) { + date.setMonth(0, 1); + date.setHours(0, 0, 0, 0); +}, function(date, step) { + date.setFullYear(date.getFullYear() + step); +}, function(start, end) { + return end.getFullYear() - start.getFullYear(); +}, function(date) { + return date.getFullYear(); +}); + +// An optimized implementation for this simple case. +year.every = function(k) { + return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) { + date.setFullYear(Math.floor(date.getFullYear() / k) * k); + date.setMonth(0, 1); + date.setHours(0, 0, 0, 0); + }, function(date, step) { + date.setFullYear(date.getFullYear() + step * k); + }); +}; + +var utcMinute = newInterval(function(date) { + date.setUTCSeconds(0, 0); +}, function(date, step) { + date.setTime(+date + step * durationMinute); +}, function(start, end) { + return (end - start) / durationMinute; +}, function(date) { + return date.getUTCMinutes(); +}); + +var utcHour = newInterval(function(date) { + date.setUTCMinutes(0, 0, 0); +}, function(date, step) { + date.setTime(+date + step * durationHour); +}, function(start, end) { + return (end - start) / durationHour; +}, function(date) { + return date.getUTCHours(); +}); + +var utcDay = newInterval(function(date) { + date.setUTCHours(0, 0, 0, 0); +}, function(date, step) { + date.setUTCDate(date.getUTCDate() + step); +}, function(start, end) { + return (end - start) / durationDay; +}, function(date) { + return date.getUTCDate() - 1; +}); + +function utcWeekday(i) { + return newInterval(function(date) { + date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7); + date.setUTCHours(0, 0, 0, 0); + }, function(date, step) { + date.setUTCDate(date.getUTCDate() + step * 7); + }, function(start, end) { + return (end - start) / durationWeek; + }); +} + +var utcSunday = utcWeekday(0); +var utcMonday = utcWeekday(1); +var utcTuesday = utcWeekday(2); +var utcWednesday = utcWeekday(3); +var utcThursday = utcWeekday(4); +var utcFriday = utcWeekday(5); +var utcSaturday = utcWeekday(6); + +var utcMonth = newInterval(function(date) { + date.setUTCDate(1); + date.setUTCHours(0, 0, 0, 0); +}, function(date, step) { + date.setUTCMonth(date.getUTCMonth() + step); +}, function(start, end) { + return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12; +}, function(date) { + return date.getUTCMonth(); +}); + +var utcYear = newInterval(function(date) { + date.setUTCMonth(0, 1); + date.setUTCHours(0, 0, 0, 0); +}, function(date, step) { + date.setUTCFullYear(date.getUTCFullYear() + step); +}, function(start, end) { + return end.getUTCFullYear() - start.getUTCFullYear(); +}, function(date) { + return date.getUTCFullYear(); +}); + +// An optimized implementation for this simple case. +utcYear.every = function(k) { + return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) { + date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k); + date.setUTCMonth(0, 1); + date.setUTCHours(0, 0, 0, 0); + }, function(date, step) { + date.setUTCFullYear(date.getUTCFullYear() + step * k); + }); +}; + +function localDate(d) { + if (0 <= d.y && d.y < 100) { + var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L); + date.setFullYear(d.y); + return date; + } + return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L); +} + +function utcDate(d) { + if (0 <= d.y && d.y < 100) { + var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L)); + date.setUTCFullYear(d.y); + return date; + } + return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L)); +} + +function newYear(y) { + return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0}; +} + +function formatLocale(locale) { + var locale_dateTime = locale.dateTime, + locale_date = locale.date, + locale_time = locale.time, + locale_periods = locale.periods, + locale_weekdays = locale.days, + locale_shortWeekdays = locale.shortDays, + locale_months = locale.months, + locale_shortMonths = locale.shortMonths; + + var periodRe = formatRe(locale_periods), + periodLookup = formatLookup(locale_periods), + weekdayRe = formatRe(locale_weekdays), + weekdayLookup = formatLookup(locale_weekdays), + shortWeekdayRe = formatRe(locale_shortWeekdays), + shortWeekdayLookup = formatLookup(locale_shortWeekdays), + monthRe = formatRe(locale_months), + monthLookup = formatLookup(locale_months), + shortMonthRe = formatRe(locale_shortMonths), + shortMonthLookup = formatLookup(locale_shortMonths); + + var formats = { + "a": formatShortWeekday, + "A": formatWeekday, + "b": formatShortMonth, + "B": formatMonth, + "c": null, + "d": formatDayOfMonth, + "e": formatDayOfMonth, + "f": formatMicroseconds, + "H": formatHour24, + "I": formatHour12, + "j": formatDayOfYear, + "L": formatMilliseconds, + "m": formatMonthNumber, + "M": formatMinutes, + "p": formatPeriod, + "Q": formatUnixTimestamp, + "s": formatUnixTimestampSeconds, + "S": formatSeconds, + "u": formatWeekdayNumberMonday, + "U": formatWeekNumberSunday, + "V": formatWeekNumberISO, + "w": formatWeekdayNumberSunday, + "W": formatWeekNumberMonday, + "x": null, + "X": null, + "y": formatYear$1, + "Y": formatFullYear, + "Z": formatZone, + "%": formatLiteralPercent + }; + + var utcFormats = { + "a": formatUTCShortWeekday, + "A": formatUTCWeekday, + "b": formatUTCShortMonth, + "B": formatUTCMonth, + "c": null, + "d": formatUTCDayOfMonth, + "e": formatUTCDayOfMonth, + "f": formatUTCMicroseconds, + "H": formatUTCHour24, + "I": formatUTCHour12, + "j": formatUTCDayOfYear, + "L": formatUTCMilliseconds, + "m": formatUTCMonthNumber, + "M": formatUTCMinutes, + "p": formatUTCPeriod, + "Q": formatUnixTimestamp, + "s": formatUnixTimestampSeconds, + "S": formatUTCSeconds, + "u": formatUTCWeekdayNumberMonday, + "U": formatUTCWeekNumberSunday, + "V": formatUTCWeekNumberISO, + "w": formatUTCWeekdayNumberSunday, + "W": formatUTCWeekNumberMonday, + "x": null, + "X": null, + "y": formatUTCYear, + "Y": formatUTCFullYear, + "Z": formatUTCZone, + "%": formatLiteralPercent + }; + + var parses = { + "a": parseShortWeekday, + "A": parseWeekday, + "b": parseShortMonth, + "B": parseMonth, + "c": parseLocaleDateTime, + "d": parseDayOfMonth, + "e": parseDayOfMonth, + "f": parseMicroseconds, + "H": parseHour24, + "I": parseHour24, + "j": parseDayOfYear, + "L": parseMilliseconds, + "m": parseMonthNumber, + "M": parseMinutes, + "p": parsePeriod, + "Q": parseUnixTimestamp, + "s": parseUnixTimestampSeconds, + "S": parseSeconds, + "u": parseWeekdayNumberMonday, + "U": parseWeekNumberSunday, + "V": parseWeekNumberISO, + "w": parseWeekdayNumberSunday, + "W": parseWeekNumberMonday, + "x": parseLocaleDate, + "X": parseLocaleTime, + "y": parseYear, + "Y": parseFullYear, + "Z": parseZone, + "%": parseLiteralPercent + }; + + // These recursive directive definitions must be deferred. + formats.x = newFormat(locale_date, formats); + formats.X = newFormat(locale_time, formats); + formats.c = newFormat(locale_dateTime, formats); + utcFormats.x = newFormat(locale_date, utcFormats); + utcFormats.X = newFormat(locale_time, utcFormats); + utcFormats.c = newFormat(locale_dateTime, utcFormats); + + function newFormat(specifier, formats) { + return function(date) { + var string = [], + i = -1, + j = 0, + n = specifier.length, + c, + pad, + format; + + if (!(date instanceof Date)) date = new Date(+date); + + while (++i < n) { + if (specifier.charCodeAt(i) === 37) { + string.push(specifier.slice(j, i)); + if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i); + else pad = c === "e" ? " " : "0"; + if (format = formats[c]) c = format(date, pad); + string.push(c); + j = i + 1; + } + } + + string.push(specifier.slice(j, i)); + return string.join(""); + }; + } + + function newParse(specifier, newDate) { + return function(string) { + var d = newYear(1900), + i = parseSpecifier(d, specifier, string += "", 0), + week, day$1; + if (i != string.length) return null; + + // If a UNIX timestamp is specified, return it. + if ("Q" in d) return new Date(d.Q); + + // The am-pm flag is 0 for AM, and 1 for PM. + if ("p" in d) d.H = d.H % 12 + d.p * 12; + + // Convert day-of-week and week-of-year to day-of-year. + if ("V" in d) { + if (d.V < 1 || d.V > 53) return null; + if (!("w" in d)) d.w = 1; + if ("Z" in d) { + week = utcDate(newYear(d.y)), day$1 = week.getUTCDay(); + week = day$1 > 4 || day$1 === 0 ? utcMonday.ceil(week) : utcMonday(week); + week = utcDay.offset(week, (d.V - 1) * 7); + d.y = week.getUTCFullYear(); + d.m = week.getUTCMonth(); + d.d = week.getUTCDate() + (d.w + 6) % 7; + } else { + week = newDate(newYear(d.y)), day$1 = week.getDay(); + week = day$1 > 4 || day$1 === 0 ? monday.ceil(week) : monday(week); + week = day.offset(week, (d.V - 1) * 7); + d.y = week.getFullYear(); + d.m = week.getMonth(); + d.d = week.getDate() + (d.w + 6) % 7; + } + } else if ("W" in d || "U" in d) { + if (!("w" in d)) d.w = "u" in d ? d.u % 7 : "W" in d ? 1 : 0; + day$1 = "Z" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay(); + d.m = 0; + d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day$1 + 5) % 7 : d.w + d.U * 7 - (day$1 + 6) % 7; + } + + // If a time zone is specified, all fields are interpreted as UTC and then + // offset according to the specified time zone. + if ("Z" in d) { + d.H += d.Z / 100 | 0; + d.M += d.Z % 100; + return utcDate(d); + } + + // Otherwise, all fields are in local time. + return newDate(d); + }; + } + + function parseSpecifier(d, specifier, string, j) { + var i = 0, + n = specifier.length, + m = string.length, + c, + parse; + + while (i < n) { + if (j >= m) return -1; + c = specifier.charCodeAt(i++); + if (c === 37) { + c = specifier.charAt(i++); + parse = parses[c in pads ? specifier.charAt(i++) : c]; + if (!parse || ((j = parse(d, string, j)) < 0)) return -1; + } else if (c != string.charCodeAt(j++)) { + return -1; + } + } + + return j; + } + + function parsePeriod(d, string, i) { + var n = periodRe.exec(string.slice(i)); + return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1; + } + + function parseShortWeekday(d, string, i) { + var n = shortWeekdayRe.exec(string.slice(i)); + return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1; + } + + function parseWeekday(d, string, i) { + var n = weekdayRe.exec(string.slice(i)); + return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1; + } + + function parseShortMonth(d, string, i) { + var n = shortMonthRe.exec(string.slice(i)); + return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1; + } + + function parseMonth(d, string, i) { + var n = monthRe.exec(string.slice(i)); + return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1; + } + + function parseLocaleDateTime(d, string, i) { + return parseSpecifier(d, locale_dateTime, string, i); + } + + function parseLocaleDate(d, string, i) { + return parseSpecifier(d, locale_date, string, i); + } + + function parseLocaleTime(d, string, i) { + return parseSpecifier(d, locale_time, string, i); + } + + function formatShortWeekday(d) { + return locale_shortWeekdays[d.getDay()]; + } + + function formatWeekday(d) { + return locale_weekdays[d.getDay()]; + } + + function formatShortMonth(d) { + return locale_shortMonths[d.getMonth()]; + } + + function formatMonth(d) { + return locale_months[d.getMonth()]; + } + + function formatPeriod(d) { + return locale_periods[+(d.getHours() >= 12)]; + } + + function formatUTCShortWeekday(d) { + return locale_shortWeekdays[d.getUTCDay()]; + } + + function formatUTCWeekday(d) { + return locale_weekdays[d.getUTCDay()]; + } + + function formatUTCShortMonth(d) { + return locale_shortMonths[d.getUTCMonth()]; + } + + function formatUTCMonth(d) { + return locale_months[d.getUTCMonth()]; + } + + function formatUTCPeriod(d) { + return locale_periods[+(d.getUTCHours() >= 12)]; + } + + return { + format: function(specifier) { + var f = newFormat(specifier += "", formats); + f.toString = function() { return specifier; }; + return f; + }, + parse: function(specifier) { + var p = newParse(specifier += "", localDate); + p.toString = function() { return specifier; }; + return p; + }, + utcFormat: function(specifier) { + var f = newFormat(specifier += "", utcFormats); + f.toString = function() { return specifier; }; + return f; + }, + utcParse: function(specifier) { + var p = newParse(specifier, utcDate); + p.toString = function() { return specifier; }; + return p; + } + }; +} + +var pads = {"-": "", "_": " ", "0": "0"}, + numberRe = /^\s*\d+/, // note: ignores next directive + percentRe = /^%/, + requoteRe = /[\\^$*+?|[\]().{}]/g; + +function pad$2(value, fill, width) { + var sign = value < 0 ? "-" : "", + string = (sign ? -value : value) + "", + length = string.length; + return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string); +} + +function requote(s) { + return s.replace(requoteRe, "\\$&"); +} + +function formatRe(names) { + return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i"); +} + +function formatLookup(names) { + var map = {}, i = -1, n = names.length; + while (++i < n) map[names[i].toLowerCase()] = i; + return map; +} + +function parseWeekdayNumberSunday(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 1)); + return n ? (d.w = +n[0], i + n[0].length) : -1; +} + +function parseWeekdayNumberMonday(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 1)); + return n ? (d.u = +n[0], i + n[0].length) : -1; +} + +function parseWeekNumberSunday(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.U = +n[0], i + n[0].length) : -1; +} + +function parseWeekNumberISO(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.V = +n[0], i + n[0].length) : -1; +} + +function parseWeekNumberMonday(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.W = +n[0], i + n[0].length) : -1; +} + +function parseFullYear(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 4)); + return n ? (d.y = +n[0], i + n[0].length) : -1; +} + +function parseYear(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1; +} + +function parseZone(d, string, i) { + var n = /^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i, i + 6)); + return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1; +} + +function parseMonthNumber(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.m = n[0] - 1, i + n[0].length) : -1; +} + +function parseDayOfMonth(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.d = +n[0], i + n[0].length) : -1; +} + +function parseDayOfYear(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 3)); + return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1; +} + +function parseHour24(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.H = +n[0], i + n[0].length) : -1; +} + +function parseMinutes(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.M = +n[0], i + n[0].length) : -1; +} + +function parseSeconds(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 2)); + return n ? (d.S = +n[0], i + n[0].length) : -1; +} + +function parseMilliseconds(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 3)); + return n ? (d.L = +n[0], i + n[0].length) : -1; +} + +function parseMicroseconds(d, string, i) { + var n = numberRe.exec(string.slice(i, i + 6)); + return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1; +} + +function parseLiteralPercent(d, string, i) { + var n = percentRe.exec(string.slice(i, i + 1)); + return n ? i + n[0].length : -1; +} + +function parseUnixTimestamp(d, string, i) { + var n = numberRe.exec(string.slice(i)); + return n ? (d.Q = +n[0], i + n[0].length) : -1; +} + +function parseUnixTimestampSeconds(d, string, i) { + var n = numberRe.exec(string.slice(i)); + return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1; +} + +function formatDayOfMonth(d, p) { + return pad$2(d.getDate(), p, 2); +} + +function formatHour24(d, p) { + return pad$2(d.getHours(), p, 2); +} + +function formatHour12(d, p) { + return pad$2(d.getHours() % 12 || 12, p, 2); +} + +function formatDayOfYear(d, p) { + return pad$2(1 + day.count(year(d), d), p, 3); +} + +function formatMilliseconds(d, p) { + return pad$2(d.getMilliseconds(), p, 3); +} + +function formatMicroseconds(d, p) { + return formatMilliseconds(d, p) + "000"; +} + +function formatMonthNumber(d, p) { + return pad$2(d.getMonth() + 1, p, 2); +} + +function formatMinutes(d, p) { + return pad$2(d.getMinutes(), p, 2); +} + +function formatSeconds(d, p) { + return pad$2(d.getSeconds(), p, 2); +} + +function formatWeekdayNumberMonday(d) { + var day = d.getDay(); + return day === 0 ? 7 : day; +} + +function formatWeekNumberSunday(d, p) { + return pad$2(sunday.count(year(d), d), p, 2); +} + +function formatWeekNumberISO(d, p) { + var day = d.getDay(); + d = (day >= 4 || day === 0) ? thursday(d) : thursday.ceil(d); + return pad$2(thursday.count(year(d), d) + (year(d).getDay() === 4), p, 2); +} + +function formatWeekdayNumberSunday(d) { + return d.getDay(); +} + +function formatWeekNumberMonday(d, p) { + return pad$2(monday.count(year(d), d), p, 2); +} + +function formatYear$1(d, p) { + return pad$2(d.getFullYear() % 100, p, 2); +} + +function formatFullYear(d, p) { + return pad$2(d.getFullYear() % 10000, p, 4); +} + +function formatZone(d) { + var z = d.getTimezoneOffset(); + return (z > 0 ? "-" : (z *= -1, "+")) + + pad$2(z / 60 | 0, "0", 2) + + pad$2(z % 60, "0", 2); +} + +function formatUTCDayOfMonth(d, p) { + return pad$2(d.getUTCDate(), p, 2); +} + +function formatUTCHour24(d, p) { + return pad$2(d.getUTCHours(), p, 2); +} + +function formatUTCHour12(d, p) { + return pad$2(d.getUTCHours() % 12 || 12, p, 2); +} + +function formatUTCDayOfYear(d, p) { + return pad$2(1 + utcDay.count(utcYear(d), d), p, 3); +} + +function formatUTCMilliseconds(d, p) { + return pad$2(d.getUTCMilliseconds(), p, 3); +} + +function formatUTCMicroseconds(d, p) { + return formatUTCMilliseconds(d, p) + "000"; +} + +function formatUTCMonthNumber(d, p) { + return pad$2(d.getUTCMonth() + 1, p, 2); +} + +function formatUTCMinutes(d, p) { + return pad$2(d.getUTCMinutes(), p, 2); +} + +function formatUTCSeconds(d, p) { + return pad$2(d.getUTCSeconds(), p, 2); +} + +function formatUTCWeekdayNumberMonday(d) { + var dow = d.getUTCDay(); + return dow === 0 ? 7 : dow; +} + +function formatUTCWeekNumberSunday(d, p) { + return pad$2(utcSunday.count(utcYear(d), d), p, 2); +} + +function formatUTCWeekNumberISO(d, p) { + var day = d.getUTCDay(); + d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d); + return pad$2(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2); +} + +function formatUTCWeekdayNumberSunday(d) { + return d.getUTCDay(); +} + +function formatUTCWeekNumberMonday(d, p) { + return pad$2(utcMonday.count(utcYear(d), d), p, 2); +} + +function formatUTCYear(d, p) { + return pad$2(d.getUTCFullYear() % 100, p, 2); +} + +function formatUTCFullYear(d, p) { + return pad$2(d.getUTCFullYear() % 10000, p, 4); +} + +function formatUTCZone() { + return "+0000"; +} + +function formatLiteralPercent() { + return "%"; +} + +function formatUnixTimestamp(d) { + return +d; +} + +function formatUnixTimestampSeconds(d) { + return Math.floor(+d / 1000); +} + +var locale; +var timeFormat; +var timeParse; +var utcFormat; +var utcParse; + +defaultLocale({ + dateTime: "%x, %X", + date: "%-m/%-d/%Y", + time: "%-I:%M:%S %p", + periods: ["AM", "PM"], + days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], + shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], + months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], + shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] +}); + +function defaultLocale(definition) { + locale = formatLocale(definition); + timeFormat = locale.format; + timeParse = locale.parse; + utcFormat = locale.utcFormat; + utcParse = locale.utcParse; + return locale; +} + +var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ"; + +function formatIsoNative(date) { + return date.toISOString(); +} + +var formatIso = Date.prototype.toISOString + ? formatIsoNative + : utcFormat(isoSpecifier); + +function parseIsoNative(string) { + var date = new Date(string); + return isNaN(date) ? null : date; +} + +var parseIso = +new Date("2000-01-01T00:00:00.000Z") + ? parseIsoNative + : utcParse(isoSpecifier); + +function read(data, schema, dateParse) { + schema = schema || {}; + + const reader = formats(schema.type || 'json'); + if (!reader) error('Unknown data format type: ' + schema.type); + + data = reader(data, schema); + if (schema.parse) parse(data, schema.parse, dateParse); + + if (data.hasOwnProperty('columns')) delete data.columns; + return data; +} + +function parse(data, types, dateParse) { + if (!data.length) return; // early exit for empty data + + dateParse = dateParse || timeParse; + + var fields = data.columns || Object.keys(data[0]), + parsers, datum, field, i, j, n, m; + + if (types === 'auto') types = inferTypes(data, fields); + + fields = Object.keys(types); + parsers = fields.map(function(field) { + var type = types[field], + parts, pattern; + + if (type && (type.indexOf('date:') === 0 || type.indexOf('utc:') === 0)) { + parts = type.split(/:(.+)?/, 2); // split on first : + pattern = parts[1]; + + if ((pattern[0] === '\'' && pattern[pattern.length-1] === '\'') || + (pattern[0] === '"' && pattern[pattern.length-1] === '"')) { + pattern = pattern.slice(1, -1); + } + + return parts[0] === 'utc' ? utcParse(pattern) : dateParse(pattern); + } + + if (!typeParsers[type]) { + throw Error('Illegal format pattern: ' + field + ':' + type); + } + + return typeParsers[type]; + }); + + for (i=0, n=data.length, m=fields.length; i df.touch(target(e)); + } else if (isFunction(update)) { + op = new Operator(null, update, params, false); + func = e => { + op.evaluate(e); + const t = target(e), v = op.value; + isChangeSet(v) ? df.pulse(t, v, options) : df.update(t, v, opt); + }; + } else { + func = e => df.update(target(e), update, opt); + } + + stream.apply(func); +} + +function onOperator(df, source, target, update, params, options) { + if (update === undefined) { + source.targets().add(target); + } else { + const opt = options || {}, + op = new Operator(null, updater(target, update), params, false); + op.modified(opt.force); + op.rank = source.rank; // immediately follow source + source.targets().add(op); // add dependency + + if (target) { + op.skip(true); // skip first invocation + op.value = target.value; // initialize value + op.targets().add(target); // chain dependencies + df.connect(target, [op]); // rerank as needed, #1672 + } + } +} + +function updater(target, update) { + update = isFunction(update) ? update : constant(update); + return target + ? function(_, pulse) { + const value = update(_, pulse); + if (!target.skip()) { + target.skip(value !== this.value).value = value; + } + return value; + } + : update; +} + +/** + * Assigns a rank to an operator. Ranks are assigned in increasing order + * by incrementing an internal rank counter. + * @param {Operator} op - The operator to assign a rank. + */ +function rank(op) { + op.rank = ++this._rank; +} + +/** + * Re-ranks an operator and all downstream target dependencies. This + * is necessary when upstream dependencies of higher rank are added to + * a target operator. + * @param {Operator} op - The operator to re-rank. + */ +function rerank(op) { + var queue = [op], + cur, list, i; + + while (queue.length) { + this.rank(cur = queue.pop()); + if (list = cur._targets) { + for (i=list.length; --i >= 0;) { + queue.push(cur = list[i]); + if (cur === op) error('Cycle detected in dataflow graph.'); + } + } + } +} + +/** + * Sentinel value indicating pulse propagation should stop. + */ +var StopPropagation = {}; + +// Pulse visit type flags +var ADD = (1 << 0), + REM = (1 << 1), + MOD = (1 << 2), + ADD_REM = ADD | REM, + ADD_MOD = ADD | MOD, + ALL = ADD | REM | MOD, + REFLOW = (1 << 3), + SOURCE = (1 << 4), + NO_SOURCE = (1 << 5), + NO_FIELDS = (1 << 6); + +/** + * A Pulse enables inter-operator communication during a run of the + * dataflow graph. In addition to the current timestamp, a pulse may also + * contain a change-set of added, removed or modified data tuples, as well as + * a pointer to a full backing data source. Tuple change sets may not + * be fully materialized; for example, to prevent needless array creation + * a change set may include larger arrays and corresponding filter functions. + * The pulse provides a {@link visit} method to enable proper and efficient + * iteration over requested data tuples. + * + * In addition, each pulse can track modification flags for data tuple fields. + * Responsible transform operators should call the {@link modifies} method to + * indicate changes to data fields. The {@link modified} method enables + * querying of this modification state. + * + * @constructor + * @param {Dataflow} dataflow - The backing dataflow instance. + * @param {number} stamp - The current propagation timestamp. + * @param {string} [encode] - An optional encoding set name, which is then + * accessible as Pulse.encode. Operators can respond to (or ignore) this + * setting as appropriate. This parameter can be used in conjunction with + * the Encode transform in the vega-encode module. + */ +function Pulse(dataflow, stamp, encode) { + this.dataflow = dataflow; + this.stamp = stamp == null ? -1 : stamp; + this.add = []; + this.rem = []; + this.mod = []; + this.fields = null; + this.encode = encode || null; +} + +var prototype$3 = Pulse.prototype; + +/** + * Sentinel value indicating pulse propagation should stop. + */ +prototype$3.StopPropagation = StopPropagation; + +/** + * Boolean flag indicating ADD (added) tuples. + */ +prototype$3.ADD = ADD; + +/** + * Boolean flag indicating REM (removed) tuples. + */ +prototype$3.REM = REM; + +/** + * Boolean flag indicating MOD (modified) tuples. + */ +prototype$3.MOD = MOD; + +/** + * Boolean flag indicating ADD (added) and REM (removed) tuples. + */ +prototype$3.ADD_REM = ADD_REM; + +/** + * Boolean flag indicating ADD (added) and MOD (modified) tuples. + */ +prototype$3.ADD_MOD = ADD_MOD; + +/** + * Boolean flag indicating ADD, REM and MOD tuples. + */ +prototype$3.ALL = ALL; + +/** + * Boolean flag indicating all tuples in a data source + * except for the ADD, REM and MOD tuples. + */ +prototype$3.REFLOW = REFLOW; + +/** + * Boolean flag indicating a 'pass-through' to a + * backing data source, ignoring ADD, REM and MOD tuples. + */ +prototype$3.SOURCE = SOURCE; + +/** + * Boolean flag indicating that source data should be + * suppressed when creating a forked pulse. + */ +prototype$3.NO_SOURCE = NO_SOURCE; + +/** + * Boolean flag indicating that field modifications should be + * suppressed when creating a forked pulse. + */ +prototype$3.NO_FIELDS = NO_FIELDS; + +/** + * Creates a new pulse based on the values of this pulse. + * The dataflow, time stamp and field modification values are copied over. + * By default, new empty ADD, REM and MOD arrays are created. + * @param {number} flags - Integer of boolean flags indicating which (if any) + * tuple arrays should be copied to the new pulse. The supported flag values + * are ADD, REM and MOD. Array references are copied directly: new array + * instances are not created. + * @return {Pulse} - The forked pulse instance. + * @see init + */ +prototype$3.fork = function(flags) { + return new Pulse(this.dataflow).init(this, flags); +}; + +/** + * Creates a copy of this pulse with new materialized array + * instances for the ADD, REM, MOD, and SOURCE arrays. + * The dataflow, time stamp and field modification values are copied over. + * @return {Pulse} - The cloned pulse instance. + * @see init + */ +prototype$3.clone = function() { + var p = this.fork(ALL); + p.add = p.add.slice(); + p.rem = p.rem.slice(); + p.mod = p.mod.slice(); + if (p.source) p.source = p.source.slice(); + return p.materialize(ALL | SOURCE); +}; + +/** + * Returns a pulse that adds all tuples from a backing source. This is + * useful for cases where operators are added to a dataflow after an + * upstream data pipeline has already been processed, ensuring that + * new operators can observe all tuples within a stream. + * @return {Pulse} - A pulse instance with all source tuples included + * in the add array. If the current pulse already has all source + * tuples in its add array, it is returned directly. If the current + * pulse does not have a backing source, it is returned directly. + */ +prototype$3.addAll = function() { + var p = this; + if (!this.source || this.source.length === this.add.length) { + return p; + } else { + p = new Pulse(this.dataflow).init(this); + p.add = p.source; + return p; + } +}; + +/** + * Initialize this pulse based on the values of another pulse. This method + * is used internally by {@link fork} to initialize a new forked tuple. + * The dataflow, time stamp and field modification values are copied over. + * By default, new empty ADD, REM and MOD arrays are created. + * @param {Pulse} src - The source pulse to copy from. + * @param {number} flags - Integer of boolean flags indicating which (if any) + * tuple arrays should be copied to the new pulse. The supported flag values + * are ADD, REM and MOD. Array references are copied directly: new array + * instances are not created. By default, source data arrays are copied + * to the new pulse. Use the NO_SOURCE flag to enforce a null source. + * @return {Pulse} - Returns this Pulse instance. + */ +prototype$3.init = function(src, flags) { + var p = this; + p.stamp = src.stamp; + p.encode = src.encode; + + if (src.fields && !(flags & NO_FIELDS)) { + p.fields = src.fields; + } + + if (flags & ADD) { + p.addF = src.addF; + p.add = src.add; + } else { + p.addF = null; + p.add = []; + } + + if (flags & REM) { + p.remF = src.remF; + p.rem = src.rem; + } else { + p.remF = null; + p.rem = []; + } + + if (flags & MOD) { + p.modF = src.modF; + p.mod = src.mod; + } else { + p.modF = null; + p.mod = []; + } + + if (flags & NO_SOURCE) { + p.srcF = null; + p.source = null; + } else { + p.srcF = src.srcF; + p.source = src.source; + } + + return p; +}; + +/** + * Schedules a function to run after pulse propagation completes. + * @param {function} func - The function to run. + */ +prototype$3.runAfter = function(func) { + this.dataflow.runAfter(func); +}; + +/** + * Indicates if tuples have been added, removed or modified. + * @param {number} [flags] - The tuple types (ADD, REM or MOD) to query. + * Defaults to ALL, returning true if any tuple type has changed. + * @return {boolean} - Returns true if one or more queried tuple types have + * changed, false otherwise. + */ +prototype$3.changed = function(flags) { + var f = flags || ALL; + return ((f & ADD) && this.add.length) + || ((f & REM) && this.rem.length) + || ((f & MOD) && this.mod.length); +}; + +/** + * Forces a "reflow" of tuple values, such that all tuples in the backing + * source are added to the MOD set, unless already present in the ADD set. + * @param {boolean} [fork=false] - If true, returns a forked copy of this + * pulse, and invokes reflow on that derived pulse. + * @return {Pulse} - The reflowed pulse instance. + */ +prototype$3.reflow = function(fork) { + if (fork) return this.fork(ALL).reflow(); + + var len = this.add.length, + src = this.source && this.source.length; + if (src && src !== len) { + this.mod = this.source; + if (len) this.filter(MOD, filter(this, ADD)); + } + return this; +}; + +/** + * Marks one or more data field names as modified to assist dependency + * tracking and incremental processing by transform operators. + * @param {string|Array} _ - The field(s) to mark as modified. + * @return {Pulse} - This pulse instance. + */ +prototype$3.modifies = function(_) { + var fields = array(_), + hash = this.fields || (this.fields = {}); + fields.forEach(function(f) { hash[f] = true; }); + return this; +}; + +/** + * Checks if one or more data fields have been modified during this pulse + * propagation timestamp. + * @param {string|Array} _ - The field(s) to check for modified. + * @return {boolean} - Returns true if any of the provided fields has been + * marked as modified, false otherwise. + */ +prototype$3.modified = function(_) { + var fields = this.fields; + return !(this.mod.length && fields) ? false + : !arguments.length ? !!fields + : isArray(_) ? _.some(function(f) { return fields[f]; }) + : fields[_]; +}; + +/** + * Adds a filter function to one more tuple sets. Filters are applied to + * backing tuple arrays, to determine the actual set of tuples considered + * added, removed or modified. They can be used to delay materialization of + * a tuple set in order to avoid expensive array copies. In addition, the + * filter functions can serve as value transformers: unlike standard predicate + * function (which return boolean values), Pulse filters should return the + * actual tuple value to process. If a tuple set is already filtered, the + * new filter function will be appended into a conjuntive ('and') query. + * @param {number} flags - Flags indicating the tuple set(s) to filter. + * @param {function(*):object} filter - Filter function that will be applied + * to the tuple set array, and should return a data tuple if the value + * should be included in the tuple set, and falsy (or null) otherwise. + * @return {Pulse} - Returns this pulse instance. + */ +prototype$3.filter = function(flags, filter) { + var p = this; + if (flags & ADD) p.addF = addFilter(p.addF, filter); + if (flags & REM) p.remF = addFilter(p.remF, filter); + if (flags & MOD) p.modF = addFilter(p.modF, filter); + if (flags & SOURCE) p.srcF = addFilter(p.srcF, filter); + return p; +}; + +function addFilter(a, b) { + return a ? function(t,i) { return a(t,i) && b(t,i); } : b; +} + +/** + * Materialize one or more tuple sets in this pulse. If the tuple set(s) have + * a registered filter function, it will be applied and the tuple set(s) will + * be replaced with materialized tuple arrays. + * @param {number} flags - Flags indicating the tuple set(s) to materialize. + * @return {Pulse} - Returns this pulse instance. + */ +prototype$3.materialize = function(flags) { + flags = flags || ALL; + var p = this; + if ((flags & ADD) && p.addF) { + p.add = materialize(p.add, p.addF); + p.addF = null; + } + if ((flags & REM) && p.remF) { + p.rem = materialize(p.rem, p.remF); + p.remF = null; + } + if ((flags & MOD) && p.modF) { + p.mod = materialize(p.mod, p.modF); + p.modF = null; + } + if ((flags & SOURCE) && p.srcF) { + p.source = p.source.filter(p.srcF); + p.srcF = null; + } + return p; +}; + +function materialize(data, filter) { + var out = []; + visitArray(data, filter, function(_) { out.push(_); }); + return out; +} + +function filter(pulse, flags) { + var map = {}; + pulse.visit(flags, function(t) { map[tupleid(t)] = 1; }); + return function(t) { return map[tupleid(t)] ? null : t; }; +} + +/** + * Visit one or more tuple sets in this pulse. + * @param {number} flags - Flags indicating the tuple set(s) to visit. + * Legal values are ADD, REM, MOD and SOURCE (if a backing data source + * has been set). + * @param {function(object):*} - Visitor function invoked per-tuple. + * @return {Pulse} - Returns this pulse instance. + */ +prototype$3.visit = function(flags, visitor) { + var p = this, v = visitor, src, sum; + + if (flags & SOURCE) { + visitArray(p.source, p.srcF, v); + return p; + } + + if (flags & ADD) visitArray(p.add, p.addF, v); + if (flags & REM) visitArray(p.rem, p.remF, v); + if (flags & MOD) visitArray(p.mod, p.modF, v); + + if ((flags & REFLOW) && (src = p.source)) { + sum = p.add.length + p.mod.length; + if (sum === src.length) ; else if (sum) { + visitArray(src, filter(p, ADD_MOD), v); + } else { + // if no add/rem/mod tuples, visit source + visitArray(src, p.srcF, v); + } + } + + return p; +}; + +/** + * Represents a set of multiple pulses. Used as input for operators + * that accept multiple pulses at a time. Contained pulses are + * accessible via the public "pulses" array property. This pulse doe + * not carry added, removed or modified tuples directly. However, + * the visit method can be used to traverse all such tuples contained + * in sub-pulses with a timestamp matching this parent multi-pulse. + * @constructor + * @param {Dataflow} dataflow - The backing dataflow instance. + * @param {number} stamp - The timestamp. + * @param {Array} pulses - The sub-pulses for this multi-pulse. + */ +function MultiPulse(dataflow, stamp, pulses, encode) { + var p = this, + c = 0, + pulse, hash, i, n, f; + + this.dataflow = dataflow; + this.stamp = stamp; + this.fields = null; + this.encode = encode || null; + this.pulses = pulses; + + for (i=0, n=pulses.length; i= Info) { + dt = Date.now(); + df.debug('-- START PROPAGATION (' + stamp + ') -----'); + } + + // initialize priority queue, reset touched operators + df._touched.forEach(function(op) { df._enqueue(op, true); }); + df._touched = UniqueList(id); + + try { + while (df._heap.size() > 0) { + // dequeue operator with highest priority + op = df._heap.pop(); + + // re-queue if rank changed + if (op.rank !== op.qrank) { df._enqueue(op, true); continue; } + + // otherwise, evaluate the operator + next = op.run(df._getPulse(op, encode)); + + // await if operator returned a promise + if (next.then) { + next = await next; + } + + if (level >= Debug) { + df.debug(op.id, next === StopPropagation ? 'STOP' : next, op); + } + + // propagate evaluation, enqueue dependent operators + if (next !== StopPropagation) { + df._pulse = next; + if (op._targets) op._targets.forEach(op => df._enqueue(op)); + } + + // increment visit counter + ++count; + } + } catch (err) { + error = err; + } + + // reset pulse map + df._pulses = {}; + df._pulse = null; + + if (level >= Info) { + dt = Date.now() - dt; + df.info('> Pulse ' + stamp + ': ' + count + ' operators; ' + dt + 'ms'); + } + + if (error) { + df._postrun = []; + df.error(error); + } + + // invoke callbacks queued via runAfter + if (df._postrun.length) { + const pr = df._postrun.sort((a, b) => b.priority - a.priority); + df._postrun = []; + for (let i=0; i this._running = null; + (this._running = this.evaluate(encode, prerun, postrun)) + .then(clear, clear); + + return this._running; +} + +/** + * Requests dataflow evaluation and the immediately returns this dataflow + * instance. If there are pending data loading or other asynchronous + * operations, the dataflow will evaluate asynchronously after this method + * has been invoked. To track when dataflow evaluation completes, use the + * {@link runAsync} method instead. This method will raise an error if + * invoked while the dataflow is already in the midst of evaluation. + * @param {string} [encode] - The name of an encoding set to invoke during + * propagation. This value is added to generated Pulse instances; + * operators can then respond to (or ignore) this setting as appropriate. + * This parameter can be used in conjunction with the Encode transform in + * the vega-encode module. + * @param {function} [prerun] - An optional callback function to invoke + * immediately before dataflow evaluation commences. + * @param {function} [postrun] - An optional callback function to invoke + * after dataflow evaluation completes. The callback will be invoked + * after those registered via {@link runAfter}. + * @return {Dataflow} - This dataflow instance. + */ +function run(encode, prerun, postrun) { + return this._pulse ? reentrant(this) + : (this.evaluate(encode, prerun, postrun), this); +} + +/** + * Schedules a callback function to be invoked after the current pulse + * propagation completes. If no propagation is currently occurring, + * the function is invoked immediately. Callbacks scheduled via runAfter + * are invoked immediately upon completion of the current cycle, before + * any request queued via runAsync. This method is primarily intended for + * internal use. Third-party callers using runAfter to schedule a callback + * that invokes {@link run} or {@link runAsync} should not use this method, + * but instead use {@link runAsync} with prerun or postrun arguments. + * @param {function(Dataflow)} callback - The callback function to run. + * The callback will be invoked with this Dataflow instance as its + * sole argument. + * @param {boolean} enqueue - A boolean flag indicating that the + * callback should be queued up to run after the next propagation + * cycle, suppressing immediate invocation when propagation is not + * currently occurring. + * @param {number} [priority] - A priority value used to sort registered + * callbacks to determine execution order. This argument is intended + * for internal Vega use only. + */ +function runAfter(callback, enqueue, priority) { + if (this._pulse || enqueue) { + // pulse propagation is currently running, queue to run after + this._postrun.push({ + priority: priority || 0, + callback: callback + }); + } else { + // pulse propagation already complete, invoke immediately + try { callback(this); } catch (err) { this.error(err); } + } +} + +/** + * Raise an error for re-entrant dataflow evaluation. + */ +function reentrant(df) { + df.error('Dataflow already running. Use runAsync() to chain invocations.'); + return df; +} + +/** + * Enqueue an operator into the priority queue for evaluation. The operator + * will be enqueued if it has no registered pulse for the current cycle, or if + * the force argument is true. Upon enqueue, this method also sets the + * operator's qrank to the current rank value. + * @param {Operator} op - The operator to enqueue. + * @param {boolean} [force] - A flag indicating if the operator should be + * forceably added to the queue, even if it has already been previously + * enqueued during the current pulse propagation. This is useful when the + * dataflow graph is dynamically modified and the operator rank changes. + */ +function enqueue(op, force) { + var p = !this._pulses[op.id]; + if (p) this._pulses[op.id] = this._pulse; + if (p || force) { + op.qrank = op.rank; + this._heap.push(op); + } +} + +/** + * Provide a correct pulse for evaluating an operator. If the operator has an + * explicit source operator, we will try to pull the pulse(s) from it. + * If there is an array of source operators, we build a multi-pulse. + * Otherwise, we return a current pulse with correct source data. + * If the pulse is the pulse map has an explicit target set, we use that. + * Else if the pulse on the upstream source operator is current, we use that. + * Else we use the pulse from the pulse map, but copy the source tuple array. + * @param {Operator} op - The operator for which to get an input pulse. + * @param {string} [encode] - An (optional) encoding set name with which to + * annotate the returned pulse. See {@link run} for more information. + */ +function getPulse(op, encode) { + var s = op.source, + stamp = this._clock, + p; + + if (s && isArray(s)) { + p = s.map(function(_) { return _.pulse; }); + return new MultiPulse(this, stamp, p, encode); + } + + p = this._pulses[op.id]; + if (s) { + s = s.pulse; + if (!s || s === StopPropagation) { + p.source = []; + } else if (s.stamp === stamp && p.target !== op) { + p = s; + } else { + p.source = s.source; + } + } + + return p; +} + +var NO_OPT = {skip: false, force: false}; + +/** + * Touches an operator, scheduling it to be evaluated. If invoked outside of + * a pulse propagation, the operator will be evaluated the next time this + * dataflow is run. If invoked in the midst of pulse propagation, the operator + * will be queued for evaluation if and only if the operator has not yet been + * evaluated on the current propagation timestamp. + * @param {Operator} op - The operator to touch. + * @param {object} [options] - Additional options hash. + * @param {boolean} [options.skip] - If true, the operator will + * be skipped: it will not be evaluated, but its dependents will be. + * @return {Dataflow} + */ +function touch(op, options) { + var opt = options || NO_OPT; + if (this._pulse) { + // if in midst of propagation, add to priority queue + this._enqueue(op); + } else { + // otherwise, queue for next propagation + this._touched.add(op); + } + if (opt.skip) op.skip(true); + return this; +} + +/** + * Updates the value of the given operator. + * @param {Operator} op - The operator to update. + * @param {*} value - The value to set. + * @param {object} [options] - Additional options hash. + * @param {boolean} [options.force] - If true, the operator will + * be re-evaluated even if its value has not changed. + * @param {boolean} [options.skip] - If true, the operator will + * be skipped: it will not be evaluated, but its dependents will be. + * @return {Dataflow} + */ +function update(op, value, options) { + var opt = options || NO_OPT; + if (op.set(value) || opt.force) { + this.touch(op, opt); + } + return this; +} + +/** + * Pulses an operator with a changeset of tuples. If invoked outside of + * a pulse propagation, the pulse will be applied the next time this + * dataflow is run. If invoked in the midst of pulse propagation, the pulse + * will be added to the set of active pulses and will be applied if and + * only if the target operator has not yet been evaluated on the current + * propagation timestamp. + * @param {Operator} op - The operator to pulse. + * @param {ChangeSet} value - The tuple changeset to apply. + * @param {object} [options] - Additional options hash. + * @param {boolean} [options.skip] - If true, the operator will + * be skipped: it will not be evaluated, but its dependents will be. + * @return {Dataflow} + */ +function pulse(op, changeset, options) { + this.touch(op, options || NO_OPT); + + var p = new Pulse(this, this._clock + (this._pulse ? 0 : 1)), + t = op.pulse && op.pulse.source || []; + p.target = op; + this._pulses[op.id] = changeset.pulse(p, t); + + return this; +} + +function Heap(cmp) { + var nodes = []; + return { + size: () => nodes.length, + peek: () => nodes[0], + push: x => { + nodes.push(x); + return siftdown(nodes, 0, nodes.length - 1, cmp); + }, + pop: () => { + var last = nodes.pop(), item; + if (nodes.length) { + item = nodes[0]; + nodes[0] = last; + siftup(nodes, 0, cmp); + } else { + item = last; + } + return item; + } + }; +} + +function siftdown(array, start, idx, cmp) { + var item, parent, pidx; + + item = array[idx]; + while (idx > start) { + pidx = (idx - 1) >> 1; + parent = array[pidx]; + if (cmp(item, parent) < 0) { + array[idx] = parent; + idx = pidx; + continue; + } + break; + } + return (array[idx] = item); +} + +function siftup(array, idx, cmp) { + var start = idx, + end = array.length, + item = array[idx], + cidx = (idx << 1) + 1, ridx; + + while (cidx < end) { + ridx = cidx + 1; + if (ridx < end && cmp(array[cidx], array[ridx]) >= 0) { + cidx = ridx; + } + array[idx] = array[cidx]; + idx = cidx; + cidx = (idx << 1) + 1; + } + array[idx] = item; + return siftdown(array, start, idx, cmp); +} + +/** + * A dataflow graph for reactive processing of data streams. + * @constructor + */ +function Dataflow() { + this.logger(logger()); + this.logLevel(Error$1); + + this._clock = 0; + this._rank = 0; + try { + this._loader = loader(); + } catch (e) { + // do nothing if loader module is unavailable + } + + this._touched = UniqueList(id); + this._pulses = {}; + this._pulse = null; + + this._heap = Heap((a, b) => a.qrank - b.qrank); + this._postrun = []; +} + +var prototype$5 = Dataflow.prototype; + +/** + * The current timestamp of this dataflow. This value reflects the + * timestamp of the previous dataflow run. The dataflow is initialized + * with a stamp value of 0. The initial run of the dataflow will have + * a timestap of 1, and so on. This value will match the + * {@link Pulse.stamp} property. + * @return {number} - The current timestamp value. + */ +prototype$5.stamp = function() { + return this._clock; +}; + +/** + * Gets or sets the loader instance to use for data file loading. A + * loader object must provide a "load" method for loading files and a + * "sanitize" method for checking URL/filename validity. Both methods + * should accept a URI and options hash as arguments, and return a Promise + * that resolves to the loaded file contents (load) or a hash containing + * sanitized URI data with the sanitized url assigned to the "href" property + * (sanitize). + * @param {object} _ - The loader instance to use. + * @return {object|Dataflow} - If no arguments are provided, returns + * the current loader instance. Otherwise returns this Dataflow instance. + */ +prototype$5.loader = function(_) { + if (arguments.length) { + this._loader = _; + return this; + } else { + return this._loader; + } +}; + +/** + * Empty entry threshold for garbage cleaning. Map data structures will + * perform cleaning once the number of empty entries exceeds this value. + */ +prototype$5.cleanThreshold = 1e4; + +// OPERATOR REGISTRATION +prototype$5.add = add; +prototype$5.connect = connect; +prototype$5.rank = rank; +prototype$5.rerank = rerank; + +// OPERATOR UPDATES +prototype$5.pulse = pulse; +prototype$5.touch = touch; +prototype$5.update = update; +prototype$5.changeset = changeset; + +// DATA LOADING +prototype$5.ingest = ingest$1; +prototype$5.parse = parse$1; +prototype$5.preload = preload; +prototype$5.request = request; + +// EVENT HANDLING +prototype$5.events = events; +prototype$5.on = on; + +// PULSE PROPAGATION +prototype$5.evaluate = evaluate; +prototype$5.run = run; +prototype$5.runAsync = runAsync; +prototype$5.runAfter = runAfter; +prototype$5._enqueue = enqueue; +prototype$5._getPulse = getPulse; + +// LOGGING AND ERROR HANDLING + +function logMethod(method) { + return function() { + return this._log[method].apply(this, arguments); + }; +} + +/** + * Get or set the logger instance used to log messages. If no arguments are + * provided, returns the current logger instance. Otherwise, sets the logger + * and return this Dataflow instance. Provided loggers must support the full + * API of logger objects generated by the vega-util logger method. Note that + * by default the log level of the new logger will be used; use the logLevel + * method to adjust the log level as needed. + */ +prototype$5.logger = function(logger) { + if (arguments.length) { + this._log = logger; + return this; + } else { + return this._log; + } +}; + +/** + * Logs an error message. By default, logged messages are written to console + * output. The message will only be logged if the current log level is high + * enough to permit error messages. + */ +prototype$5.error = logMethod('error'); + +/** + * Logs a warning message. By default, logged messages are written to console + * output. The message will only be logged if the current log level is high + * enough to permit warning messages. + */ +prototype$5.warn = logMethod('warn'); + +/** + * Logs a information message. By default, logged messages are written to + * console output. The message will only be logged if the current log level is + * high enough to permit information messages. + */ +prototype$5.info = logMethod('info'); + +/** + * Logs a debug message. By default, logged messages are written to console + * output. The message will only be logged if the current log level is high + * enough to permit debug messages. + */ +prototype$5.debug = logMethod('debug'); + +/** + * Get or set the current log level. If an argument is provided, it + * will be used as the new log level. + * @param {number} [level] - Should be one of None, Warn, Info + * @return {number} - The current log level. + */ +prototype$5.logLevel = logMethod('level'); + +/** + * Abstract class for operators that process data tuples. + * Subclasses must provide a {@link transform} method for operator processing. + * @constructor + * @param {*} [init] - The initial value for this operator. + * @param {object} [params] - The parameters for this operator. + * @param {Operator} [source] - The operator from which to receive pulses. + */ +function Transform(init, params) { + Operator.call(this, init, null, params); +} + +var prototype$6 = inherits(Transform, Operator); + +/** + * Overrides {@link Operator.evaluate} for transform operators. + * Internally, this method calls {@link evaluate} to perform processing. + * If {@link evaluate} returns a falsy value, the input pulse is returned. + * This method should NOT be overridden, instead overrride {@link evaluate}. + * @param {Pulse} pulse - the current dataflow pulse. + * @return the output pulse for this operator (or StopPropagation) + */ +prototype$6.run = function(pulse) { + if (pulse.stamp <= this.stamp) return pulse.StopPropagation; + + var rv; + if (this.skip()) { + this.skip(false); + } else { + rv = this.evaluate(pulse); + } + rv = rv || pulse; + + this.stamp = pulse.stamp; + + if (rv.then) { + rv = rv.then(_ => this.pulse =_); + } else if (rv !== pulse.StopPropagation) { + this.pulse = rv; + } + + return rv; +}; + +/** + * Overrides {@link Operator.evaluate} for transform operators. + * Marshalls parameter values and then invokes {@link transform}. + * @param {Pulse} pulse - the current dataflow pulse. + * @return {Pulse} The output pulse (or StopPropagation). A falsy return + value (including undefined) will let the input pulse pass through. + */ +prototype$6.evaluate = function(pulse) { + var params = this.marshall(pulse.stamp), + out = this.transform(params, pulse); + params.clear(); + return out; +}; + +/** + * Process incoming pulses. + * Subclasses should override this method to implement transforms. + * @param {Parameters} _ - The operator parameter values. + * @param {Pulse} pulse - The current dataflow pulse. + * @return {Pulse} The output pulse (or StopPropagation). A falsy return + * value (including undefined) will let the input pulse pass through. + */ +prototype$6.transform = function() {}; + +var transforms = {}; + +// Utilities + +function multikey(f) { + return function(x) { + var n = f.length, + i = 1, + k = String(f[0](x)); + + for (; i 1 ? this.dev / (this.valid-1) : undefined', + req: ['mean'], idx: 1 + }), + 'variancep': measure({ + name: 'variancep', + set: 'this.valid > 1 ? this.dev / this.valid : undefined', + req: ['variance'], idx: 2 + }), + 'stdev': measure({ + name: 'stdev', + set: 'this.valid > 1 ? Math.sqrt(this.dev / (this.valid-1)) : undefined', + req: ['variance'], idx: 2 + }), + 'stdevp': measure({ + name: 'stdevp', + set: 'this.valid > 1 ? Math.sqrt(this.dev / this.valid) : undefined', + req: ['variance'], idx: 2 + }), + 'stderr': measure({ + name: 'stderr', + set: 'this.valid > 1 ? Math.sqrt(this.dev / (this.valid * (this.valid-1))) : undefined', + req: ['variance'], idx: 2 + }), + 'distinct': measure({ + name: 'distinct', + set: 'cell.data.distinct(this.get)', + req: ['values'], idx: 3 + }), + 'ci0': measure({ + name: 'ci0', + set: 'cell.data.ci0(this.get)', + req: ['values'], idx: 3 + }), + 'ci1': measure({ + name: 'ci1', + set: 'cell.data.ci1(this.get)', + req: ['values'], idx: 3 + }), + 'median': measure({ + name: 'median', + set: 'cell.data.q2(this.get)', + req: ['values'], idx: 3 + }), + 'q1': measure({ + name: 'q1', + set: 'cell.data.q1(this.get)', + req: ['values'], idx: 3 + }), + 'q3': measure({ + name: 'q3', + set: 'cell.data.q3(this.get)', + req: ['values'], idx: 3 + }), + 'argmin': measure({ + name: 'argmin', + init: 'this.argmin = undefined;', + add: 'if (v < this.min) this.argmin = t;', + rem: 'if (v <= this.min) this.argmin = undefined;', + set: 'this.argmin || cell.data.argmin(this.get)', + req: ['min'], str: ['values'], idx: 3 + }), + 'argmax': measure({ + name: 'argmax', + init: 'this.argmax = undefined;', + add: 'if (v > this.max) this.argmax = t;', + rem: 'if (v >= this.max) this.argmax = undefined;', + set: 'this.argmax || cell.data.argmax(this.get)', + req: ['max'], str: ['values'], idx: 3 + }), + 'min': measure({ + name: 'min', + init: 'this.min = undefined;', + add: 'if (v < this.min || this.min === undefined) this.min = v;', + rem: 'if (v <= this.min) this.min = NaN;', + set: 'this.min = (isNaN(this.min) ? cell.data.min(this.get) : this.min)', + str: ['values'], idx: 4 + }), + 'max': measure({ + name: 'max', + init: 'this.max = undefined;', + add: 'if (v > this.max || this.max === undefined) this.max = v;', + rem: 'if (v >= this.max) this.max = NaN;', + set: 'this.max = (isNaN(this.max) ? cell.data.max(this.get) : this.max)', + str: ['values'], idx: 4 + }) +}; + +var ValidAggregateOps = Object.keys(AggregateOps); + +function createMeasure(op, name) { + return AggregateOps[op](name); +} + +function measure(base) { + return function(out) { + var m = extend({init:'', add:'', rem:'', idx:0}, base); + m.out = out || base.name; + return m; + }; +} + +function compareIndex(a, b) { + return a.idx - b.idx; +} + +function resolve(agg, stream) { + function collect(m, a) { + function helper(r) { if (!m[r]) collect(m, m[r] = AggregateOps[r]()); } + if (a.req) a.req.forEach(helper); + if (stream && a.str) a.str.forEach(helper); + return m; + } + var map = agg.reduce( + collect, + agg.reduce(function(m, a) { + m[a.name] = a; + return m; + }, {}) + ); + var values = [], key; + for (key in map) values.push(map[key]); + return values.sort(compareIndex); +} + +function compileMeasures(agg, field) { + var get = field || identity, + all = resolve(agg, true), // assume streaming removes may occur + init = 'var cell = this.cell; this.valid = 0; this.missing = 0;', + ctr = 'this.cell = cell; this.init();', + add = 'if(v==null){++this.missing; return;} if(v!==v) return; ++this.valid;', + rem = 'if(v==null){--this.missing; return;} if(v!==v) return; --this.valid;', + set = 'var cell = this.cell;'; + + all.forEach(function(a) { + init += a.init; + add += a.add; + rem += a.rem; + }); + agg.slice().sort(compareIndex).forEach(function(a) { + set += 't[\'' + a.out + '\']=' + a.set + ';'; + }); + set += 'return t;'; + + ctr = Function('cell', ctr); + ctr.prototype.init = Function(init); + ctr.prototype.add = Function('v', 't', add); + ctr.prototype.rem = Function('v', 't', rem); + ctr.prototype.set = Function('t', set); + ctr.prototype.get = get; + ctr.fields = agg.map(function(_) { return _.out; }); + return ctr; +} + +function bin(_) { + // determine range + var maxb = _.maxbins || 20, + base = _.base || 10, + logb = Math.log(base), + div = _.divide || [5, 2], + min = _.extent[0], + max = _.extent[1], + span = (max - min) || Math.abs(min) || 1, + step, level, minstep, precision, v, i, n, eps; + + if (_.step) { + // if step size is explicitly given, use that + step = _.step; + } else if (_.steps) { + // if provided, limit choice to acceptable step sizes + v = span / maxb; + for (i=0, n=_.steps.length; i < n && _.steps[i] < v; ++i); + step = _.steps[Math.max(0, i-1)]; + } else { + // else use span to determine step size + level = Math.ceil(Math.log(maxb) / logb); + minstep = _.minstep || 0; + step = Math.max( + minstep, + Math.pow(base, Math.round(Math.log(span) / logb) - level) + ); + + // increase step size if too many bins + while (Math.ceil(span/step) > maxb) { step *= base; } + + // decrease step size if allowed + for (i=0, n=div.length; i= minstep && span / v <= maxb) step = v; + } + } + + // update precision, min and max + v = Math.log(step); + precision = v >= 0 ? 0 : ~~(-v / logb) + 1; + eps = Math.pow(base, -precision - 1); + if (_.nice || _.nice === undefined) { + v = Math.floor(min / step + eps) * step; + min = min < v ? v - step : v; + max = Math.ceil(max / step) * step; + } + + return { + start: min, + stop: max === min ? min + step : max, + step: step + }; +} + +function* numbers(values, valueof) { + if (valueof === undefined) { + for (let value of values) { + if (value != null && (value = +value) >= value) { + yield value; + } + } + } else { + let index = -1; + for (let value of values) { + if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) { + yield value; + } + } + } +} + +var random = Math.random; + +function ascending$1(a, b) { + return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; +} + +function bisector$1(compare) { + if (compare.length === 1) compare = ascendingComparator$1(compare); + return { + left: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) < 0) lo = mid + 1; + else hi = mid; + } + return lo; + }, + right: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) > 0) hi = mid; + else lo = mid + 1; + } + return lo; + } + }; +} + +function ascendingComparator$1(f) { + return function(d, x) { + return ascending$1(f(d), x); + }; +} + +var ascendingBisect$1 = bisector$1(ascending$1); + +function variance(values, valueof) { + let count = 0; + let delta; + let mean = 0; + let sum = 0; + if (valueof === undefined) { + for (let value of values) { + if (value != null && (value = +value) >= value) { + delta = value - mean; + mean += delta / ++count; + sum += delta * (value - mean); + } + } + } else { + let index = -1; + for (let value of values) { + if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) { + delta = value - mean; + mean += delta / ++count; + sum += delta * (value - mean); + } + } + } + if (count > 1) return sum / (count - 1); +} + +function number(x) { + return x === null ? NaN : +x; +} + +function quantile(values, p, valueof = number) { + if (!(n = values.length)) return; + if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values); + if (p >= 1) return +valueof(values[n - 1], n - 1, values); + var n, + i = (n - 1) * p, + i0 = Math.floor(i), + value0 = +valueof(values[i0], i0, values), + value1 = +valueof(values[i0 + 1], i0 + 1, values); + return value0 + (value1 - value0) * (i - i0); +} + +function bootstrapCI(array, samples, alpha, f) { + if (!array.length) return [undefined, undefined]; + + var values = Float64Array.from(numbers(array, f)), + n = values.length, + m = samples, + a, i, j, mu; + + for (j=0, mu=Array(m); j 1); + c = Math.sqrt(-2 * Math.log(rds) / rds); // Box-Muller transform + next = mu + y * c * sigma; + return mu + x * c * sigma; + }; + + dist.pdf = function(x) { + var exp = Math.exp(Math.pow(x-mu, 2) / (-2 * Math.pow(sigma, 2))); + return (1 / (sigma * Math.sqrt(2*Math.PI))) * exp; + }; + + // Approximation from West (2009) + // Better Approximations to Cumulative Normal Functions + dist.cdf = function(x) { + var cd, + z = (x - mu) / sigma, + Z = Math.abs(z); + if (Z > 37) { + cd = 0; + } else { + var sum, exp = Math.exp(-Z*Z/2); + if (Z < 7.07106781186547) { + sum = 3.52624965998911e-02 * Z + 0.700383064443688; + sum = sum * Z + 6.37396220353165; + sum = sum * Z + 33.912866078383; + sum = sum * Z + 112.079291497871; + sum = sum * Z + 221.213596169931; + sum = sum * Z + 220.206867912376; + cd = exp * sum; + sum = 8.83883476483184e-02 * Z + 1.75566716318264; + sum = sum * Z + 16.064177579207; + sum = sum * Z + 86.7807322029461; + sum = sum * Z + 296.564248779674; + sum = sum * Z + 637.333633378831; + sum = sum * Z + 793.826512519948; + sum = sum * Z + 440.413735824752; + cd = cd / sum; + } else { + sum = Z + 0.65; + sum = Z + 4 / sum; + sum = Z + 3 / sum; + sum = Z + 2 / sum; + sum = Z + 1 / sum; + cd = exp / sum / 2.506628274631; + } + } + return z > 0 ? 1 - cd : cd; + }; + + // Approximation of Probit function using inverse error function. + dist.icdf = function(p) { + if (p <= 0 || p >= 1) return NaN; + var x = 2*p - 1, + v = (8 * (Math.PI - 3)) / (3 * Math.PI * (4-Math.PI)), + a = (2 / (Math.PI*v)) + (Math.log(1 - Math.pow(x,2)) / 2), + b = Math.log(1 - (x*x)) / v, + s = (x > 0 ? 1 : -1) * Math.sqrt(Math.sqrt((a*a) - b) - a); + return mu + sigma * Math.SQRT2 * s; + }; + + return dist.mean(mean).stdev(stdev); +} + +// TODO: support for additional kernels? +function randomKDE(support, bandwidth) { + var kernel = randomNormal(), + dist = {}, + n = 0; + + dist.data = function(_) { + if (arguments.length) { + support = _; + n = _ ? _.length : 0; + return dist.bandwidth(bandwidth); + } else { + return support; + } + }; + + dist.bandwidth = function(_) { + if (!arguments.length) return bandwidth; + bandwidth = _; + if (!bandwidth && support) bandwidth = estimateBandwidth(support); + return dist; + }; + + dist.sample = function() { + return support[~~(random() * n)] + bandwidth * kernel.sample(); + }; + + dist.pdf = function(x) { + for (var y=0, i=0; i= a && x <= b) ? 1 / d : 0; + }; + + dist.cdf = function(x) { + return x < a ? 0 : x > b ? 1 : (x - a) / d; + }; + + dist.icdf = function(p) { + return (p >= 0 && p <= 1) ? a + p * d : NaN; + }; + + return dist.min(min).max(max); +} + +// Ordinary Least Squares + +// subdivide up to accuracy of 0.1 degrees +const MIN_RADIANS = 0.1 * Math.PI / 180; + +// Adaptively sample an interpolated function over a domain extent +function sampleCurve(f, extent, minSteps, maxSteps) { + minSteps = minSteps || 25; + maxSteps = Math.max(minSteps, maxSteps || 200); + + const point = x => [x, f(x)], + minX = extent[0], + maxX = extent[1], + span = maxX - minX, + stop = span / maxSteps, + prev = [point(minX)], + next = []; + + if (minSteps === maxSteps) { + // no adaptation, sample uniform grid directly and return + for (let i = 1; i < maxSteps; ++i) { + prev.push(point(minX + (i / minSteps) * span)); + } + prev.push(point(maxX)); + return prev; + } else { + // sample minimum points on uniform grid + // then move on to perform adaptive refinement + next.push(point(maxX)); + for (let i = minSteps; --i > 0;) { + next.push(point(minX + (i / minSteps) * span)); + } + } + + let p0 = prev[0], + p1 = next[next.length - 1]; + + while (p1) { + const pm = point((p0[0] + p1[0]) / 2); + + if (pm[0] - p0[0] >= stop && angleDelta(p0, pm, p1) > MIN_RADIANS) { + next.push(pm); + } else { + p0 = p1; + prev.push(p1); + next.pop(); + } + p1 = next[next.length - 1]; + } + + return prev; +} + +function angleDelta(p, q, r) { + const a0 = Math.atan2(r[1] - p[1], r[0] - p[0]), + a1 = Math.atan2(q[1] - p[1], q[0] - p[0]); + return Math.abs(a0 - a1); +} + +function TupleStore(key) { + this._key = key ? field(key) : tupleid; + this.reset(); +} + +var prototype$7 = TupleStore.prototype; + +prototype$7.reset = function() { + this._add = []; + this._rem = []; + this._ext = null; + this._get = null; + this._q = null; +}; + +prototype$7.add = function(v) { + this._add.push(v); +}; + +prototype$7.rem = function(v) { + this._rem.push(v); +}; + +prototype$7.values = function() { + this._get = null; + if (this._rem.length === 0) return this._add; + + var a = this._add, + r = this._rem, + k = this._key, + n = a.length, + m = r.length, + x = Array(n - m), + map = {}, i, j, v; + + // use unique key field to clear removed values + for (i=0; i= 0) { + s = get(v[n]) + ''; + if (!map.hasOwnProperty(s)) { + map[s] = 1; + ++count; + } + } + + return count; +}; + +prototype$7.extent = function(get) { + if (this._get !== get || !this._ext) { + var v = this.values(), + i = extentIndex(v, get); + this._ext = [v[i[0]], v[i[1]]]; + this._get = get; + } + return this._ext; +}; + +prototype$7.argmin = function(get) { + return this.extent(get)[0] || {}; +}; + +prototype$7.argmax = function(get) { + return this.extent(get)[1] || {}; +}; + +prototype$7.min = function(get) { + var m = this.extent(get)[0]; + return m != null ? get(m) : undefined; +}; + +prototype$7.max = function(get) { + var m = this.extent(get)[1]; + return m != null ? get(m) : undefined; +}; + +prototype$7.quartile = function(get) { + if (this._get !== get || !this._q) { + this._q = quartiles(this.values(), get); + this._get = get; + } + return this._q; +}; + +prototype$7.q1 = function(get) { + return this.quartile(get)[0]; +}; + +prototype$7.q2 = function(get) { + return this.quartile(get)[1]; +}; + +prototype$7.q3 = function(get) { + return this.quartile(get)[2]; +}; + +prototype$7.ci = function(get) { + if (this._get !== get || !this._ci) { + this._ci = bootstrapCI(this.values(), 1000, 0.05, get); + this._get = get; + } + return this._ci; +}; + +prototype$7.ci0 = function(get) { + return this.ci(get)[0]; +}; + +prototype$7.ci1 = function(get) { + return this.ci(get)[1]; +}; + +/** + * Group-by aggregation operator. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {Array} [params.groupby] - An array of accessors to groupby. + * @param {Array} [params.fields] - An array of accessors to aggregate. + * @param {Array} [params.ops] - An array of strings indicating aggregation operations. + * @param {Array} [params.as] - An array of output field names for aggregated values. + * @param {boolean} [params.cross=false] - A flag indicating that the full + * cross-product of groupby values should be generated, including empty cells. + * If true, the drop parameter is ignored and empty cells are retained. + * @param {boolean} [params.drop=true] - A flag indicating if empty cells should be removed. + */ +function Aggregate(params) { + Transform.call(this, null, params); + + this._adds = []; // array of added output tuples + this._mods = []; // array of modified output tuples + this._alen = 0; // number of active added tuples + this._mlen = 0; // number of active modified tuples + this._drop = true; // should empty aggregation cells be removed + this._cross = false; // produce full cross-product of group-by values + + this._dims = []; // group-by dimension accessors + this._dnames = []; // group-by dimension names + + this._measures = []; // collection of aggregation monoids + this._countOnly = false; // flag indicating only count aggregation + this._counts = null; // collection of count fields + this._prev = null; // previous aggregation cells + + this._inputs = null; // array of dependent input tuple field names + this._outputs = null; // array of output tuple field names +} + +Aggregate.Definition = { + "type": "Aggregate", + "metadata": {"generates": true, "changes": true}, + "params": [ + { "name": "groupby", "type": "field", "array": true }, + { "name": "ops", "type": "enum", "array": true, "values": ValidAggregateOps }, + { "name": "fields", "type": "field", "null": true, "array": true }, + { "name": "as", "type": "string", "null": true, "array": true }, + { "name": "drop", "type": "boolean", "default": true }, + { "name": "cross", "type": "boolean", "default": false }, + { "name": "key", "type": "field" } + ] +}; + +var prototype$8 = inherits(Aggregate, Transform); + +prototype$8.transform = function(_, pulse) { + var aggr = this, + out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS), + mod; + + this.stamp = out.stamp; + + if (this.value && ((mod = _.modified()) || pulse.modified(this._inputs))) { + this._prev = this.value; + this.value = mod ? this.init(_) : {}; + pulse.visit(pulse.SOURCE, function(t) { aggr.add(t); }); + } else { + this.value = this.value || this.init(_); + pulse.visit(pulse.REM, function(t) { aggr.rem(t); }); + pulse.visit(pulse.ADD, function(t) { aggr.add(t); }); + } + + // Indicate output fields and return aggregate tuples. + out.modifies(this._outputs); + + // Should empty cells be dropped? + aggr._drop = _.drop !== false; + + // If domain cross-product requested, generate empty cells as needed + // and ensure that empty cells are not dropped + if (_.cross && aggr._dims.length > 1) { + aggr._drop = false; + this.cross(); + } + + return aggr.changes(out); +}; + +prototype$8.cross = function() { + var aggr = this, + curr = aggr.value, + dims = aggr._dnames, + vals = dims.map(function() { return {}; }), + n = dims.length; + + // collect all group-by domain values + function collect(cells) { + var key, i, t, v; + for (key in cells) { + t = cells[key].tuple; + for (i=0; i} params.fields - The fields to compare. + * @param {Array} [params.orders] - The sort orders. + * Each entry should be one of "ascending" (default) or "descending". + */ +function Compare(params) { + Operator.call(this, null, update$1, params); +} + +inherits(Compare, Operator); + +function update$1(_) { + return (this.value && !_.modified()) + ? this.value + : compare(_.fields, _.orders); +} + +/** + * Count regexp-defined pattern occurrences in a text field. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {function(object): *} params.field - An accessor for the text field. + * @param {string} [params.pattern] - RegExp string defining the text pattern. + * @param {string} [params.case] - One of 'lower', 'upper' or null (mixed) case. + * @param {string} [params.stopwords] - RegExp string of words to ignore. + */ +function CountPattern(params) { + Transform.call(this, null, params); +} + +CountPattern.Definition = { + "type": "CountPattern", + "metadata": {"generates": true, "changes": true}, + "params": [ + { "name": "field", "type": "field", "required": true }, + { "name": "case", "type": "enum", "values": ["upper", "lower", "mixed"], "default": "mixed" }, + { "name": "pattern", "type": "string", "default": "[\\w\"]+" }, + { "name": "stopwords", "type": "string", "default": "" }, + { "name": "as", "type": "string", "array": true, "length": 2, "default": ["text", "count"] } + ] +}; + +function tokenize(text, tcase, match) { + switch (tcase) { + case 'upper': text = text.toUpperCase(); break; + case 'lower': text = text.toLowerCase(); break; + } + return text.match(match); +} + +var prototype$b = inherits(CountPattern, Transform); + +prototype$b.transform = function(_, pulse) { + function process(update) { + return function(tuple) { + var tokens = tokenize(get(tuple), _.case, match) || [], t; + for (var i=0, n=tokens.length; i} [params.as] - The names of the output fields. + */ +function Cross(params) { + Transform.call(this, null, params); +} + +Cross.Definition = { + "type": "Cross", + "metadata": {"generates": true}, + "params": [ + { "name": "filter", "type": "expr" }, + { "name": "as", "type": "string", "array": true, "length": 2, "default": ["a", "b"] } + ] +}; + +var prototype$c = inherits(Cross, Transform); + +prototype$c.transform = function(_, pulse) { + var out = pulse.fork(pulse.NO_SOURCE), + data = this.value, + as = _.as || ['a', 'b'], + a = as[0], b = as[1], + reset = !data + || pulse.changed(pulse.ADD_REM) + || _.modified('as') + || _.modified('filter'); + + if (reset) { + if (data) out.rem = data; + data = pulse.materialize(pulse.SOURCE).source; + out.add = this.value = cross(data, a, b, _.filter || truthy); + } else { + out.mod = data; + } + + out.source = this.value; + return out.modifies(as); +}; + +function cross(input, a, b, filter) { + var data = [], + t = {}, + n = input.length, + i = 0, + j, left; + + for (; i} - A method for requesting + * source data. Used for distributions (such as KDE) that + * require sample data points. This method will only be + * invoked if the 'from' parameter for a target data source + * is not provided. Typically this method returns backing + * source data for a Pulse object. + * @return {object} - The output distribution object. + */ +function parse$2(def, data) { + var func = def[FUNCTION]; + if (!Distributions.hasOwnProperty(func)) { + error('Unknown distribution function: ' + func); + } + + var d = Distributions[func](); + + for (var name in def) { + // if data field, extract values + if (name === FIELD) { + d.data((def.from || data()).map(def[name])); + } + + // if distribution mixture, recurse to parse each definition + else if (name === DISTRIBUTIONS) { + d[name](def[name].map(function(_) { return parse$2(_, data); })); + } + + // otherwise, simply set the parameter + else if (typeof d[name] === FUNCTION) { + d[name](def[name]); + } + } + + return d; +} + +/** + * Grid sample points for a probability density. Given a distribution and + * a sampling extent, will generate points suitable for plotting either + * PDF (probability density function) or CDF (cumulative distribution + * function) curves. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {object} params.distribution - The probability distribution. This + * is an object parameter dependent on the distribution type. + * @param {string} [params.method='pdf'] - The distribution method to sample. + * One of 'pdf' or 'cdf'. + * @param {Array} [params.extent] - The [min, max] extent over which + * to sample the distribution. This argument is required in most cases, but + * can be omitted if the distribution (e.g., 'kde') supports a 'data' method + * that returns numerical sample points from which the extent can be deduced. + * @param {number} [params.minsteps=25] - The minimum number of curve samples + * for plotting the density. + * @param {number} [params.maxsteps=200] - The maximum number of curve samples + * for plotting the density. + * @param {number} [params.steps] - The exact number of curve samples for + * plotting the density. If specified, overrides both minsteps and maxsteps + * to set an exact number of uniform samples. Useful in conjunction with + * a fixed extent to ensure consistent sample points for stacked densities. + */ +function Density(params) { + Transform.call(this, null, params); +} + +var distributions = [ + { + "key": {"function": "normal"}, + "params": [ + { "name": "mean", "type": "number", "default": 0 }, + { "name": "stdev", "type": "number", "default": 1 } + ] + }, + { + "key": {"function": "uniform"}, + "params": [ + { "name": "min", "type": "number", "default": 0 }, + { "name": "max", "type": "number", "default": 1 } + ] + }, + { + "key": {"function": "kde"}, + "params": [ + { "name": "field", "type": "field", "required": true }, + { "name": "from", "type": "data" }, + { "name": "bandwidth", "type": "number", "default": 0 } + ] + } +]; + +var mixture = { + "key": {"function": "mixture"}, + "params": [ + { "name": "distributions", "type": "param", "array": true, + "params": distributions }, + { "name": "weights", "type": "number", "array": true } + ] +}; + +Density.Definition = { + "type": "Density", + "metadata": {"generates": true}, + "params": [ + { "name": "extent", "type": "number", "array": true, "length": 2 }, + { "name": "steps", "type": "number" }, + { "name": "minsteps", "type": "number", "default": 25 }, + { "name": "maxsteps", "type": "number", "default": 200 }, + { "name": "method", "type": "string", "default": "pdf", + "values": ["pdf", "cdf"] }, + { "name": "distribution", "type": "param", + "params": distributions.concat(mixture) }, + { "name": "as", "type": "string", "array": true, + "default": ["value", "density"] } + ] +}; + +var prototype$d = inherits(Density, Transform); + +prototype$d.transform = function(_, pulse) { + var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS); + + if (!this.value || pulse.changed() || _.modified()) { + var dist = parse$2(_.distribution, source(pulse)), + minsteps = _.steps || _.minsteps || 25, + maxsteps = _.steps || _.maxsteps || 200, + method = _.method || 'pdf'; + + if (method !== 'pdf' && method !== 'cdf') { + error('Invalid density method: ' + method); + } + if (!_.extent && !dist.data) { + error('Missing density extent parameter.'); + } + method = dist[method]; + + var as = _.as || ['value', 'density'], + domain = _.extent || extent$1(dist.data()), + values = sampleCurve(method, domain, minsteps, maxsteps).map(v => { + var tuple = {}; + tuple[as[0]] = v[0]; + tuple[as[1]] = v[1]; + return ingest(tuple); + }); + + if (this.value) out.rem = this.value; + this.value = out.add = out.source = values; + } + + return out; +}; + +function source(pulse) { + return function() { return pulse.materialize(pulse.SOURCE).source; }; +} + +/** + * Wraps an expression function with access to external parameters. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {function} params.expr - The expression function. The + * function should accept both a datum and a parameter object. + * This operator's value will be a new function that wraps the + * expression function with access to this operator's parameters. + */ +function Expression(params) { + Operator.call(this, null, update$2, params); + this.modified(true); +} + +inherits(Expression, Operator); + +function update$2(_) { + var expr = _.expr; + return this.value && !_.modified('expr') + ? this.value + : accessor( + datum => expr(datum, _), + accessorFields(expr), + accessorName(expr) + ); +} + +/** + * Computes extents (min/max) for a data field. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {function(object): *} params.field - The field over which to compute extends. + */ +function Extent(params) { + Transform.call(this, [undefined, undefined], params); +} + +Extent.Definition = { + "type": "Extent", + "metadata": {}, + "params": [ + { "name": "field", "type": "field", "required": true } + ] +}; + +var prototype$e = inherits(Extent, Transform); + +prototype$e.transform = function(_, pulse) { + var extent = this.value, + field = _.field, + min = extent[0], + max = extent[1], + mod; + + mod = pulse.changed() + || pulse.modified(field.fields) + || _.modified('field'); + + if (mod || min == null) { + min = +Infinity; + max = -Infinity; + } + + pulse.visit(mod ? pulse.SOURCE : pulse.ADD, function(t) { + var v = field(t); + if (v != null) { + // coerce to number + v = +v; + // NaNs will fail all comparisons! + if (v < min) min = v; + if (v > max) max = v; + } + }); + + if (!isFinite(min) || !isFinite(max)) { + min = max = undefined; + } + this.value = [min, max]; +}; + +/** + * Provides a bridge between a parent transform and a target subflow that + * consumes only a subset of the tuples that pass through the parent. + * @constructor + * @param {Pulse} pulse - A pulse to use as the value of this operator. + * @param {Transform} parent - The parent transform (typically a Facet instance). + * @param {Transform} target - A transform that receives the subflow of tuples. + */ +function Subflow(pulse, parent) { + Operator.call(this, pulse); + this.parent = parent; +} + +var prototype$f = inherits(Subflow, Operator); + +prototype$f.connect = function(target) { + this.targets().add(target); + return (target.source = this); +}; + +/** + * Add an 'add' tuple to the subflow pulse. + * @param {Tuple} t - The tuple being added. + */ +prototype$f.add = function(t) { + this.value.add.push(t); +}; + +/** + * Add a 'rem' tuple to the subflow pulse. + * @param {Tuple} t - The tuple being removed. + */ +prototype$f.rem = function(t) { + this.value.rem.push(t); +}; + +/** + * Add a 'mod' tuple to the subflow pulse. + * @param {Tuple} t - The tuple being modified. + */ +prototype$f.mod = function(t) { + this.value.mod.push(t); +}; + +/** + * Re-initialize this operator's pulse value. + * @param {Pulse} pulse - The pulse to copy from. + * @see Pulse.init + */ +prototype$f.init = function(pulse) { + this.value.init(pulse, pulse.NO_SOURCE); +}; + +/** + * Evaluate this operator. This method overrides the + * default behavior to simply return the contained pulse value. + * @return {Pulse} + */ +prototype$f.evaluate = function() { + // assert: this.value.stamp === pulse.stamp + return this.value; +}; + +/** + * Facets a dataflow into a set of subflows based on a key. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {function(Dataflow, string): Operator} params.subflow - A function + * that generates a subflow of operators and returns its root operator. + * @param {function(object): *} params.key - The key field to facet by. + */ +function Facet(params) { + Transform.call(this, {}, params); + this._keys = fastmap(); // cache previously calculated key values + + // keep track of active subflows, use as targets array for listeners + // this allows us to limit propagation to only updated subflows + var a = this._targets = []; + a.active = 0; + a.forEach = function(f) { + for (var i=0, n=a.active; i df.cleanThreshold) df.runAfter(cache.clean); + return pulse; +}; + +/** + * Generates one or more field accessor functions. + * If the 'name' parameter is an array, an array of field accessors + * will be created and the 'as' parameter will be ignored. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {string} params.name - The field name(s) to access. + * @param {string} params.as - The accessor function name. + */ +function Field(params) { + Operator.call(this, null, update$3, params); +} + +inherits(Field, Operator); + +function update$3(_) { + return (this.value && !_.modified()) ? this.value + : isArray(_.name) ? array(_.name).map(function(f) { return field(f); }) + : field(_.name, _.as); +} + +/** + * Filters data tuples according to a predicate function. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {function(object): *} params.expr - The predicate expression function + * that determines a tuple's filter status. Truthy values pass the filter. + */ +function Filter(params) { + Transform.call(this, fastmap(), params); +} + +Filter.Definition = { + "type": "Filter", + "metadata": {"changes": true}, + "params": [ + { "name": "expr", "type": "expr", "required": true } + ] +}; + +var prototype$h = inherits(Filter, Transform); + +prototype$h.transform = function(_, pulse) { + var df = pulse.dataflow, + cache = this.value, // cache ids of filtered tuples + output = pulse.fork(), + add = output.add, + rem = output.rem, + mod = output.mod, + test = _.expr, + isMod = true; + + pulse.visit(pulse.REM, function(t) { + var id = tupleid(t); + if (!cache.has(id)) rem.push(t); + else cache.delete(id); + }); + + pulse.visit(pulse.ADD, function(t) { + if (test(t, _)) add.push(t); + else cache.set(tupleid(t), 1); + }); + + function revisit(t) { + var id = tupleid(t), + b = test(t, _), + s = cache.get(id); + if (b && s) { + cache.delete(id); + add.push(t); + } else if (!b && !s) { + cache.set(id, 1); + rem.push(t); + } else if (isMod && b && !s) { + mod.push(t); + } + } + + pulse.visit(pulse.MOD, revisit); + + if (_.modified()) { + isMod = false; + pulse.visit(pulse.REFLOW, revisit); + } + + if (cache.empty > df.cleanThreshold) df.runAfter(cache.clean); + return output; +}; + +// use either provided alias or accessor field name +function fieldNames(fields, as) { + if (!fields) return null; + return fields.map(function(f, i) { + return as[i] || accessorName(f); + }); +} + +/** + * Flattens array-typed field values into new data objects. + * If multiple fields are specified, they are treated as parallel arrays, + * with output values included for each matching index (or null if missing). + * @constructor + * @param {object} params - The parameters for this operator. + * @param {Array} params.fields - An array of field + * accessors for the tuple fields that should be flattened. + * @param {Array} [params.as] - Output field names for flattened + * array fields. Any unspecified fields will use the field name provided + * by the fields accessors. + */ +function Flatten(params) { + Transform.call(this, [], params); +} + +Flatten.Definition = { + "type": "Flatten", + "metadata": {"generates": true}, + "params": [ + { "name": "fields", "type": "field", "array": true, "required": true }, + { "name": "as", "type": "string", "array": true } + ] +}; + +var prototype$i = inherits(Flatten, Transform); + +prototype$i.transform = function(_, pulse) { + var out = pulse.fork(pulse.NO_SOURCE), + fields = _.fields, + as = fieldNames(fields, _.as || []), + m = as.length; + + // remove any previous results + out.rem = this.value; + + // generate flattened tuples + pulse.visit(pulse.SOURCE, function(t) { + var arrays = fields.map(function(f) { return f(t); }), + maxlen = arrays.reduce(function(l, a) { return Math.max(l, a.length); }, 0), + i = 0, j, d, v; + + for (; i} [params.as] - Output field names for folded key + * and value fields, defaults to ['key', 'value']. + */ +function Fold(params) { + Transform.call(this, [], params); +} + +Fold.Definition = { + "type": "Fold", + "metadata": {"generates": true}, + "params": [ + { "name": "fields", "type": "field", "array": true, "required": true }, + { "name": "as", "type": "string", "array": true, "length": 2, "default": ["key", "value"] } + ] +}; + +var prototype$j = inherits(Fold, Transform); + +prototype$j.transform = function(_, pulse) { + var out = pulse.fork(pulse.NO_SOURCE), + fields = _.fields, + fnames = fields.map(accessorName), + as = _.as || ['key', 'value'], + k = as[0], + v = as[1], + n = fields.length; + + out.rem = this.value; + + pulse.visit(pulse.SOURCE, function(t) { + for (var i=0, d; i 0) { + // need more tuples, generate and add + for (add=[]; --num >= 0;) { + add.push(t = ingest(gen(_))); + data.push(t); + } + out.add = out.add.length + ? out.materialize(out.ADD).add.concat(add) + : add; + } else { + // need fewer tuples, remove + rem = data.slice(0, -num); + out.rem = out.rem.length + ? out.materialize(out.REM).rem.concat(rem) + : rem; + data = data.slice(-num); + } + + out.source = this.value = data; + return out; +}; + +function ascending$2(a, b) { + return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; +} + +function bisector$2(compare) { + if (compare.length === 1) compare = ascendingComparator$2(compare); + return { + left: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) < 0) lo = mid + 1; + else hi = mid; + } + return lo; + }, + right: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) > 0) hi = mid; + else lo = mid + 1; + } + return lo; + } + }; +} + +function ascendingComparator$2(f) { + return function(d, x) { + return ascending$2(f(d), x); + }; +} + +var ascendingBisect$2 = bisector$2(ascending$2); + +function extent$2(values, valueof) { + let min; + let max; + if (valueof === undefined) { + for (const value of values) { + if (value != null) { + if (min === undefined) { + if (value >= value) min = max = value; + } else { + if (min > value) min = value; + if (max < value) max = value; + } + } + } + } else { + let index = -1; + for (let value of values) { + if ((value = valueof(value, ++index, values)) != null) { + if (min === undefined) { + if (value >= value) min = max = value; + } else { + if (min > value) min = value; + if (max < value) max = value; + } + } + } + } + return [min, max]; +} + +function range(start, stop, step) { + start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step; + + var i = -1, + n = Math.max(0, Math.ceil((stop - start) / step)) | 0, + range = new Array(n); + + while (++i < n) { + range[i] = start + i * step; + } + + return range; +} + +function number$1(x) { + return x === null ? NaN : +x; +} + +function quantile$1(values, p, valueof = number$1) { + if (!(n = values.length)) return; + if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values); + if (p >= 1) return +valueof(values[n - 1], n - 1, values); + var n, + i = (n - 1) * p, + i0 = Math.floor(i), + value0 = +valueof(values[i0], i0, values), + value1 = +valueof(values[i0 + 1], i0 + 1, values); + return value0 + (value1 - value0) * (i - i0); +} + +function max(values, valueof) { + let max; + if (valueof === undefined) { + for (const value of values) { + if (value != null + && (max < value || (max === undefined && value >= value))) { + max = value; + } + } + } else { + let index = -1; + for (let value of values) { + if ((value = valueof(value, ++index, values)) != null + && (max < value || (max === undefined && value >= value))) { + max = value; + } + } + } + return max; +} + +function mean(values, valueof) { + let count = 0; + let sum = 0; + if (valueof === undefined) { + for (let value of values) { + if (value != null && (value = +value) >= value) { + ++count, sum += value; + } + } + } else { + let index = -1; + for (let value of values) { + if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) { + ++count, sum += value; + } + } + } + if (count) return sum / count; +} + +// Based on https://github.com/mourner/quickselect +// ISC license, Copyright 2018 Vladimir Agafonkin. +function quickselect(array, k, left = 0, right = array.length - 1, compare = ascending$2) { + while (right > left) { + if (right - left > 600) { + const n = right - left + 1; + const m = k - left + 1; + const z = Math.log(n); + const s = 0.5 * Math.exp(2 * z / 3); + const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1); + const newLeft = Math.max(left, Math.floor(k - m * s / n + sd)); + const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd)); + quickselect(array, k, newLeft, newRight, compare); + } + + const t = array[k]; + let i = left; + let j = right; + + swap(array, left, k); + if (compare(array[right], t) > 0) swap(array, left, right); + + while (i < j) { + swap(array, i, j), ++i, --j; + while (compare(array[i], t) < 0) ++i; + while (compare(array[j], t) > 0) --j; + } + + if (compare(array[left], t) === 0) swap(array, left, j); + else ++j, swap(array, j, right); + + if (j <= k) left = j + 1; + if (k <= j) right = j - 1; + } + return array; +} + +function swap(array, i, j) { + const t = array[i]; + array[i] = array[j]; + array[j] = t; +} + +function* numbers$1(values, valueof) { + if (valueof === undefined) { + for (let value of values) { + if (value != null && (value = +value) >= value) { + yield value; + } + } + } else { + let index = -1; + for (let value of values) { + if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) { + yield value; + } + } + } +} + +function median(values, valueof) { + values = Float64Array.from(numbers$1(values, valueof)); + if (!values.length) return; + const n = values.length; + const i = n >> 1; + quickselect(values, i - 1, 0); + if ((n & 1) === 0) quickselect(values, i, i); + return quantile$1(values, 0.5); +} + +function min(values, valueof) { + let min; + if (valueof === undefined) { + for (const value of values) { + if (value != null + && (min > value || (min === undefined && value >= value))) { + min = value; + } + } + } else { + let index = -1; + for (let value of values) { + if ((value = valueof(value, ++index, values)) != null + && (min > value || (min === undefined && value >= value))) { + min = value; + } + } + } + return min; +} + +var Methods = { + value: 'value', + median: median, + mean: mean, + min: min, + max: max +}; + +var Empty = []; + +/** + * Impute missing values. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {function(object): *} params.field - The value field to impute. + * @param {Array} [params.groupby] - An array of + * accessors to determine series within which to perform imputation. + * @param {function(object): *} params.key - An accessor for a key value. + * Each key value should be unique within a group. New tuples will be + * imputed for any key values that are not found within a group. + * @param {Array<*>} [params.keyvals] - Optional array of required key + * values. New tuples will be imputed for any key values that are not + * found within a group. In addition, these values will be automatically + * augmented with the key values observed in the input data. + * @param {string} [method='value'] - The imputation method to use. One of + * 'value', 'mean', 'median', 'max', 'min'. + * @param {*} [value=0] - The constant value to use for imputation + * when using method 'value'. + */ +function Impute(params) { + Transform.call(this, [], params); +} + +Impute.Definition = { + "type": "Impute", + "metadata": {"changes": true}, + "params": [ + { "name": "field", "type": "field", "required": true }, + { "name": "key", "type": "field", "required": true }, + { "name": "keyvals", "array": true }, + { "name": "groupby", "type": "field", "array": true }, + { "name": "method", "type": "enum", "default": "value", + "values": ["value", "mean", "median", "max", "min"] }, + { "name": "value", "default": 0 } + ] +}; + +var prototype$m = inherits(Impute, Transform); + +function getValue(_) { + var m = _.method || Methods.value, v; + + if (Methods[m] == null) { + error('Unrecognized imputation method: ' + m); + } else if (m === Methods.value) { + v = _.value !== undefined ? _.value : 0; + return function() { return v; }; + } else { + return Methods[m]; + } +} + +function getField(_) { + var f = _.field; + return function(t) { return t ? f(t) : NaN; }; +} + +prototype$m.transform = function(_, pulse) { + var out = pulse.fork(pulse.ALL), + impute = getValue(_), + field = getField(_), + fName = accessorName(_.field), + kName = accessorName(_.key), + gNames = (_.groupby || []).map(accessorName), + groups = partition(pulse.source, _.groupby, _.key, _.keyvals), + curr = [], + prev = this.value, + m = groups.domain.length, + group, value, gVals, kVal, g, i, j, l, n, t; + + for (g=0, l=groups.length; g} [params.groupby] - An array of accessors + * to groupby. + * @param {function(object): *} params.field - An accessor for the data field + * to estimate. + * @param {number} [params.bandwidth=0] - The KDE kernal bandwidth. + * If zero of unspecified, the bandwidth is automatically determined. + * @param {string} [params.cumulative=false] - A boolean flag indicating if a + * density (false) or cumulative distribution (true) should be generated. + * @param {Array} [params.extent] - The domain extent over which to + * plot the density. If unspecified, the [min, max] data extent is used. + * @param {number} [params.minsteps=25] - The minimum number of curve samples + * for plotting the density. + * @param {number} [params.maxsteps=200] - The maximum number of curve samples + * for plotting the density. + * @param {number} [params.steps] - The exact number of curve samples for + * plotting the density. If specified, overrides both minsteps and maxsteps + * to set an exact number of uniform samples. Useful in conjunction with + * a fixed extent to ensure consistent sample points for stacked densities. + */ +function KDE(params) { + Transform.call(this, null, params); +} + +KDE.Definition = { + "type": "KDE", + "metadata": {"generates": true}, + "params": [ + { "name": "groupby", "type": "field", "array": true }, + { "name": "field", "type": "field", "required": true }, + { "name": "cumulative", "type": "boolean", "default": false }, + { "name": "counts", "type": "boolean", "default": false }, + { "name": "bandwidth", "type": "number", "default": 0 }, + { "name": "extent", "type": "number", "array": true, "length": 2 }, + { "name": "steps", "type": "number" }, + { "name": "minsteps", "type": "number", "default": 25 }, + { "name": "maxsteps", "type": "number", "default": 200 }, + { "name": "as", "type": "string", "array": true, "default": ["value", "density"] } + ] +}; + +var prototype$o = inherits(KDE, Transform); + +prototype$o.transform = function(_, pulse) { + var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS); + + if (!this.value || pulse.changed() || _.modified()) { + const source = pulse.materialize(pulse.SOURCE).source, + groups = partition$1(source, _.groupby, _.field), + names = (_.groupby || []).map(accessorName), + bandwidth = _.bandwidth, + method = _.cumulative ? 'cdf' : 'pdf', + minsteps = _.steps || _.minsteps || 25, + maxsteps = _.steps || _.maxsteps || 200, + as = _.as || ['value', 'density'], + values = []; + + if (method !== 'pdf' && method !== 'cdf') { + error('Invalid density method: ' + method); + } + + groups.forEach(g => { + const density = randomKDE(g, bandwidth)[method], + scale = _.counts ? g.length : 1, + domain = _.extent || extent$2(g); + + sampleCurve(density, domain, minsteps, maxsteps).forEach(v => { + const t = {}; + for (let i=0; i} params.fields - The field name(s) for the key function. + * @param {boolean} params.flat - A boolean flag indicating if the field names + * should be treated as flat property names, side-stepping nested field + * lookups normally indicated by dot or bracket notation. + */ +function Key(params) { + Operator.call(this, null, update$4, params); +} + +inherits(Key, Operator); + +function update$4(_) { + return (this.value && !_.modified()) ? this.value : key(_.fields, _.flat); +} + +/** + * Load and parse data from an external source. Marshalls parameter + * values and then invokes the Dataflow request method. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {string} params.url - The URL to load from. + * @param {object} params.format - The data format options. + */ +function Load(params) { + Transform.call(this, [], params); +} + +var prototype$p = inherits(Load, Transform); + +prototype$p.transform = function(_, pulse) { + const df = pulse.dataflow; + + if (_.values) { + // parse and ingest values + return output(this, pulse, df.parse(_.values, _.format)); + } else { + // return promise for async loading + return df.request(_.url, _.format) + .then(res => output(this, pulse, res.data || [])); + } +}; + +function output(op, pulse, data) { + data.forEach(ingest); + const out = pulse.fork(pulse.NO_FIELDS & pulse.NO_SOURCE); + out.rem = op.value; + op.value = out.add = out.source = data; + return out; +} + +/** + * Extend tuples by joining them with values from a lookup table. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {Map} params.index - The lookup table map. + * @param {Array} params.as - Output field names for each lookup value. + * @param {*} [params.default] - A default value to use if lookup fails. + */ +function Lookup(params) { + Transform.call(this, {}, params); +} + +Lookup.Definition = { + "type": "Lookup", + "metadata": {"modifies": true}, + "params": [ + { "name": "index", "type": "index", "params": [ + {"name": "from", "type": "data", "required": true }, + {"name": "key", "type": "field", "required": true } + ] }, + { "name": "values", "type": "field", "array": true }, + { "name": "fields", "type": "field", "array": true, "required": true }, + { "name": "as", "type": "string", "array": true }, + { "name": "default", "default": null } + ] +}; + +var prototype$q = inherits(Lookup, Transform); + +prototype$q.transform = function(_, pulse) { + var out = pulse, + as = _.as, + keys = _.fields, + index = _.index, + values = _.values, + defaultValue = _.default==null ? null : _.default, + reset = _.modified(), + flag = reset ? pulse.SOURCE : pulse.ADD, + n = keys.length, + set, m, mods; + + if (values) { + m = values.length; + + if (n > 1 && !as) { + error('Multi-field lookup requires explicit "as" parameter.'); + } + if (as && as.length !== n * m) { + error('The "as" parameter has too few output field names.'); + } + as = as || values.map(accessorName); + + set = function(t) { + for (var i=0, k=0, j, v; i>} params.extents - The input extents. + */ +function MultiExtent(params) { + Operator.call(this, null, update$5, params); +} + +inherits(MultiExtent, Operator); + +function update$5(_) { + if (this.value && !_.modified()) { + return this.value; + } + + var min = +Infinity, + max = -Infinity, + ext = _.extents, + i, n, e; + + for (i=0, n=ext.length; i max) max = e[1]; + } + return [min, max]; +} + +/** + * Merge a collection of value arrays. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {Array>} params.values - The input value arrrays. + */ +function MultiValues(params) { + Operator.call(this, null, update$6, params); +} + +inherits(MultiValues, Operator); + +function update$6(_) { + return (this.value && !_.modified()) + ? this.value + : _.values.reduce(function(data, _) { return data.concat(_); }, []); +} + +/** + * Operator whose value is simply its parameter hash. This operator is + * useful for enabling reactive updates to values of nested objects. + * @constructor + * @param {object} params - The parameters for this operator. + */ +function Params(params) { + Transform.call(this, null, params); +} + +inherits(Params, Transform); + +Params.prototype.transform = function(_, pulse) { + this.modified(_.modified()); + this.value = _; + return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS); // do not pass tuples +}; + +/** + * Aggregate and pivot selected field values to become new fields. + * This operator is useful to construction cross-tabulations. + * @constructor + * @param {Array} [params.groupby] - An array of accessors + * to groupby. These fields act just like groupby fields of an Aggregate transform. + * @param {function(object): *} params.field - The field to pivot on. The unique + * values of this field become new field names in the output stream. + * @param {function(object): *} params.value - The field to populate pivoted fields. + * The aggregate values of this field become the values of the new pivoted fields. + * @param {string} [params.op] - The aggregation operation for the value field, + * applied per cell in the output stream. The default is "sum". + * @param {number} [params.limit] - An optional parameter indicating the maximum + * number of pivoted fields to generate. The pivoted field names are sorted in + * ascending order prior to enforcing the limit. + */ +function Pivot(params) { + Aggregate.call(this, params); +} + +Pivot.Definition = { + "type": "Pivot", + "metadata": {"generates": true, "changes": true}, + "params": [ + { "name": "groupby", "type": "field", "array": true }, + { "name": "field", "type": "field", "required": true }, + { "name": "value", "type": "field", "required": true }, + { "name": "op", "type": "enum", "values": ValidAggregateOps, "default": "sum" }, + { "name": "limit", "type": "number", "default": 0 }, + { "name": "key", "type": "field" } + ] +}; + +var prototype$r = inherits(Pivot, Aggregate); + +prototype$r._transform = prototype$r.transform; + +prototype$r.transform = function(_, pulse) { + return this._transform(aggregateParams(_, pulse), pulse); +}; + +// Shoehorn a pivot transform into an aggregate transform! +// First collect all unique pivot field values. +// Then generate aggregate fields for each output pivot field. +function aggregateParams(_, pulse) { + var key = _.field, + value = _.value, + op = (_.op === 'count' ? '__count__' : _.op) || 'sum', + fields = accessorFields(key).concat(accessorFields(value)), + keys = pivotKeys(key, _.limit || 0, pulse); + + return { + key: _.key, + groupby: _.groupby, + ops: keys.map(function() { return op; }), + fields: keys.map(function(k) { return get(k, key, value, fields); }), + as: keys.map(function(k) { return k + ''; }), + modified: _.modified.bind(_) + }; +} + +// Generate aggregate field accessor. +// Output NaN for non-existent values; aggregator will ignore! +function get(k, key, value, fields) { + return accessor( + function(d) { return key(d) === k ? value(d) : NaN; }, + fields, + k + '' + ); +} + +// Collect (and optionally limit) all unique pivot values. +function pivotKeys(key, limit, pulse) { + var map = {}, + list = []; + + pulse.visit(pulse.SOURCE, function(t) { + var k = key(t); + if (!map[k]) { + map[k] = 1; + list.push(k); + } + }); + + // TODO? Move this comparator to vega-util? + list.sort(function(u, v) { + return (uv||v==null) && u!=null ? 1 + : ((v=v instanceof Date?+v:v),(u=u instanceof Date?+u:u))!==u && v===v ? -1 + : v!==v && u===u ? 1 : 0; + }); + + return limit ? list.slice(0, limit) : list; +} + +/** + * Partitions pre-faceted data into tuple subflows. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {function(Dataflow, string): Operator} params.subflow - A function + * that generates a subflow of operators and returns its root operator. + * @param {function(object): Array} params.field - The field + * accessor for an array of subflow tuple objects. + */ +function PreFacet(params) { + Facet.call(this, params); +} + +var prototype$s = inherits(PreFacet, Facet); + +prototype$s.transform = function(_, pulse) { + var self = this, + flow = _.subflow, + field = _.field; + + if (_.modified('field') || field && pulse.modified(accessorFields(field))) { + error('PreFacet does not support field modification.'); + } + + this._targets.active = 0; // reset list of active subflows + + pulse.visit(pulse.MOD, function(t) { + var sf = self.subflow(tupleid(t), flow, pulse, t); + field ? field(t).forEach(function(_) { sf.mod(_); }) : sf.mod(t); + }); + + pulse.visit(pulse.ADD, function(t) { + var sf = self.subflow(tupleid(t), flow, pulse, t); + field ? field(t).forEach(function(_) { sf.add(ingest(_)); }) : sf.add(t); + }); + + pulse.visit(pulse.REM, function(t) { + var sf = self.subflow(tupleid(t), flow, pulse, t); + field ? field(t).forEach(function(_) { sf.rem(_); }) : sf.rem(t); + }); + + return pulse; +}; + +/** + * Performs a relational projection, copying selected fields from source + * tuples to a new set of derived tuples. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {Array} [params.as] - Output field names for each projected + * field. Any unspecified fields will use the field name provided by + * the field accessor. + */ +function Project(params) { + Transform.call(this, null, params); +} + +Project.Definition = { + "type": "Project", + "metadata": {"generates": true, "changes": true}, + "params": [ + { "name": "fields", "type": "field", "array": true }, + { "name": "as", "type": "string", "null": true, "array": true }, + ] +}; + +var prototype$t = inherits(Project, Transform); + +prototype$t.transform = function(_, pulse) { + var fields = _.fields, + as = fieldNames(_.fields, _.as || []), + derive = fields + ? function(s, t) { return project(s, t, fields, as); } + : rederive, + out, lut; + + if (this.value) { + lut = this.value; + } else { + pulse = pulse.addAll(); + lut = this.value = {}; + } + + out = pulse.fork(pulse.NO_SOURCE); + + pulse.visit(pulse.REM, function(t) { + var id = tupleid(t); + out.rem.push(lut[id]); + lut[id] = null; + }); + + pulse.visit(pulse.ADD, function(t) { + var dt = derive(t, ingest({})); + lut[tupleid(t)] = dt; + out.add.push(dt); + }); + + pulse.visit(pulse.MOD, function(t) { + out.mod.push(derive(t, lut[tupleid(t)])); + }); + + return out; +}; + +function project(s, t, fields, as) { + for (var i=0, n=fields.length; i= cap) { + p = res[idx]; + if (map[tupleid(p)]) out.rem.push(p); // eviction + res[idx] = t; + } + } + ++cnt; + } + + if (pulse.rem.length) { + // find all tuples that should be removed, add to output + pulse.visit(pulse.REM, function(t) { + var id = tupleid(t); + if (map[id]) { + map[id] = -1; + out.rem.push(t); + } + --cnt; + }); + + // filter removed tuples out of the sample reservoir + res = res.filter(function(t) { return map[tupleid(t)] !== -1; }); + } + + if ((pulse.rem.length || mod) && res.length < num && pulse.source) { + // replenish sample if backing data source is available + cap = cnt = res.length; + pulse.visit(pulse.SOURCE, function(t) { + // update, but skip previously sampled tuples + if (!map[tupleid(t)]) update(t); + }); + cap = -1; + } + + if (mod && res.length > num) { + for (var i=0, n=res.length-num; i df.cleanThreshold) df.runAfter(index.clean); + return pulse.fork(); +}; + +/** + * Extracts an array of values. Assumes the source data has already been + * reduced as needed (e.g., by an upstream Aggregate transform). + * @constructor + * @param {object} params - The parameters for this operator. + * @param {function(object): *} params.field - The domain field to extract. + * @param {function(*,*): number} [params.sort] - An optional + * comparator function for sorting the values. The comparator will be + * applied to backing tuples prior to value extraction. + */ +function Values(params) { + Transform.call(this, null, params); +} + +var prototype$A = inherits(Values, Transform); + +prototype$A.transform = function(_, pulse) { + var run = !this.value + || _.modified('field') + || _.modified('sort') + || pulse.changed() + || (_.sort && pulse.modified(_.sort.fields)); + + if (run) { + this.value = (_.sort + ? pulse.source.slice().sort(_.sort) + : pulse.source).map(_.field); + } +}; + +function WindowOp(op, field, param, as) { + let fn = WindowOps[op](field, param); + return { + init: fn.init || zero, + update: function(w, t) { t[as] = fn.next(w); } + }; +} + +const WindowOps = { + row_number: function() { + return { + next: w => w.index + 1 + }; + }, + rank: function() { + let rank; + return { + init: () => rank = 1, + next: w => { + let i = w.index, + data = w.data; + return (i && w.compare(data[i - 1], data[i])) ? (rank = i + 1) : rank; + } + }; + }, + dense_rank: function() { + let drank; + return { + init: () => drank = 1, + next: w => { + let i = w.index, + d = w.data; + return (i && w.compare(d[i - 1], d[i])) ? ++drank : drank; + } + }; + }, + percent_rank: function() { + let rank = WindowOps.rank(), + next = rank.next; + return { + init: rank.init, + next: w => (next(w) - 1) / (w.data.length - 1) + }; + }, + cume_dist: function() { + let cume; + return { + init: () => cume = 0, + next: w => { + let i = w.index, + d = w.data, + c = w.compare; + if (cume < i) { + while (i + 1 < d.length && !c(d[i], d[i + 1])) ++i; + cume = i; + } + return (1 + cume) / d.length; + } + }; + }, + ntile: function(field, num) { + num = +num; + if (!(num > 0)) error('ntile num must be greater than zero.'); + let cume = WindowOps.cume_dist(), + next = cume.next; + return { + init: cume.init, + next: w => Math.ceil(num * next(w)) + }; + }, + + lag: function(field, offset) { + offset = +offset || 1; + return { + next: w => { + let i = w.index - offset; + return i >= 0 ? field(w.data[i]) : null; + } + }; + }, + lead: function(field, offset) { + offset = +offset || 1; + return { + next: w => { + let i = w.index + offset, + d = w.data; + return i < d.length ? field(d[i]) : null; + } + }; + }, + + first_value: function(field) { + return { + next: w => field(w.data[w.i0]) + }; + }, + last_value: function(field) { + return { + next: w => field(w.data[w.i1 - 1]) + } + }, + nth_value: function(field, nth) { + nth = +nth; + if (!(nth > 0)) error('nth_value nth must be greater than zero.'); + return { + next: w => { + let i = w.i0 + (nth - 1); + return i < w.i1 ? field(w.data[i]) : null; + } + } + }, + + prev_value: function(field) { + let prev = null; + return { + next: w => { + let v = field(w.data[w.index]); + return v != null ? (prev = v) : prev; + } + } + }, + next_value: function(field) { + let v = null, + i = -1; + return { + next: w => { + let d = w.data; + return w.index <= i ? v + : (i = find(field, d, w.index)) < 0 + ? (i = d.length, v = null) + : (v = field(d[i])); + } + }; + }, + +}; + +function find(field, data, index) { + for (let n = data.length; index < n; ++index) { + let v = field(data[index]); + if (v != null) return index; + } + return -1; +} + +var ValidWindowOps = Object.keys(WindowOps); + +function WindowState(_) { + let self = this, + ops = array(_.ops), + fields = array(_.fields), + params = array(_.params), + as = array(_.as), + outputs = self.outputs = [], + windows = self.windows = [], + inputs = {}, + map = {}, + countOnly = true, + counts = [], + measures = []; + + function visitInputs(f) { + array(accessorFields(f)).forEach(_ => inputs[_] = 1); + } + visitInputs(_.sort); + + ops.forEach(function(op, i) { + let field = fields[i], + mname = accessorName(field), + name = measureName(op, mname, as[i]); + + visitInputs(field); + outputs.push(name); + + // Window operation + if (WindowOps.hasOwnProperty(op)) { + windows.push(WindowOp(op, fields[i], params[i], name)); + } + + // Aggregate operation + else { + if (field == null && op !== 'count') { + error('Null aggregate field specified.'); + } + if (op === 'count') { + counts.push(name); + return; + } + + countOnly = false; + let m = map[mname]; + if (!m) { + m = (map[mname] = []); + m.field = field; + measures.push(m); + } + m.push(createMeasure(op, name)); + } + }); + + if (counts.length || measures.length) { + self.cell = cell(measures, counts, countOnly); + } + + self.inputs = Object.keys(inputs); +} + +const prototype$B = WindowState.prototype; + +prototype$B.init = function() { + this.windows.forEach(_ => _.init()); + if (this.cell) this.cell.init(); +}; + +prototype$B.update = function(w, t) { + let self = this, + cell = self.cell, + wind = self.windows, + data = w.data, + m = wind && wind.length, + j; + + if (cell) { + for (j=w.p0; j compileMeasures(m, m.field)); + + let cell = { + num: 0, + agg: null, + store: false, + count: counts + }; + + if (!countOnly) { + var n = measures.length, + a = cell.agg = Array(n), + i = 0; + for (; i} [params.groupby] - An array of accessors by which to partition tuples into separate windows. + * @param {Array} params.ops - An array of strings indicating window operations to perform. + * @param {Array} [params.fields] - An array of accessors + * for data fields to use as inputs to window operations. + * @param {Array<*>} [params.params] - An array of parameter values for window operations. + * @param {Array} [params.as] - An array of output field names for window operations. + * @param {Array} [params.frame] - Window frame definition as two-element array. + * @param {boolean} [params.ignorePeers=false] - If true, base window frame boundaries on row + * number alone, ignoring peers with identical sort values. If false (default), + * the window boundaries will be adjusted to include peer values. + */ +function Window(params) { + Transform.call(this, {}, params); + this._mlen = 0; + this._mods = []; +} + +Window.Definition = { + "type": "Window", + "metadata": {"modifies": true}, + "params": [ + { "name": "sort", "type": "compare" }, + { "name": "groupby", "type": "field", "array": true }, + { "name": "ops", "type": "enum", "array": true, "values": ValidWindowOps.concat(ValidAggregateOps) }, + { "name": "params", "type": "number", "null": true, "array": true }, + { "name": "fields", "type": "field", "null": true, "array": true }, + { "name": "as", "type": "string", "null": true, "array": true }, + { "name": "frame", "type": "number", "null": true, "array": true, "length": 2, "default": [null, 0] }, + { "name": "ignorePeers", "type": "boolean", "default": false } + ] +}; + +var prototype$C = inherits(Window, Transform); + +prototype$C.transform = function(_, pulse) { + var self = this, + state = self.state, + mod = _.modified(), + i, n; + + this.stamp = pulse.stamp; + + // initialize window state + if (!state || mod) { + state = self.state = new WindowState(_); + } + + // retrieve group for a tuple + var key = groupkey(_.groupby); + function group(t) { return self.group(key(t)); } + + // partition input tuples + if (mod || pulse.modified(state.inputs)) { + self.value = {}; + pulse.visit(pulse.SOURCE, function(t) { group(t).add(t); }); + } else { + pulse.visit(pulse.REM, function(t) { group(t).remove(t); }); + pulse.visit(pulse.ADD, function(t) { group(t).add(t); }); + } + + // perform window calculations for each modified partition + for (i=0, n=self._mlen; i 0 && !c(d[r0], d[r0-1])) w.i0 = bisect.left(d, d[r0]); + if (r1 < n && !c(d[r1], d[r1+1])) w.i1 = bisect.right(d, d[r1]); +} + + + +var tx = /*#__PURE__*/Object.freeze({ + aggregate: Aggregate, + bin: Bin, + collect: Collect, + compare: Compare, + countpattern: CountPattern, + cross: Cross, + density: Density, + expression: Expression, + extent: Extent, + facet: Facet, + field: Field, + filter: Filter, + flatten: Flatten, + fold: Fold, + formula: Formula, + generate: Generate, + impute: Impute, + joinaggregate: JoinAggregate, + kde: KDE, + key: Key, + load: Load, + lookup: Lookup, + multiextent: MultiExtent, + multivalues: MultiValues, + params: Params, + pivot: Pivot, + prefacet: PreFacet, + project: Project, + proxy: Proxy, + relay: Relay, + sample: Sample, + sequence: Sequence, + sieve: Sieve, + subflow: Subflow, + tupleindex: TupleIndex, + values: Values, + window: Window +}); + +const Top = 'top'; +const Left = 'left'; +const Right = 'right'; +const Bottom = 'bottom'; + +const TopLeft = 'top-left'; +const TopRight = 'top-right'; +const BottomLeft = 'bottom-left'; +const BottomRight = 'bottom-right'; + +const Start = 'start'; +const Middle = 'middle'; +const End = 'end'; + +const X = 'x'; +const Y = 'y'; + +const Group = 'group'; + +const AxisRole = 'axis'; +const TitleRole = 'title'; +const FrameRole = 'frame'; +const ScopeRole = 'scope'; +const LegendRole = 'legend'; + +const RowHeader = 'row-header'; +const RowFooter = 'row-footer'; +const RowTitle = 'row-title'; +const ColHeader = 'column-header'; +const ColFooter = 'column-footer'; +const ColTitle = 'column-title'; + +const Padding = 'padding'; + +const Symbols = 'symbol'; + +const Fit = 'fit'; +const FitX = 'fit-x'; +const FitY = 'fit-y'; +const Pad = 'pad'; +const None$1 = 'none'; + +const All = 'all'; +const Each = 'each'; +const Flush = 'flush'; + +const Column = 'column'; +const Row = 'row'; + +function Bounds(b) { + this.clear(); + if (b) this.union(b); +} + +var prototype$D = Bounds.prototype; + +prototype$D.clone = function() { + return new Bounds(this); +}; + +prototype$D.clear = function() { + this.x1 = +Number.MAX_VALUE; + this.y1 = +Number.MAX_VALUE; + this.x2 = -Number.MAX_VALUE; + this.y2 = -Number.MAX_VALUE; + return this; +}; + +prototype$D.empty = function() { + return ( + this.x1 === +Number.MAX_VALUE && + this.y1 === +Number.MAX_VALUE && + this.x2 === -Number.MAX_VALUE && + this.y2 === -Number.MAX_VALUE + ); +}; + +prototype$D.equals = function(b) { + return ( + this.x1 === b.x1 && + this.y1 === b.y1 && + this.x2 === b.x2 && + this.y2 === b.y2 + ); +}; + +prototype$D.set = function(x1, y1, x2, y2) { + if (x2 < x1) { + this.x2 = x1; + this.x1 = x2; + } else { + this.x1 = x1; + this.x2 = x2; + } + if (y2 < y1) { + this.y2 = y1; + this.y1 = y2; + } else { + this.y1 = y1; + this.y2 = y2; + } + return this; +}; + +prototype$D.add = function(x, y) { + if (x < this.x1) this.x1 = x; + if (y < this.y1) this.y1 = y; + if (x > this.x2) this.x2 = x; + if (y > this.y2) this.y2 = y; + return this; +}; + +prototype$D.expand = function(d) { + this.x1 -= d; + this.y1 -= d; + this.x2 += d; + this.y2 += d; + return this; +}; + +prototype$D.round = function() { + this.x1 = Math.floor(this.x1); + this.y1 = Math.floor(this.y1); + this.x2 = Math.ceil(this.x2); + this.y2 = Math.ceil(this.y2); + return this; +}; + +prototype$D.translate = function(dx, dy) { + this.x1 += dx; + this.x2 += dx; + this.y1 += dy; + this.y2 += dy; + return this; +}; + +prototype$D.rotate = function(angle, x, y) { + const p = this.rotatedPoints(angle, x, y); + return this.clear() + .add(p[0], p[1]) + .add(p[2], p[3]) + .add(p[4], p[5]) + .add(p[6], p[7]); +}; + +prototype$D.rotatedPoints = function(angle, x, y) { + var {x1, y1, x2, y2} = this, + cos = Math.cos(angle), + sin = Math.sin(angle), + cx = x - x*cos + y*sin, + cy = y - x*sin - y*cos; + + return [ + cos*x1 - sin*y1 + cx, sin*x1 + cos*y1 + cy, + cos*x1 - sin*y2 + cx, sin*x1 + cos*y2 + cy, + cos*x2 - sin*y1 + cx, sin*x2 + cos*y1 + cy, + cos*x2 - sin*y2 + cx, sin*x2 + cos*y2 + cy + ]; +}; + +prototype$D.union = function(b) { + if (b.x1 < this.x1) this.x1 = b.x1; + if (b.y1 < this.y1) this.y1 = b.y1; + if (b.x2 > this.x2) this.x2 = b.x2; + if (b.y2 > this.y2) this.y2 = b.y2; + return this; +}; + +prototype$D.intersect = function(b) { + if (b.x1 > this.x1) this.x1 = b.x1; + if (b.y1 > this.y1) this.y1 = b.y1; + if (b.x2 < this.x2) this.x2 = b.x2; + if (b.y2 < this.y2) this.y2 = b.y2; + return this; +}; + +prototype$D.encloses = function(b) { + return b && ( + this.x1 <= b.x1 && + this.x2 >= b.x2 && + this.y1 <= b.y1 && + this.y2 >= b.y2 + ); +}; + +prototype$D.alignsWith = function(b) { + return b && ( + this.x1 == b.x1 || + this.x2 == b.x2 || + this.y1 == b.y1 || + this.y2 == b.y2 + ); +}; + +prototype$D.intersects = function(b) { + return b && !( + this.x2 < b.x1 || + this.x1 > b.x2 || + this.y2 < b.y1 || + this.y1 > b.y2 + ); +}; + +prototype$D.contains = function(x, y) { + return !( + x < this.x1 || + x > this.x2 || + y < this.y1 || + y > this.y2 + ); +}; + +prototype$D.width = function() { + return this.x2 - this.x1; +}; + +prototype$D.height = function() { + return this.y2 - this.y1; +}; + +var gradient_id = 0; + +const patternPrefix = 'p_'; + +function isGradient(value) { + return value && value.gradient; +} + +function gradientRef(g, defs, base) { + let id = g.id, + type = g.gradient, + prefix = type === 'radial' ? patternPrefix : ''; + + // check id, assign default values as needed + if (!id) { + id = g.id = 'gradient_' + (gradient_id++); + if (type === 'radial') { + g.x1 = get$1(g.x1, 0.5); + g.y1 = get$1(g.y1, 0.5); + g.r1 = get$1(g.r1, 0); + g.x2 = get$1(g.x2, 0.5); + g.y2 = get$1(g.y2, 0.5); + g.r2 = get$1(g.r2, 0.5); + prefix = patternPrefix; + } else { + g.x1 = get$1(g.x1, 0); + g.y1 = get$1(g.y1, 0); + g.x2 = get$1(g.x2, 1); + g.y2 = get$1(g.y2, 0); + } + } + + // register definition + defs[id] = g; + + // return url reference + return 'url(' + (base || '') + '#' + prefix + id + ')'; +} + +function get$1(val, def) { + return val != null ? val : def; +} + +function Gradient(p0, p1) { + var stops = [], gradient; + return gradient = { + gradient: 'linear', + x1: p0 ? p0[0] : 0, + y1: p0 ? p0[1] : 0, + x2: p1 ? p1[0] : 1, + y2: p1 ? p1[1] : 0, + stops: stops, + stop: function(offset, color) { + stops.push({offset: offset, color: color}); + return gradient; + } + }; +} + +function Item(mark) { + this.mark = mark; + this.bounds = (this.bounds || new Bounds()); +} + +function GroupItem(mark) { + Item.call(this, mark); + this.items = (this.items || []); +} + +inherits(GroupItem, Item); + +function domCanvas(w, h) { + if (typeof document !== 'undefined' && document.createElement) { + var c = document.createElement('canvas'); + if (c && c.getContext) { + c.width = w; + c.height = h; + return c; + } + } + return null; +} + +function domImage() { + return typeof Image !== 'undefined' ? Image : null; +} + +var NodeCanvas; + +try { + NodeCanvas = require('canvas'); + if (!(NodeCanvas && NodeCanvas.createCanvas)) { + NodeCanvas = null; + } +} catch (error) { + // do nothing +} + +function nodeCanvas(w, h, type) { + if (NodeCanvas) { + try { + return new NodeCanvas.Canvas(w, h, type); + } catch (e) { + // do nothing, return null on error + } + } + return null; +} + +function nodeImage() { + return (NodeCanvas && NodeCanvas.Image) || null; +} + +function canvas(w, h, type) { + return domCanvas(w, h) || nodeCanvas(w, h, type) || null; +} + +function image() { + return domImage() || nodeImage() || null; +} + +function ResourceLoader(customLoader) { + this._pending = 0; + this._loader = customLoader || loader(); +} + +var prototype$E = ResourceLoader.prototype; + +prototype$E.pending = function() { + return this._pending; +}; + +function increment(loader) { + loader._pending += 1; +} + +function decrement(loader) { + loader._pending -= 1; +} + +prototype$E.sanitizeURL = function(uri) { + var loader = this; + increment(loader); + + return loader._loader.sanitize(uri, {context:'href'}) + .then(function(opt) { + decrement(loader); + return opt; + }) + .catch(function() { + decrement(loader); + return null; + }); +}; + +prototype$E.loadImage = function(uri) { + var loader = this, + Image = image(); + increment(loader); + + return loader._loader + .sanitize(uri, {context: 'image'}) + .then(function(opt) { + var url = opt.href; + if (!url || !Image) throw {url: url}; + + var img = new Image(); + + img.onload = function() { + decrement(loader); + img.loaded = true; + }; + + img.onerror = function() { + decrement(loader); + img.loaded = false; + }; + + img.src = url; + return img; + }) + .catch(function(e) { + decrement(loader); + return {loaded: false, width: 0, height: 0, src: e && e.url || ''}; + }); +}; + +prototype$E.ready = function() { + var loader = this; + return new Promise(function(accept) { + function poll(value) { + if (!loader.pending()) accept(value); + else setTimeout(function() { poll(true); }, 10); + } + poll(false); + }); +}; + +var pi = Math.PI, + tau = 2 * pi, + epsilon = 1e-6, + tauEpsilon = tau - epsilon; + +function Path() { + this._x0 = this._y0 = // start of current subpath + this._x1 = this._y1 = null; // end of current subpath + this._ = ""; +} + +function path() { + return new Path; +} + +Path.prototype = path.prototype = { + constructor: Path, + moveTo: function(x, y) { + this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y); + }, + closePath: function() { + if (this._x1 !== null) { + this._x1 = this._x0, this._y1 = this._y0; + this._ += "Z"; + } + }, + lineTo: function(x, y) { + this._ += "L" + (this._x1 = +x) + "," + (this._y1 = +y); + }, + quadraticCurveTo: function(x1, y1, x, y) { + this._ += "Q" + (+x1) + "," + (+y1) + "," + (this._x1 = +x) + "," + (this._y1 = +y); + }, + bezierCurveTo: function(x1, y1, x2, y2, x, y) { + this._ += "C" + (+x1) + "," + (+y1) + "," + (+x2) + "," + (+y2) + "," + (this._x1 = +x) + "," + (this._y1 = +y); + }, + arcTo: function(x1, y1, x2, y2, r) { + x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r; + var x0 = this._x1, + y0 = this._y1, + x21 = x2 - x1, + y21 = y2 - y1, + x01 = x0 - x1, + y01 = y0 - y1, + l01_2 = x01 * x01 + y01 * y01; + + // Is the radius negative? Error. + if (r < 0) throw new Error("negative radius: " + r); + + // Is this path empty? Move to (x1,y1). + if (this._x1 === null) { + this._ += "M" + (this._x1 = x1) + "," + (this._y1 = y1); + } + + // Or, is (x1,y1) coincident with (x0,y0)? Do nothing. + else if (!(l01_2 > epsilon)); + + // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear? + // Equivalently, is (x1,y1) coincident with (x2,y2)? + // Or, is the radius zero? Line to (x1,y1). + else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) { + this._ += "L" + (this._x1 = x1) + "," + (this._y1 = y1); + } + + // Otherwise, draw an arc! + else { + var x20 = x2 - x0, + y20 = y2 - y0, + l21_2 = x21 * x21 + y21 * y21, + l20_2 = x20 * x20 + y20 * y20, + l21 = Math.sqrt(l21_2), + l01 = Math.sqrt(l01_2), + l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2), + t01 = l / l01, + t21 = l / l21; + + // If the start tangent is not coincident with (x0,y0), line to. + if (Math.abs(t01 - 1) > epsilon) { + this._ += "L" + (x1 + t01 * x01) + "," + (y1 + t01 * y01); + } + + this._ += "A" + r + "," + r + ",0,0," + (+(y01 * x20 > x01 * y20)) + "," + (this._x1 = x1 + t21 * x21) + "," + (this._y1 = y1 + t21 * y21); + } + }, + arc: function(x, y, r, a0, a1, ccw) { + x = +x, y = +y, r = +r; + var dx = r * Math.cos(a0), + dy = r * Math.sin(a0), + x0 = x + dx, + y0 = y + dy, + cw = 1 ^ ccw, + da = ccw ? a0 - a1 : a1 - a0; + + // Is the radius negative? Error. + if (r < 0) throw new Error("negative radius: " + r); + + // Is this path empty? Move to (x0,y0). + if (this._x1 === null) { + this._ += "M" + x0 + "," + y0; + } + + // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0). + else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) { + this._ += "L" + x0 + "," + y0; + } + + // Is this arc empty? We’re done. + if (!r) return; + + // Does the angle go the wrong way? Flip the direction. + if (da < 0) da = da % tau + tau; + + // Is this a complete circle? Draw two arcs to complete the circle. + if (da > tauEpsilon) { + this._ += "A" + r + "," + r + ",0,1," + cw + "," + (x - dx) + "," + (y - dy) + "A" + r + "," + r + ",0,1," + cw + "," + (this._x1 = x0) + "," + (this._y1 = y0); + } + + // Is this arc non-empty? Draw an arc! + else if (da > epsilon) { + this._ += "A" + r + "," + r + ",0," + (+(da >= pi)) + "," + cw + "," + (this._x1 = x + r * Math.cos(a1)) + "," + (this._y1 = y + r * Math.sin(a1)); + } + }, + rect: function(x, y, w, h) { + this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y) + "h" + (+w) + "v" + (+h) + "h" + (-w) + "Z"; + }, + toString: function() { + return this._; + } +}; + +function constant$1(x) { + return function constant() { + return x; + }; +} + +var abs = Math.abs; +var atan2 = Math.atan2; +var cos = Math.cos; +var max$1 = Math.max; +var min$1 = Math.min; +var sin = Math.sin; +var sqrt = Math.sqrt; + +var epsilon$1 = 1e-12; +var pi$1 = Math.PI; +var halfPi = pi$1 / 2; +var tau$1 = 2 * pi$1; + +function acos(x) { + return x > 1 ? 0 : x < -1 ? pi$1 : Math.acos(x); +} + +function asin(x) { + return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x); +} + +function arcInnerRadius(d) { + return d.innerRadius; +} + +function arcOuterRadius(d) { + return d.outerRadius; +} + +function arcStartAngle(d) { + return d.startAngle; +} + +function arcEndAngle(d) { + return d.endAngle; +} + +function arcPadAngle(d) { + return d && d.padAngle; // Note: optional! +} + +function intersect(x0, y0, x1, y1, x2, y2, x3, y3) { + var x10 = x1 - x0, y10 = y1 - y0, + x32 = x3 - x2, y32 = y3 - y2, + t = y32 * x10 - x32 * y10; + if (t * t < epsilon$1) return; + t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t; + return [x0 + t * x10, y0 + t * y10]; +} + +// Compute perpendicular offset line of length rc. +// http://mathworld.wolfram.com/Circle-LineIntersection.html +function cornerTangents(x0, y0, x1, y1, r1, rc, cw) { + var x01 = x0 - x1, + y01 = y0 - y1, + lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01), + ox = lo * y01, + oy = -lo * x01, + x11 = x0 + ox, + y11 = y0 + oy, + x10 = x1 + ox, + y10 = y1 + oy, + x00 = (x11 + x10) / 2, + y00 = (y11 + y10) / 2, + dx = x10 - x11, + dy = y10 - y11, + d2 = dx * dx + dy * dy, + r = r1 - rc, + D = x11 * y10 - x10 * y11, + d = (dy < 0 ? -1 : 1) * sqrt(max$1(0, r * r * d2 - D * D)), + cx0 = (D * dy - dx * d) / d2, + cy0 = (-D * dx - dy * d) / d2, + cx1 = (D * dy + dx * d) / d2, + cy1 = (-D * dx + dy * d) / d2, + dx0 = cx0 - x00, + dy0 = cy0 - y00, + dx1 = cx1 - x00, + dy1 = cy1 - y00; + + // Pick the closer of the two intersection points. + // TODO Is there a faster way to determine which intersection to use? + if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1; + + return { + cx: cx0, + cy: cy0, + x01: -ox, + y01: -oy, + x11: cx0 * (r1 / r - 1), + y11: cy0 * (r1 / r - 1) + }; +} + +function d3_arc() { + var innerRadius = arcInnerRadius, + outerRadius = arcOuterRadius, + cornerRadius = constant$1(0), + padRadius = null, + startAngle = arcStartAngle, + endAngle = arcEndAngle, + padAngle = arcPadAngle, + context = null; + + function arc() { + var buffer, + r, + r0 = +innerRadius.apply(this, arguments), + r1 = +outerRadius.apply(this, arguments), + a0 = startAngle.apply(this, arguments) - halfPi, + a1 = endAngle.apply(this, arguments) - halfPi, + da = abs(a1 - a0), + cw = a1 > a0; + + if (!context) context = buffer = path(); + + // Ensure that the outer radius is always larger than the inner radius. + if (r1 < r0) r = r1, r1 = r0, r0 = r; + + // Is it a point? + if (!(r1 > epsilon$1)) context.moveTo(0, 0); + + // Or is it a circle or annulus? + else if (da > tau$1 - epsilon$1) { + context.moveTo(r1 * cos(a0), r1 * sin(a0)); + context.arc(0, 0, r1, a0, a1, !cw); + if (r0 > epsilon$1) { + context.moveTo(r0 * cos(a1), r0 * sin(a1)); + context.arc(0, 0, r0, a1, a0, cw); + } + } + + // Or is it a circular or annular sector? + else { + var a01 = a0, + a11 = a1, + a00 = a0, + a10 = a1, + da0 = da, + da1 = da, + ap = padAngle.apply(this, arguments) / 2, + rp = (ap > epsilon$1) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)), + rc = min$1(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)), + rc0 = rc, + rc1 = rc, + t0, + t1; + + // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0. + if (rp > epsilon$1) { + var p0 = asin(rp / r0 * sin(ap)), + p1 = asin(rp / r1 * sin(ap)); + if ((da0 -= p0 * 2) > epsilon$1) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0; + else da0 = 0, a00 = a10 = (a0 + a1) / 2; + if ((da1 -= p1 * 2) > epsilon$1) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1; + else da1 = 0, a01 = a11 = (a0 + a1) / 2; + } + + var x01 = r1 * cos(a01), + y01 = r1 * sin(a01), + x10 = r0 * cos(a10), + y10 = r0 * sin(a10); + + // Apply rounded corners? + if (rc > epsilon$1) { + var x11 = r1 * cos(a11), + y11 = r1 * sin(a11), + x00 = r0 * cos(a00), + y00 = r0 * sin(a00), + oc; + + // Restrict the corner radius according to the sector angle. + if (da < pi$1 && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) { + var ax = x01 - oc[0], + ay = y01 - oc[1], + bx = x11 - oc[0], + by = y11 - oc[1], + kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2), + lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]); + rc0 = min$1(rc, (r0 - lc) / (kc - 1)); + rc1 = min$1(rc, (r1 - lc) / (kc + 1)); + } + } + + // Is the sector collapsed to a line? + if (!(da1 > epsilon$1)) context.moveTo(x01, y01); + + // Does the sector’s outer ring have rounded corners? + else if (rc1 > epsilon$1) { + t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw); + t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw); + + context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01); + + // Have the corners merged? + if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw); + + // Otherwise, draw the two corners and the ring. + else { + context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw); + context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw); + context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw); + } + } + + // Or is the outer ring just a circular arc? + else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw); + + // Is there no inner ring, and it’s a circular sector? + // Or perhaps it’s an annular sector collapsed due to padding? + if (!(r0 > epsilon$1) || !(da0 > epsilon$1)) context.lineTo(x10, y10); + + // Does the sector’s inner ring (or point) have rounded corners? + else if (rc0 > epsilon$1) { + t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw); + t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw); + + context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01); + + // Have the corners merged? + if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw); + + // Otherwise, draw the two corners and the ring. + else { + context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw); + context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw); + context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw); + } + } + + // Or is the inner ring just a circular arc? + else context.arc(0, 0, r0, a10, a00, cw); + } + + context.closePath(); + + if (buffer) return context = null, buffer + "" || null; + } + + arc.centroid = function() { + var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, + a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi$1 / 2; + return [cos(a) * r, sin(a) * r]; + }; + + arc.innerRadius = function(_) { + return arguments.length ? (innerRadius = typeof _ === "function" ? _ : constant$1(+_), arc) : innerRadius; + }; + + arc.outerRadius = function(_) { + return arguments.length ? (outerRadius = typeof _ === "function" ? _ : constant$1(+_), arc) : outerRadius; + }; + + arc.cornerRadius = function(_) { + return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : constant$1(+_), arc) : cornerRadius; + }; + + arc.padRadius = function(_) { + return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : constant$1(+_), arc) : padRadius; + }; + + arc.startAngle = function(_) { + return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$1(+_), arc) : startAngle; + }; + + arc.endAngle = function(_) { + return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$1(+_), arc) : endAngle; + }; + + arc.padAngle = function(_) { + return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$1(+_), arc) : padAngle; + }; + + arc.context = function(_) { + return arguments.length ? ((context = _ == null ? null : _), arc) : context; + }; + + return arc; +} + +function Linear(context) { + this._context = context; +} + +Linear.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._point = 0; + }, + lineEnd: function() { + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; // proceed + default: this._context.lineTo(x, y); break; + } + } +}; + +function curveLinear(context) { + return new Linear(context); +} + +function x(p) { + return p[0]; +} + +function y(p) { + return p[1]; +} + +function d3_line() { + var x$1 = x, + y$1 = y, + defined = constant$1(true), + context = null, + curve = curveLinear, + output = null; + + function line(data) { + var i, + n = data.length, + d, + defined0 = false, + buffer; + + if (context == null) output = curve(buffer = path()); + + for (i = 0; i <= n; ++i) { + if (!(i < n && defined(d = data[i], i, data)) === defined0) { + if (defined0 = !defined0) output.lineStart(); + else output.lineEnd(); + } + if (defined0) output.point(+x$1(d, i, data), +y$1(d, i, data)); + } + + if (buffer) return output = null, buffer + "" || null; + } + + line.x = function(_) { + return arguments.length ? (x$1 = typeof _ === "function" ? _ : constant$1(+_), line) : x$1; + }; + + line.y = function(_) { + return arguments.length ? (y$1 = typeof _ === "function" ? _ : constant$1(+_), line) : y$1; + }; + + line.defined = function(_) { + return arguments.length ? (defined = typeof _ === "function" ? _ : constant$1(!!_), line) : defined; + }; + + line.curve = function(_) { + return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve; + }; + + line.context = function(_) { + return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context; + }; + + return line; +} + +function d3_area() { + var x0 = x, + x1 = null, + y0 = constant$1(0), + y1 = y, + defined = constant$1(true), + context = null, + curve = curveLinear, + output = null; + + function area(data) { + var i, + j, + k, + n = data.length, + d, + defined0 = false, + buffer, + x0z = new Array(n), + y0z = new Array(n); + + if (context == null) output = curve(buffer = path()); + + for (i = 0; i <= n; ++i) { + if (!(i < n && defined(d = data[i], i, data)) === defined0) { + if (defined0 = !defined0) { + j = i; + output.areaStart(); + output.lineStart(); + } else { + output.lineEnd(); + output.lineStart(); + for (k = i - 1; k >= j; --k) { + output.point(x0z[k], y0z[k]); + } + output.lineEnd(); + output.areaEnd(); + } + } + if (defined0) { + x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data); + output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]); + } + } + + if (buffer) return output = null, buffer + "" || null; + } + + function arealine() { + return d3_line().defined(defined).curve(curve).context(context); + } + + area.x = function(_) { + return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$1(+_), x1 = null, area) : x0; + }; + + area.x0 = function(_) { + return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$1(+_), area) : x0; + }; + + area.x1 = function(_) { + return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : constant$1(+_), area) : x1; + }; + + area.y = function(_) { + return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$1(+_), y1 = null, area) : y0; + }; + + area.y0 = function(_) { + return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$1(+_), area) : y0; + }; + + area.y1 = function(_) { + return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : constant$1(+_), area) : y1; + }; + + area.lineX0 = + area.lineY0 = function() { + return arealine().x(x0).y(y0); + }; + + area.lineY1 = function() { + return arealine().x(x0).y(y1); + }; + + area.lineX1 = function() { + return arealine().x(x1).y(y0); + }; + + area.defined = function(_) { + return arguments.length ? (defined = typeof _ === "function" ? _ : constant$1(!!_), area) : defined; + }; + + area.curve = function(_) { + return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve; + }; + + area.context = function(_) { + return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context; + }; + + return area; +} + +var circle = { + draw: function(context, size) { + var r = Math.sqrt(size / pi$1); + context.moveTo(r, 0); + context.arc(0, 0, r, 0, tau$1); + } +}; + +function d3_symbol() { + var type = constant$1(circle), + size = constant$1(64), + context = null; + + function symbol() { + var buffer; + if (!context) context = buffer = path(); + type.apply(this, arguments).draw(context, +size.apply(this, arguments)); + if (buffer) return context = null, buffer + "" || null; + } + + symbol.type = function(_) { + return arguments.length ? (type = typeof _ === "function" ? _ : constant$1(_), symbol) : type; + }; + + symbol.size = function(_) { + return arguments.length ? (size = typeof _ === "function" ? _ : constant$1(+_), symbol) : size; + }; + + symbol.context = function(_) { + return arguments.length ? (context = _ == null ? null : _, symbol) : context; + }; + + return symbol; +} + +function noop() {} + +function point(that, x, y) { + that._context.bezierCurveTo( + (2 * that._x0 + that._x1) / 3, + (2 * that._y0 + that._y1) / 3, + (that._x0 + 2 * that._x1) / 3, + (that._y0 + 2 * that._y1) / 3, + (that._x0 + 4 * that._x1 + x) / 6, + (that._y0 + 4 * that._y1 + y) / 6 + ); +} + +function Basis(context) { + this._context = context; +} + +Basis.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = + this._y0 = this._y1 = NaN; + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 3: point(this, this._x1, this._y1); // proceed + case 2: this._context.lineTo(this._x1, this._y1); break; + } + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; break; + case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed + default: point(this, x, y); break; + } + this._x0 = this._x1, this._x1 = x; + this._y0 = this._y1, this._y1 = y; + } +}; + +function curveBasis(context) { + return new Basis(context); +} + +function BasisClosed(context) { + this._context = context; +} + +BasisClosed.prototype = { + areaStart: noop, + areaEnd: noop, + lineStart: function() { + this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = + this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN; + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 1: { + this._context.moveTo(this._x2, this._y2); + this._context.closePath(); + break; + } + case 2: { + this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3); + this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3); + this._context.closePath(); + break; + } + case 3: { + this.point(this._x2, this._y2); + this.point(this._x3, this._y3); + this.point(this._x4, this._y4); + break; + } + } + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._x2 = x, this._y2 = y; break; + case 1: this._point = 2; this._x3 = x, this._y3 = y; break; + case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break; + default: point(this, x, y); break; + } + this._x0 = this._x1, this._x1 = x; + this._y0 = this._y1, this._y1 = y; + } +}; + +function curveBasisClosed(context) { + return new BasisClosed(context); +} + +function BasisOpen(context) { + this._context = context; +} + +BasisOpen.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = + this._y0 = this._y1 = NaN; + this._point = 0; + }, + lineEnd: function() { + if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; break; + case 1: this._point = 2; break; + case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break; + case 3: this._point = 4; // proceed + default: point(this, x, y); break; + } + this._x0 = this._x1, this._x1 = x; + this._y0 = this._y1, this._y1 = y; + } +}; + +function curveBasisOpen(context) { + return new BasisOpen(context); +} + +function Bundle(context, beta) { + this._basis = new Basis(context); + this._beta = beta; +} + +Bundle.prototype = { + lineStart: function() { + this._x = []; + this._y = []; + this._basis.lineStart(); + }, + lineEnd: function() { + var x = this._x, + y = this._y, + j = x.length - 1; + + if (j > 0) { + var x0 = x[0], + y0 = y[0], + dx = x[j] - x0, + dy = y[j] - y0, + i = -1, + t; + + while (++i <= j) { + t = i / j; + this._basis.point( + this._beta * x[i] + (1 - this._beta) * (x0 + t * dx), + this._beta * y[i] + (1 - this._beta) * (y0 + t * dy) + ); + } + } + + this._x = this._y = null; + this._basis.lineEnd(); + }, + point: function(x, y) { + this._x.push(+x); + this._y.push(+y); + } +}; + +var curveBundle = (function custom(beta) { + + function bundle(context) { + return beta === 1 ? new Basis(context) : new Bundle(context, beta); + } + + bundle.beta = function(beta) { + return custom(+beta); + }; + + return bundle; +})(0.85); + +function point$1(that, x, y) { + that._context.bezierCurveTo( + that._x1 + that._k * (that._x2 - that._x0), + that._y1 + that._k * (that._y2 - that._y0), + that._x2 + that._k * (that._x1 - x), + that._y2 + that._k * (that._y1 - y), + that._x2, + that._y2 + ); +} + +function Cardinal(context, tension) { + this._context = context; + this._k = (1 - tension) / 6; +} + +Cardinal.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = this._x2 = + this._y0 = this._y1 = this._y2 = NaN; + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 2: this._context.lineTo(this._x2, this._y2); break; + case 3: point$1(this, this._x1, this._y1); break; + } + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; this._x1 = x, this._y1 = y; break; + case 2: this._point = 3; // proceed + default: point$1(this, x, y); break; + } + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } +}; + +var curveCardinal = (function custom(tension) { + + function cardinal(context) { + return new Cardinal(context, tension); + } + + cardinal.tension = function(tension) { + return custom(+tension); + }; + + return cardinal; +})(0); + +function CardinalClosed(context, tension) { + this._context = context; + this._k = (1 - tension) / 6; +} + +CardinalClosed.prototype = { + areaStart: noop, + areaEnd: noop, + lineStart: function() { + this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = + this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN; + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 1: { + this._context.moveTo(this._x3, this._y3); + this._context.closePath(); + break; + } + case 2: { + this._context.lineTo(this._x3, this._y3); + this._context.closePath(); + break; + } + case 3: { + this.point(this._x3, this._y3); + this.point(this._x4, this._y4); + this.point(this._x5, this._y5); + break; + } + } + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._x3 = x, this._y3 = y; break; + case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break; + case 2: this._point = 3; this._x5 = x, this._y5 = y; break; + default: point$1(this, x, y); break; + } + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } +}; + +var curveCardinalClosed = (function custom(tension) { + + function cardinal(context) { + return new CardinalClosed(context, tension); + } + + cardinal.tension = function(tension) { + return custom(+tension); + }; + + return cardinal; +})(0); + +function CardinalOpen(context, tension) { + this._context = context; + this._k = (1 - tension) / 6; +} + +CardinalOpen.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = this._x2 = + this._y0 = this._y1 = this._y2 = NaN; + this._point = 0; + }, + lineEnd: function() { + if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; break; + case 1: this._point = 2; break; + case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break; + case 3: this._point = 4; // proceed + default: point$1(this, x, y); break; + } + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } +}; + +var curveCardinalOpen = (function custom(tension) { + + function cardinal(context) { + return new CardinalOpen(context, tension); + } + + cardinal.tension = function(tension) { + return custom(+tension); + }; + + return cardinal; +})(0); + +function point$2(that, x, y) { + var x1 = that._x1, + y1 = that._y1, + x2 = that._x2, + y2 = that._y2; + + if (that._l01_a > epsilon$1) { + var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a, + n = 3 * that._l01_a * (that._l01_a + that._l12_a); + x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n; + y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n; + } + + if (that._l23_a > epsilon$1) { + var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a, + m = 3 * that._l23_a * (that._l23_a + that._l12_a); + x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m; + y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m; + } + + that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2); +} + +function CatmullRom(context, alpha) { + this._context = context; + this._alpha = alpha; +} + +CatmullRom.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = this._x2 = + this._y0 = this._y1 = this._y2 = NaN; + this._l01_a = this._l12_a = this._l23_a = + this._l01_2a = this._l12_2a = this._l23_2a = + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 2: this._context.lineTo(this._x2, this._y2); break; + case 3: this.point(this._x2, this._y2); break; + } + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + + if (this._point) { + var x23 = this._x2 - x, + y23 = this._y2 - y; + this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); + } + + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; break; + case 2: this._point = 3; // proceed + default: point$2(this, x, y); break; + } + + this._l01_a = this._l12_a, this._l12_a = this._l23_a; + this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } +}; + +var curveCatmullRom = (function custom(alpha) { + + function catmullRom(context) { + return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0); + } + + catmullRom.alpha = function(alpha) { + return custom(+alpha); + }; + + return catmullRom; +})(0.5); + +function CatmullRomClosed(context, alpha) { + this._context = context; + this._alpha = alpha; +} + +CatmullRomClosed.prototype = { + areaStart: noop, + areaEnd: noop, + lineStart: function() { + this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = + this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN; + this._l01_a = this._l12_a = this._l23_a = + this._l01_2a = this._l12_2a = this._l23_2a = + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 1: { + this._context.moveTo(this._x3, this._y3); + this._context.closePath(); + break; + } + case 2: { + this._context.lineTo(this._x3, this._y3); + this._context.closePath(); + break; + } + case 3: { + this.point(this._x3, this._y3); + this.point(this._x4, this._y4); + this.point(this._x5, this._y5); + break; + } + } + }, + point: function(x, y) { + x = +x, y = +y; + + if (this._point) { + var x23 = this._x2 - x, + y23 = this._y2 - y; + this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); + } + + switch (this._point) { + case 0: this._point = 1; this._x3 = x, this._y3 = y; break; + case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break; + case 2: this._point = 3; this._x5 = x, this._y5 = y; break; + default: point$2(this, x, y); break; + } + + this._l01_a = this._l12_a, this._l12_a = this._l23_a; + this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } +}; + +var curveCatmullRomClosed = (function custom(alpha) { + + function catmullRom(context) { + return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0); + } + + catmullRom.alpha = function(alpha) { + return custom(+alpha); + }; + + return catmullRom; +})(0.5); + +function CatmullRomOpen(context, alpha) { + this._context = context; + this._alpha = alpha; +} + +CatmullRomOpen.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = this._x2 = + this._y0 = this._y1 = this._y2 = NaN; + this._l01_a = this._l12_a = this._l23_a = + this._l01_2a = this._l12_2a = this._l23_2a = + this._point = 0; + }, + lineEnd: function() { + if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + + if (this._point) { + var x23 = this._x2 - x, + y23 = this._y2 - y; + this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); + } + + switch (this._point) { + case 0: this._point = 1; break; + case 1: this._point = 2; break; + case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break; + case 3: this._point = 4; // proceed + default: point$2(this, x, y); break; + } + + this._l01_a = this._l12_a, this._l12_a = this._l23_a; + this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; + this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; + this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; + } +}; + +var curveCatmullRomOpen = (function custom(alpha) { + + function catmullRom(context) { + return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0); + } + + catmullRom.alpha = function(alpha) { + return custom(+alpha); + }; + + return catmullRom; +})(0.5); + +function LinearClosed(context) { + this._context = context; +} + +LinearClosed.prototype = { + areaStart: noop, + areaEnd: noop, + lineStart: function() { + this._point = 0; + }, + lineEnd: function() { + if (this._point) this._context.closePath(); + }, + point: function(x, y) { + x = +x, y = +y; + if (this._point) this._context.lineTo(x, y); + else this._point = 1, this._context.moveTo(x, y); + } +}; + +function curveLinearClosed(context) { + return new LinearClosed(context); +} + +function sign(x) { + return x < 0 ? -1 : 1; +} + +// Calculate the slopes of the tangents (Hermite-type interpolation) based on +// the following paper: Steffen, M. 1990. A Simple Method for Monotonic +// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO. +// NOV(II), P. 443, 1990. +function slope3(that, x2, y2) { + var h0 = that._x1 - that._x0, + h1 = x2 - that._x1, + s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0), + s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0), + p = (s0 * h1 + s1 * h0) / (h0 + h1); + return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0; +} + +// Calculate a one-sided slope. +function slope2(that, t) { + var h = that._x1 - that._x0; + return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t; +} + +// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations +// "you can express cubic Hermite interpolation in terms of cubic Bézier curves +// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1". +function point$3(that, t0, t1) { + var x0 = that._x0, + y0 = that._y0, + x1 = that._x1, + y1 = that._y1, + dx = (x1 - x0) / 3; + that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1); +} + +function MonotoneX(context) { + this._context = context; +} + +MonotoneX.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x0 = this._x1 = + this._y0 = this._y1 = + this._t0 = NaN; + this._point = 0; + }, + lineEnd: function() { + switch (this._point) { + case 2: this._context.lineTo(this._x1, this._y1); break; + case 3: point$3(this, this._t0, slope2(this, this._t0)); break; + } + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + this._line = 1 - this._line; + }, + point: function(x, y) { + var t1 = NaN; + + x = +x, y = +y; + if (x === this._x1 && y === this._y1) return; // Ignore coincident points. + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; break; + case 2: this._point = 3; point$3(this, slope2(this, t1 = slope3(this, x, y)), t1); break; + default: point$3(this, this._t0, t1 = slope3(this, x, y)); break; + } + + this._x0 = this._x1, this._x1 = x; + this._y0 = this._y1, this._y1 = y; + this._t0 = t1; + } +}; + +function MonotoneY(context) { + this._context = new ReflectContext(context); +} + +(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) { + MonotoneX.prototype.point.call(this, y, x); +}; + +function ReflectContext(context) { + this._context = context; +} + +ReflectContext.prototype = { + moveTo: function(x, y) { this._context.moveTo(y, x); }, + closePath: function() { this._context.closePath(); }, + lineTo: function(x, y) { this._context.lineTo(y, x); }, + bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); } +}; + +function monotoneX(context) { + return new MonotoneX(context); +} + +function monotoneY(context) { + return new MonotoneY(context); +} + +function Natural(context) { + this._context = context; +} + +Natural.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x = []; + this._y = []; + }, + lineEnd: function() { + var x = this._x, + y = this._y, + n = x.length; + + if (n) { + this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]); + if (n === 2) { + this._context.lineTo(x[1], y[1]); + } else { + var px = controlPoints(x), + py = controlPoints(y); + for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) { + this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]); + } + } + } + + if (this._line || (this._line !== 0 && n === 1)) this._context.closePath(); + this._line = 1 - this._line; + this._x = this._y = null; + }, + point: function(x, y) { + this._x.push(+x); + this._y.push(+y); + } +}; + +// See https://www.particleincell.com/2012/bezier-splines/ for derivation. +function controlPoints(x) { + var i, + n = x.length - 1, + m, + a = new Array(n), + b = new Array(n), + r = new Array(n); + a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1]; + for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1]; + a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n]; + for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1]; + a[n - 1] = r[n - 1] / b[n - 1]; + for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i]; + b[n - 1] = (x[n] + a[n - 1]) / 2; + for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1]; + return [a, b]; +} + +function curveNatural(context) { + return new Natural(context); +} + +function Step(context, t) { + this._context = context; + this._t = t; +} + +Step.prototype = { + areaStart: function() { + this._line = 0; + }, + areaEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._x = this._y = NaN; + this._point = 0; + }, + lineEnd: function() { + if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y); + if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); + if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line; + }, + point: function(x, y) { + x = +x, y = +y; + switch (this._point) { + case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; + case 1: this._point = 2; // proceed + default: { + if (this._t <= 0) { + this._context.lineTo(this._x, y); + this._context.lineTo(x, y); + } else { + var x1 = this._x * (1 - this._t) + x * this._t; + this._context.lineTo(x1, this._y); + this._context.lineTo(x1, y); + } + break; + } + } + this._x = x, this._y = y; + } +}; + +function curveStep(context) { + return new Step(context, 0.5); +} + +function stepBefore(context) { + return new Step(context, 0); +} + +function stepAfter(context) { + return new Step(context, 1); +} + +var lookup = { + 'basis': { + curve: curveBasis + }, + 'basis-closed': { + curve: curveBasisClosed + }, + 'basis-open': { + curve: curveBasisOpen + }, + 'bundle': { + curve: curveBundle, + tension: 'beta', + value: 0.85 + }, + 'cardinal': { + curve: curveCardinal, + tension: 'tension', + value: 0 + }, + 'cardinal-open': { + curve: curveCardinalOpen, + tension: 'tension', + value: 0 + }, + 'cardinal-closed': { + curve: curveCardinalClosed, + tension: 'tension', + value: 0 + }, + 'catmull-rom': { + curve: curveCatmullRom, + tension: 'alpha', + value: 0.5 + }, + 'catmull-rom-closed': { + curve: curveCatmullRomClosed, + tension: 'alpha', + value: 0.5 + }, + 'catmull-rom-open': { + curve: curveCatmullRomOpen, + tension: 'alpha', + value: 0.5 + }, + 'linear': { + curve: curveLinear + }, + 'linear-closed': { + curve: curveLinearClosed + }, + 'monotone': { + horizontal: monotoneY, + vertical: monotoneX + }, + 'natural': { + curve: curveNatural + }, + 'step': { + curve: curveStep + }, + 'step-after': { + curve: stepAfter + }, + 'step-before': { + curve: stepBefore + } +}; + +function curves(type, orientation, tension) { + var entry = lookup.hasOwnProperty(type) && lookup[type], + curve = null; + + if (entry) { + curve = entry.curve || entry[orientation || 'vertical']; + if (entry.tension && tension != null) { + curve = curve[entry.tension](tension); + } + } + + return curve; +} + +// Path parsing and rendering code adapted from fabric.js -- Thanks! +var cmdlen = { m:2, l:2, h:1, v:1, c:6, s:4, q:4, t:2, a:7 }, + regexp = [/([MLHVCSQTAZmlhvcsqtaz])/g, /###/, /(\d)([-+])/g, /\s|,|###/]; + +function pathParse(pathstr) { + var result = [], + path, + curr, + chunks, + parsed, param, + cmd, len, i, j, n, m; + + // First, break path into command sequence + path = pathstr + .slice() + .replace(regexp[0], '###$1') + .split(regexp[1]) + .slice(1); + + // Next, parse each command in turn + for (i=0, n=path.length; i len) { + for (j=1, m=parsed.length; j 1) { + pl = Math.sqrt(pl); + rx *= pl; + ry *= pl; + } + + var a00 = cos_th / rx; + var a01 = sin_th / rx; + var a10 = (-sin_th) / ry; + var a11 = (cos_th) / ry; + var x0 = a00 * ox + a01 * oy; + var y0 = a10 * ox + a11 * oy; + var x1 = a00 * x + a01 * y; + var y1 = a10 * x + a11 * y; + + var d = (x1-x0) * (x1-x0) + (y1-y0) * (y1-y0); + var sfactor_sq = 1 / d - 0.25; + if (sfactor_sq < 0) sfactor_sq = 0; + var sfactor = Math.sqrt(sfactor_sq); + if (sweep == large) sfactor = -sfactor; + var xc = 0.5 * (x0 + x1) - sfactor * (y1-y0); + var yc = 0.5 * (y0 + y1) + sfactor * (x1-x0); + + var th0 = Math.atan2(y0-yc, x0-xc); + var th1 = Math.atan2(y1-yc, x1-xc); + + var th_arc = th1-th0; + if (th_arc < 0 && sweep === 1) { + th_arc += Tau; + } else if (th_arc > 0 && sweep === 0) { + th_arc -= Tau; + } + + var segs = Math.ceil(Math.abs(th_arc / (HalfPi + 0.001))); + var result = []; + for (var i=0; i circleThreshold) { + add$1(cx - r, cy - r); + add$1(cx + r, cy + r); + return; + } + + var xmin = Infinity, xmax = -Infinity, + ymin = Infinity, ymax = -Infinity, + s, i, x, y; + + function update(a) { + x = r * Math.cos(a); + y = r * Math.sin(a); + if (x < xmin) xmin = x; + if (x > xmax) xmax = x; + if (y < ymin) ymin = y; + if (y > ymax) ymax = y; + } + + // Sample end points and interior points aligned with 90 degrees + update(sa); + update(ea); + + if (ea !== sa) { + sa = sa % Tau; if (sa < 0) sa += Tau; + ea = ea % Tau; if (ea < 0) ea += Tau; + + if (ea < sa) { + ccw = !ccw; // flip direction + s = sa; sa = ea; ea = s; // swap end-points + } + + if (ccw) { + ea -= Tau; + s = sa - (sa % HalfPi); + for (i=0; i<4 && s>ea; ++i, s-=HalfPi) update(s); + } else { + s = sa - (sa % HalfPi) + HalfPi; + for (i=0; i<4 && s t1) return false; + else if (r > t0) t0 = r; + } else if (p > 0) { + if (r < t0) return false; + else if (r < t1) t1 = r; + } + } + + return true; +} + +function gradient(context, gradient, bounds) { + const w = bounds.width(), + h = bounds.height(), + stop = gradient.stops, + n = stop.length; + + const canvasGradient = gradient.gradient === 'radial' + ? context.createRadialGradient( + bounds.x1 + (gradient.x1 || 0.5) * w, + bounds.y1 + (gradient.y1 || 0.5) * h, + Math.max(w, h) * (gradient.r1 || 0), + bounds.x1 + (gradient.x2 || 0.5) * w, + bounds.y1 + (gradient.y2 || 0.5) * h, + Math.max(w, h) * (gradient.r2 || 0.5) + ) + : context.createLinearGradient( + bounds.x1 + (gradient.x1 || 0) * w, + bounds.y1 + (gradient.y1 || 0) * h, + bounds.x1 + (gradient.x2 || 1) * w, + bounds.y1 + (gradient.y2 || 0) * h + ); + + for (let i=0; i 0) { + context.globalAlpha = opacity; + context.fillStyle = color(context, item, item.fill); + return true; + } else { + return false; + } +} + +var Empty$1 = []; + +function stroke(context, item, opacity) { + var lw = (lw = item.strokeWidth) != null ? lw : 1; + + if (lw <= 0) return false; + + opacity *= (item.strokeOpacity==null ? 1 : item.strokeOpacity); + if (opacity > 0) { + context.globalAlpha = opacity; + context.strokeStyle = color(context, item, item.stroke); + + context.lineWidth = lw; + context.lineCap = item.strokeCap || 'butt'; + context.lineJoin = item.strokeJoin || 'miter'; + context.miterLimit = item.strokeMiterLimit || 10; + + if (context.setLineDash) { + context.setLineDash(item.strokeDash || Empty$1); + context.lineDashOffset = item.strokeDashOffset || 0; + } + return true; + } else { + return false; + } +} + +function compare$1(a, b) { + return a.zindex - b.zindex || a.index - b.index; +} + +function zorder(scene) { + if (!scene.zdirty) return scene.zitems; + + var items = scene.items, + output = [], item, i, n; + + for (i=0, n=items.length; i= 0;) { + if (hit = visitor(items[i])) return hit; + } + + if (items === zitems) { + for (items=scene.items, i=items.length; --i >= 0;) { + if (!items[i].zindex) { + if (hit = visitor(items[i])) return hit; + } + } + } + + return null; +} + +function drawAll(path) { + return function(context, scene, bounds) { + visit(scene, function(item) { + if (!bounds || bounds.intersects(item.bounds)) { + drawPath(path, context, item, item); + } + }); + }; +} + +function drawOne(path) { + return function(context, scene, bounds) { + if (scene.items.length && (!bounds || bounds.intersects(scene.bounds))) { + drawPath(path, context, scene.items[0], scene.items); + } + }; +} + +function drawPath(path, context, item, items) { + var opacity = item.opacity == null ? 1 : item.opacity; + if (opacity === 0) return; + + if (path(context, items)) return; + + if (item.fill && fill(context, item, opacity)) { + context.fill(); + } + + if (item.stroke && stroke(context, item, opacity)) { + context.stroke(); + } +} + +function pick(test) { + test = test || truthy; + + return function(context, scene, x, y, gx, gy) { + x *= context.pixelRatio; + y *= context.pixelRatio; + + return pickVisit(scene, function(item) { + var b = item.bounds; + // first hit test against bounding box + if ((b && !b.contains(gx, gy)) || !b) return; + // if in bounding box, perform more careful test + if (test(context, item, x, y, gx, gy)) return item; + }); + }; +} + +function hitPath(path, filled) { + return function(context, o, x, y) { + var item = Array.isArray(o) ? o[0] : o, + fill = (filled == null) ? item.fill : filled, + stroke = item.stroke && context.isPointInStroke, lw, lc; + + if (stroke) { + lw = item.strokeWidth; + lc = item.strokeCap; + context.lineWidth = lw != null ? lw : 1; + context.lineCap = lc != null ? lc : 'butt'; + } + + return path(context, o) ? false : + (fill && context.isPointInPath(x, y)) || + (stroke && context.isPointInStroke(x, y)); + }; +} + +function pickPath(path) { + return pick(hitPath(path)); +} + +function translate(x, y) { + return 'translate(' + x + ',' + y + ')'; +} + +function rotate(a) { + return 'rotate(' + a + ')'; +} + +function translateItem(item) { + return translate(item.x || 0, item.y || 0); +} + +function transformItem(item) { + return translate(item.x || 0, item.y || 0) + + (item.angle ? ' ' + rotate(item.angle) : ''); +} + +function markItemPath(type, shape, isect) { + + function attr(emit, item) { + emit('transform', transformItem(item)); + emit('d', shape(null, item)); + } + + function bound(bounds, item) { + var x = item.x || 0, + y = item.y || 0; + + shape(context(bounds), item); + boundStroke(bounds, item).translate(x, y); + if (item.angle) { + bounds.rotate(item.angle * DegToRad, x, y); + } + + return bounds; + } + + function draw(context, item) { + var x = item.x || 0, + y = item.y || 0, + a = item.angle || 0; + + context.translate(x, y); + if (a) context.rotate(a *= DegToRad); + context.beginPath(); + shape(context, item); + if (a) context.rotate(-a); + context.translate(-x, -y); + } + + return { + type: type, + tag: 'path', + nested: false, + attr: attr, + bound: bound, + draw: drawAll(draw), + pick: pickPath(draw), + isect: isect || intersectPath(draw) + }; + +} + +var arc$1 = markItemPath('arc', arc); + +function pickArea(a, p) { + var v = a[0].orient === 'horizontal' ? p[1] : p[0], + z = a[0].orient === 'horizontal' ? 'y' : 'x', + i = a.length, + min = +Infinity, hit, d; + + while (--i >= 0) { + if (a[i].defined === false) continue; + d = Math.abs(a[i][z] - v); + if (d < min) { + min = d; + hit = a[i]; + } + } + + return hit; +} + +function pickLine(a, p) { + var t = Math.pow(a[0].strokeWidth || 1, 2), + i = a.length, dx, dy, dd; + + while (--i >= 0) { + if (a[i].defined === false) continue; + dx = a[i].x - p[0]; + dy = a[i].y - p[1]; + dd = dx * dx + dy * dy; + if (dd < t) return a[i]; + } + + return null; +} + +function pickTrail(a, p) { + var i = a.length, dx, dy, dd; + + while (--i >= 0) { + if (a[i].defined === false) continue; + dx = a[i].x - p[0]; + dy = a[i].y - p[1]; + dd = dx * dx + dy * dy; + dx = a[i].size || 1; + if (dd < dx*dx) return a[i]; + } + + return null; +} + +function markMultiItemPath(type, shape, tip) { + + function attr(emit, item) { + var items = item.mark.items; + if (items.length) emit('d', shape(null, items)); + } + + function bound(bounds, mark) { + var items = mark.items; + if (items.length === 0) { + return bounds; + } else { + shape(context(bounds), items); + return boundStroke(bounds, items[0]); + } + } + + function draw(context, items) { + context.beginPath(); + shape(context, items); + } + + var hit = hitPath(draw); + + function pick(context, scene, x, y, gx, gy) { + var items = scene.items, + b = scene.bounds; + + if (!items || !items.length || b && !b.contains(gx, gy)) { + return null; + } + + x *= context.pixelRatio; + y *= context.pixelRatio; + return hit(context, items, x, y) ? items[0] : null; + } + + return { + type: type, + tag: 'path', + nested: true, + attr: attr, + bound: bound, + draw: drawOne(draw), + pick: pick, + isect: intersectPoint, + tip: tip + }; + +} + +var area$1 = markMultiItemPath('area', area, pickArea); + +var clip_id = 1; + +function clip(renderer, item, size) { + var clip = item.clip, + defs = renderer._defs, + id = item.clip_id || (item.clip_id = 'clip' + clip_id++), + c = defs.clipping[id] || (defs.clipping[id] = {id: id}); + + if (isFunction(clip)) { + c.path = clip(null); + } else { + c.width = size.width || 0; + c.height = size.height || 0; + } + + return 'url(#' + id + ')'; +} + +var StrokeOffset = 0.5; + +function attr(emit, item) { + emit('transform', translateItem(item)); +} + +function background(emit, item) { + var offset = item.stroke ? StrokeOffset : 0; + emit('class', 'background'); + emit('d', rectangle(null, item, offset, offset)); +} + +function foreground(emit, item, renderer) { + var url = item.clip ? clip(renderer, item, item) : null; + emit('clip-path', url); +} + +function bound(bounds, group) { + if (!group.clip && group.items) { + var items = group.items; + for (var j=0, m=items.length; j 0) { + backgroundPath(context, group); + if (group.fill && fill(context, group, opacity)) { + context.fill(); + } + if (group.stroke && stroke(context, group, opacity)) { + context.stroke(); + } + } + } + + // set clip and bounds + if (group.clip) { + context.beginPath(); + context.rect(0, 0, w, h); + context.clip(); + } + if (bounds) bounds.translate(-gx, -gy); + + // draw group contents + visit(group, function(item) { + renderer.draw(context, item, bounds); + }); + + // restore graphics context + if (bounds) bounds.translate(gx, gy); + context.restore(); + }); +} + +function pick$1(context, scene, x, y, gx, gy) { + if (scene.bounds && !scene.bounds.contains(gx, gy) || !scene.items) { + return null; + } + + var handler = this, + cx = x * context.pixelRatio, + cy = y * context.pixelRatio; + + return pickVisit(scene, function(group) { + var hit, dx, dy, b; + + // first hit test against bounding box + // if a group is clipped, that should be handled by the bounds check. + b = group.bounds; + if (b && !b.contains(gx, gy)) return; + + // passed bounds check, so test sub-groups + dx = (group.x || 0); + dy = (group.y || 0); + + context.save(); + context.translate(dx, dy); + + dx = gx - dx; + dy = gy - dy; + + // hit test against contained marks + hit = pickVisit(group, function(mark) { + return pickMark(mark, dx, dy) + ? handler.pick(mark, x, y, dx, dy) + : null; + }); + + // hit test against group background + if (!hit && scene.interactive !== false + && (group.fill || group.stroke) + && hitBackground(context, group, cx, cy)) { + hit = group; + } + + context.restore(); + return hit || null; + }); +} + +function pickMark(mark, x, y) { + return (mark.interactive !== false || mark.marktype === 'group') + && mark.bounds && mark.bounds.contains(x, y); +} + +var group = { + type: 'group', + tag: 'g', + nested: false, + attr: attr, + bound: bound, + draw: draw, + pick: pick$1, + isect: intersectRect, + background: background, + foreground: foreground +}; + +function getImage(item, renderer) { + var image = item.image; + if (!image || image.url !== item.url) { + image = {loaded: false, width: 0, height: 0}; + renderer.loadImage(item.url).then(function(image) { + item.image = image; + item.image.url = item.url; + }); + } + return image; +} + +function imageXOffset(align, w) { + return align === 'center' ? w / 2 : align === 'right' ? w : 0; +} + +function imageYOffset(baseline, h) { + return baseline === 'middle' ? h / 2 : baseline === 'bottom' ? h : 0; +} + +function attr$1(emit, item, renderer) { + var image = getImage(item, renderer), + x = item.x || 0, + y = item.y || 0, + w = (item.width != null ? item.width : image.width) || 0, + h = (item.height != null ? item.height : image.height) || 0, + a = item.aspect === false ? 'none' : 'xMidYMid'; + + x -= imageXOffset(item.align, w); + y -= imageYOffset(item.baseline, h); + + emit('href', image.src || '', 'http://www.w3.org/1999/xlink', 'xlink:href'); + emit('transform', translate(x, y)); + emit('width', w); + emit('height', h); + emit('preserveAspectRatio', a); +} + +function bound$1(bounds, item) { + var image = item.image, + x = item.x || 0, + y = item.y || 0, + w = (item.width != null ? item.width : (image && image.width)) || 0, + h = (item.height != null ? item.height : (image && image.height)) || 0; + + x -= imageXOffset(item.align, w); + y -= imageYOffset(item.baseline, h); + + return bounds.set(x, y, x + w, y + h); +} + +function draw$1(context, scene, bounds) { + var renderer = this; + + visit(scene, function(item) { + if (bounds && !bounds.intersects(item.bounds)) return; // bounds check + + var image = getImage(item, renderer), + x = item.x || 0, + y = item.y || 0, + w = (item.width != null ? item.width : image.width) || 0, + h = (item.height != null ? item.height : image.height) || 0, + opacity, ar0, ar1, t; + + x -= imageXOffset(item.align, w); + y -= imageYOffset(item.baseline, h); + + if (item.aspect !== false) { + ar0 = image.width / image.height; + ar1 = item.width / item.height; + if (ar0 === ar0 && ar1 === ar1 && ar0 !== ar1) { + if (ar1 < ar0) { + t = w / ar0; + y += (h - t) / 2; + h = t; + } else { + t = h * ar0; + x += (w - t) / 2; + w = t; + } + } + } + + if (image.loaded) { + context.globalAlpha = (opacity = item.opacity) != null ? opacity : 1; + context.drawImage(image, x, y, w, h); + } + }); +} + +var image$1 = { + type: 'image', + tag: 'image', + nested: false, + attr: attr$1, + bound: bound$1, + draw: draw$1, + pick: pick(), + isect: truthy, // bounds check is sufficient + get: getImage, + xOffset: imageXOffset, + yOffset: imageYOffset +}; + +var line$1 = markMultiItemPath('line', line, pickLine); + +function attr$2(emit, item) { + emit('transform', translateItem(item)); + emit('d', item.path); +} + +function path$1(context, item) { + var path = item.path; + if (path == null) return true; + + var cache = item.pathCache; + if (!cache || cache.path !== path) { + (item.pathCache = cache = pathParse(path)).path = path; + } + pathRender(context, cache, item.x, item.y); +} + +function bound$2(bounds, item) { + return path$1(context(bounds), item) + ? bounds.set(0, 0, 0, 0) + : boundStroke(bounds, item); +} + +var path$2 = { + type: 'path', + tag: 'path', + nested: false, + attr: attr$2, + bound: bound$2, + draw: drawAll(path$1), + pick: pickPath(path$1), + isect: intersectPath(path$1) +}; + +function attr$3(emit, item) { + emit('d', rectangle(null, item)); +} + +function bound$3(bounds, item) { + var x, y; + return boundStroke(bounds.set( + x = item.x || 0, + y = item.y || 0, + (x + item.width) || 0, + (y + item.height) || 0 + ), item); +} + +function draw$2(context, item) { + context.beginPath(); + rectangle(context, item); +} + +var rect = { + type: 'rect', + tag: 'path', + nested: false, + attr: attr$3, + bound: bound$3, + draw: drawAll(draw$2), + pick: pickPath(draw$2), + isect: intersectRect +}; + +function attr$4(emit, item) { + emit('transform', translateItem(item)); + emit('x2', item.x2 != null ? item.x2 - (item.x || 0) : 0); + emit('y2', item.y2 != null ? item.y2 - (item.y || 0) : 0); +} + +function bound$4(bounds, item) { + var x1, y1; + return boundStroke(bounds.set( + x1 = item.x || 0, + y1 = item.y || 0, + item.x2 != null ? item.x2 : x1, + item.y2 != null ? item.y2 : y1 + ), item); +} + +function path$3(context, item, opacity) { + var x1, y1, x2, y2; + + if (item.stroke && stroke(context, item, opacity)) { + x1 = item.x || 0; + y1 = item.y || 0; + x2 = item.x2 != null ? item.x2 : x1; + y2 = item.y2 != null ? item.y2 : y1; + context.beginPath(); + context.moveTo(x1, y1); + context.lineTo(x2, y2); + return true; + } + return false; +} + +function draw$3(context, scene, bounds) { + visit(scene, function(item) { + if (bounds && !bounds.intersects(item.bounds)) return; // bounds check + var opacity = item.opacity == null ? 1 : item.opacity; + if (opacity && path$3(context, item, opacity)) { + context.stroke(); + } + }); +} + +function hit(context, item, x, y) { + if (!context.isPointInStroke) return false; + return path$3(context, item, 1) && context.isPointInStroke(x, y); +} + +var rule = { + type: 'rule', + tag: 'line', + nested: false, + attr: attr$4, + bound: bound$4, + draw: draw$3, + pick: pick(hit), + isect: intersectRule +}; + +var shape$1 = markItemPath('shape', shape); + +var symbol$1 = markItemPath('symbol', symbol, intersectPoint); + +var currFontHeight; + +var textMetrics = { + height: fontSize, + measureWidth: measureWidth, + estimateWidth: estimateWidth, + width: estimateWidth, + canvas: useCanvas +}; + +useCanvas(true); + +// make dumb, simple estimate if no canvas is available +function estimateWidth(item) { + currFontHeight = fontSize(item); + return estimate(textValue(item)); +} + +function estimate(text) { + return ~~(0.8 * text.length * currFontHeight); +} + +// measure text width if canvas is available +function measureWidth(item) { + return fontSize(item) <= 0 ? 0 + : (context$1.font = font(item), measure$1(textValue(item))); +} + +function measure$1(text) { + return context$1.measureText(text).width; +} + +function fontSize(item) { + return item.fontSize != null ? item.fontSize : 11; +} + +function useCanvas(use) { + textMetrics.width = (use && context$1) ? measureWidth : estimateWidth; +} + +function textValue(item) { + var s = item.text; + if (s == null) { + return ''; + } else { + return item.limit > 0 ? truncate$1(item) : s + ''; + } +} + +function truncate$1(item) { + var limit = +item.limit, + text = item.text + '', + width; + + if (textMetrics.width === measureWidth) { + // we are using canvas + context$1.font = font(item); + width = measure$1; + } else { + // we are relying on estimates + currFontHeight = fontSize(item); + width = estimate; + } + + if (width(text) < limit) return text; + + var ellipsis = item.ellipsis || '\u2026', + rtl = item.dir === 'rtl', + lo = 0, + hi = text.length, mid; + + limit -= width(ellipsis); + + if (rtl) { + while (lo < hi) { + mid = (lo + hi >>> 1); + if (width(text.slice(mid)) > limit) lo = mid + 1; + else hi = mid; + } + return ellipsis + text.slice(lo); + } else { + while (lo < hi) { + mid = 1 + (lo + hi >>> 1); + if (width(text.slice(0, mid)) < limit) lo = mid; + else hi = mid - 1; + } + return text.slice(0, lo) + ellipsis; + } +} + +function fontFamily(item, quote) { + var font = item.font; + return (quote && font + ? String(font).replace(/"/g, '\'') + : font) || 'sans-serif'; +} + +function font(item, quote) { + return '' + + (item.fontStyle ? item.fontStyle + ' ' : '') + + (item.fontVariant ? item.fontVariant + ' ' : '') + + (item.fontWeight ? item.fontWeight + ' ' : '') + + fontSize(item) + 'px ' + + fontFamily(item, quote); +} + +function offset(item) { + // perform our own font baseline calculation + // why? not all browsers support SVG 1.1 'alignment-baseline' :( + var baseline = item.baseline, + h = fontSize(item); + return Math.round( + baseline === 'top' ? 0.79*h : + baseline === 'middle' ? 0.30*h : + baseline === 'bottom' ? -0.21*h : 0 + ); +} + +var textAlign = { + 'left': 'start', + 'center': 'middle', + 'right': 'end' +}; + +var tempBounds = new Bounds(); + +function anchorPoint(item) { + var x = item.x || 0, + y = item.y || 0, + r = item.radius || 0, t; + + if (r) { + t = (item.theta || 0) - HalfPi; + x += r * Math.cos(t); + y += r * Math.sin(t); + } + + tempBounds.x1 = x; + tempBounds.y1 = y; + return tempBounds; +} + +function attr$5(emit, item) { + var dx = item.dx || 0, + dy = (item.dy || 0) + offset(item), + p = anchorPoint(item), + x = p.x1, + y = p.y1, + a = item.angle || 0, t; + + emit('text-anchor', textAlign[item.align] || 'start'); + + if (a) { + t = translate(x, y) + ' ' + rotate(a); + if (dx || dy) t += ' ' + translate(dx, dy); + } else { + t = translate(x + dx, y + dy); + } + emit('transform', t); +} + +function bound$5(bounds, item, mode) { + var h = textMetrics.height(item), + a = item.align, + p = anchorPoint(item), + x = p.x1, + y = p.y1, + dx = item.dx || 0, + dy = (item.dy || 0) + offset(item) - Math.round(0.8*h), // use 4/5 offset + w; + + // horizontal alignment + w = textMetrics.width(item); + if (a === 'center') { + dx -= (w / 2); + } else if (a === 'right') { + dx -= w; + } + + bounds.set(dx+=x, dy+=y, dx+w, dy+h); + if (item.angle && !mode) { + bounds.rotate(item.angle * DegToRad, x, y); + } else if (mode === 2) { + return bounds.rotatedPoints(item.angle * DegToRad, x, y); + } + return bounds; +} + +function draw$4(context, scene, bounds) { + visit(scene, function(item) { + var opacity, p, x, y, str; + if (bounds && !bounds.intersects(item.bounds)) return; // bounds check + if (!(str = textValue(item))) return; // get text string + + opacity = item.opacity == null ? 1 : item.opacity; + if (opacity === 0 || item.fontSize <= 0) return; + + context.font = font(item); + context.textAlign = item.align || 'left'; + + p = anchorPoint(item); + x = p.x1, + y = p.y1; + + if (item.angle) { + context.save(); + context.translate(x, y); + context.rotate(item.angle * DegToRad); + x = y = 0; // reset x, y + } + x += (item.dx || 0); + y += (item.dy || 0) + offset(item); + + if (item.fill && fill(context, item, opacity)) { + context.fillText(str, x, y); + } + if (item.stroke && stroke(context, item, opacity)) { + context.strokeText(str, x, y); + } + if (item.angle) context.restore(); + }); +} + +function hit$1(context, item, x, y, gx, gy) { + if (item.fontSize <= 0) return false; + if (!item.angle) return true; // bounds sufficient if no rotation + + // project point into space of unrotated bounds + var p = anchorPoint(item), + ax = p.x1, + ay = p.y1, + b = bound$5(tempBounds, item, 1), + a = -item.angle * DegToRad, + cos = Math.cos(a), + sin = Math.sin(a), + px = cos * gx - sin * gy + (ax - cos * ax + sin * ay), + py = sin * gx + cos * gy + (ay - sin * ax - cos * ay); + + return b.contains(px, py); +} + +function intersectText(item, box) { + var p = bound$5(tempBounds, item, 2); + return intersectBoxLine(box, p[0], p[1], p[2], p[3]) + || intersectBoxLine(box, p[0], p[1], p[4], p[5]) + || intersectBoxLine(box, p[4], p[5], p[6], p[7]) + || intersectBoxLine(box, p[2], p[3], p[6], p[7]); +} + +var text = { + type: 'text', + tag: 'text', + nested: false, + attr: attr$5, + bound: bound$5, + draw: draw$4, + pick: pick(hit$1), + isect: intersectText +}; + +var trail$1 = markMultiItemPath('trail', trail, pickTrail); + +var Marks = { + arc: arc$1, + area: area$1, + group: group, + image: image$1, + line: line$1, + path: path$2, + rect: rect, + rule: rule, + shape: shape$1, + symbol: symbol$1, + text: text, + trail: trail$1 +}; + +function boundItem(item, func, opt) { + var type = Marks[item.mark.marktype], + bound = func || type.bound; + if (type.nested) item = item.mark; + + return bound(item.bounds || (item.bounds = new Bounds()), item, opt); +} + +var DUMMY = {mark: null}; + +function boundMark(mark, bounds, opt) { + var type = Marks[mark.marktype], + bound = type.bound, + items = mark.items, + hasItems = items && items.length, + i, n, item, b; + + if (type.nested) { + if (hasItems) { + item = items[0]; + } else { + // no items, fake it + DUMMY.mark = mark; + item = DUMMY; + } + b = boundItem(item, bound, opt); + bounds = bounds && bounds.union(b) || b; + return bounds; + } + + bounds = bounds + || mark.bounds && mark.bounds.clear() + || new Bounds(); + + if (hasItems) { + for (i=0, n=items.length; i index) el.removeChild(nodes[--curr]); + return el; +} + +// generate css class name for mark +function cssClass(mark) { + return 'mark-' + mark.marktype + + (mark.role ? ' role-' + mark.role : '') + + (mark.name ? ' ' + mark.name : ''); +} + +function point$4(event, el) { + var rect = el.getBoundingClientRect(); + return [ + event.clientX - rect.left - (el.clientLeft || 0), + event.clientY - rect.top - (el.clientTop || 0) + ]; +} + +function resolveItem(item, event, el, origin) { + var mark = item && item.mark, + mdef, p; + + if (mark && (mdef = Marks[mark.marktype]).tip) { + p = point$4(event, el); + p[0] -= origin[0]; + p[1] -= origin[1]; + while (item = item.mark.group) { + p[0] -= item.x || 0; + p[1] -= item.y || 0; + } + item = mdef.tip(mark.items, p); + } + + return item; +} + +/** + * Create a new Handler instance. + * @param {object} [customLoader] - Optional loader instance for + * href URL sanitization. If not specified, a standard loader + * instance will be generated. + * @param {function} [customTooltip] - Optional tooltip handler + * function for custom tooltip display. + * @constructor + */ +function Handler(customLoader, customTooltip) { + this._active = null; + this._handlers = {}; + this._loader = customLoader || loader(); + this._tooltip = customTooltip || defaultTooltip; +} + +// The default tooltip display handler. +// Sets the HTML title attribute on the visualization container. +function defaultTooltip(handler, event, item, value) { + handler.element().setAttribute('title', value || ''); +} + +var prototype$G = Handler.prototype; + +/** + * Initialize a new Handler instance. + * @param {DOMElement} el - The containing DOM element for the display. + * @param {Array} origin - The origin of the display, in pixels. + * The coordinate system will be translated to this point. + * @param {object} [obj] - Optional context object that should serve as + * the "this" context for event callbacks. + * @return {Handler} - This handler instance. + */ +prototype$G.initialize = function(el, origin, obj) { + this._el = el; + this._obj = obj || null; + return this.origin(origin); +}; + +/** + * Returns the parent container element for a visualization. + * @return {DOMElement} - The containing DOM element. + */ +prototype$G.element = function() { + return this._el; +}; + +/** + * Returns the scene element (e.g., canvas or SVG) of the visualization + * Subclasses must override if the first child is not the scene element. + * @return {DOMElement} - The scene (e.g., canvas or SVG) element. + */ +prototype$G.canvas = function() { + return this._el && this._el.firstChild; +}; + +/** + * Get / set the origin coordinates of the visualization. + */ +prototype$G.origin = function(origin) { + if (arguments.length) { + this._origin = origin || [0, 0]; + return this; + } else { + return this._origin.slice(); + } +}; + +/** + * Get / set the scenegraph root. + */ +prototype$G.scene = function(scene) { + if (!arguments.length) return this._scene; + this._scene = scene; + return this; +}; + +/** + * Add an event handler. Subclasses should override this method. + */ +prototype$G.on = function(/*type, handler*/) {}; + +/** + * Remove an event handler. Subclasses should override this method. + */ +prototype$G.off = function(/*type, handler*/) {}; + +/** + * Utility method for finding the array index of an event handler. + * @param {Array} h - An array of registered event handlers. + * @param {string} type - The event type. + * @param {function} handler - The event handler instance to find. + * @return {number} - The handler's array index or -1 if not registered. + */ +prototype$G._handlerIndex = function(h, type, handler) { + for (var i = h ? h.length : 0; --i>=0;) { + if (h[i].type === type && (!handler || h[i].handler === handler)) { + return i; + } + } + return -1; +}; + +/** + * Returns an array with registered event handlers. + * @param {string} [type] - The event type to query. Any annotations + * are ignored; for example, for the argument "click.foo", ".foo" will + * be ignored and the method returns all "click" handlers. If type is + * null or unspecified, this method returns handlers for all types. + * @return {Array} - A new array containing all registered event handlers. + */ +prototype$G.handlers = function(type) { + var h = this._handlers, a = [], k; + if (type) { + a.push.apply(a, h[this.eventName(type)]); + } else { + for (k in h) { a.push.apply(a, h[k]); } + } + return a; +}; + +/** + * Parses an event name string to return the specific event type. + * For example, given "click.foo" returns "click" + * @param {string} name - The input event type string. + * @return {string} - A string with the event type only. + */ +prototype$G.eventName = function(name) { + var i = name.indexOf('.'); + return i < 0 ? name : name.slice(0,i); +}; + +/** + * Handle hyperlink navigation in response to an item.href value. + * @param {Event} event - The event triggering hyperlink navigation. + * @param {Item} item - The scenegraph item. + * @param {string} href - The URL to navigate to. + */ +prototype$G.handleHref = function(event, item, href) { + this._loader + .sanitize(href, {context:'href'}) + .then(function(opt) { + var e = new MouseEvent(event.type, event), + a = domCreate(null, 'a'); + for (var name in opt) a.setAttribute(name, opt[name]); + a.dispatchEvent(e); + }) + .catch(function() { /* do nothing */ }); +}; + +/** + * Handle tooltip display in response to an item.tooltip value. + * @param {Event} event - The event triggering tooltip display. + * @param {Item} item - The scenegraph item. + * @param {boolean} show - A boolean flag indicating whether + * to show or hide a tooltip for the given item. + */ +prototype$G.handleTooltip = function(event, item, show) { + if (item && item.tooltip != null) { + item = resolveItem(item, event, this.canvas(), this._origin); + var value = (show && item && item.tooltip) || null; + this._tooltip.call(this._obj, this, event, item, value); + } +}; + +/** + * Returns the size of a scenegraph item and its position relative + * to the viewport. + * @param {Item} item - The scenegraph item. + * @return {object} - A bounding box object (compatible with the + * DOMRect type) consisting of x, y, width, heigh, top, left, + * right, and bottom properties. + */ +prototype$G.getItemBoundingClientRect = function(item) { + if (!(el = this.canvas())) return; + + var el, rect = el.getBoundingClientRect(), + origin = this._origin, + itemBounds = item.bounds, + x = itemBounds.x1 + origin[0] + rect.left, + y = itemBounds.y1 + origin[1] + rect.top, + w = itemBounds.width(), + h = itemBounds.height(); + + // translate coordinate for each parent group + while (item.mark && (item = item.mark.group)) { + x += item.x || 0; + y += item.y || 0; + } + + // return DOMRect-compatible bounding box + return { + x: x, + y: y, + width: w, + height: h, + left: x, + top: y, + right: x + w, + bottom: y + h + }; +}; + +/** + * Create a new Renderer instance. + * @param {object} [loader] - Optional loader instance for + * image and href URL sanitization. If not specified, a + * standard loader instance will be generated. + * @constructor + */ +function Renderer(loader) { + this._el = null; + this._bgcolor = null; + this._loader = new ResourceLoader(loader); +} + +var prototype$H = Renderer.prototype; + +/** + * Initialize a new Renderer instance. + * @param {DOMElement} el - The containing DOM element for the display. + * @param {number} width - The coordinate width of the display, in pixels. + * @param {number} height - The coordinate height of the display, in pixels. + * @param {Array} origin - The origin of the display, in pixels. + * The coordinate system will be translated to this point. + * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply + * the width and height to determine the final pixel size. + * @return {Renderer} - This renderer instance. + */ +prototype$H.initialize = function(el, width, height, origin, scaleFactor) { + this._el = el; + return this.resize(width, height, origin, scaleFactor); +}; + +/** + * Returns the parent container element for a visualization. + * @return {DOMElement} - The containing DOM element. + */ +prototype$H.element = function() { + return this._el; +}; + +/** + * Returns the scene element (e.g., canvas or SVG) of the visualization + * Subclasses must override if the first child is not the scene element. + * @return {DOMElement} - The scene (e.g., canvas or SVG) element. + */ +prototype$H.canvas = function() { + return this._el && this._el.firstChild; +}; + +/** + * Get / set the background color. + */ +prototype$H.background = function(bgcolor) { + if (arguments.length === 0) return this._bgcolor; + this._bgcolor = bgcolor; + return this; +}; + +/** + * Resize the display. + * @param {number} width - The new coordinate width of the display, in pixels. + * @param {number} height - The new coordinate height of the display, in pixels. + * @param {Array} origin - The new origin of the display, in pixels. + * The coordinate system will be translated to this point. + * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply + * the width and height to determine the final pixel size. + * @return {Renderer} - This renderer instance; + */ +prototype$H.resize = function(width, height, origin, scaleFactor) { + this._width = width; + this._height = height; + this._origin = origin || [0, 0]; + this._scale = scaleFactor || 1; + return this; +}; + +/** + * Report a dirty item whose bounds should be redrawn. + * This base class method does nothing. Subclasses that perform + * incremental should implement this method. + * @param {Item} item - The dirty item whose bounds should be redrawn. + */ +prototype$H.dirty = function(/*item*/) { +}; + +/** + * Render an input scenegraph, potentially with a set of dirty items. + * This method will perform an immediate rendering with available resources. + * The renderer may also need to perform image loading to perform a complete + * render. This process can lead to asynchronous re-rendering of the scene + * after this method returns. To receive notification when rendering is + * complete, use the renderAsync method instead. + * @param {object} scene - The root mark of a scenegraph to render. + * @return {Renderer} - This renderer instance. + */ +prototype$H.render = function(scene) { + var r = this; + + // bind arguments into a render call, and cache it + // this function may be subsequently called for async redraw + r._call = function() { r._render(scene); }; + + // invoke the renderer + r._call(); + + // clear the cached call for garbage collection + // async redraws will stash their own copy + r._call = null; + + return r; +}; + +/** + * Internal rendering method. Renderer subclasses should override this + * method to actually perform rendering. + * @param {object} scene - The root mark of a scenegraph to render. + */ +prototype$H._render = function(/*scene*/) { + // subclasses to override +}; + +/** + * Asynchronous rendering method. Similar to render, but returns a Promise + * that resolves when all rendering is completed. Sometimes a renderer must + * perform image loading to get a complete rendering. The returned + * Promise will not resolve until this process completes. + * @param {object} scene - The root mark of a scenegraph to render. + * @return {Promise} - A Promise that resolves when rendering is complete. + */ +prototype$H.renderAsync = function(scene) { + var r = this.render(scene); + return this._ready + ? this._ready.then(function() { return r; }) + : Promise.resolve(r); +}; + +/** + * Internal method for asynchronous resource loading. + * Proxies method calls to the ImageLoader, and tracks loading + * progress to invoke a re-render once complete. + * @param {string} method - The method name to invoke on the ImageLoader. + * @param {string} uri - The URI for the requested resource. + * @return {Promise} - A Promise that resolves to the requested resource. + */ +prototype$H._load = function(method, uri) { + var r = this, + p = r._loader[method](uri); + + if (!r._ready) { + // re-render the scene when loading completes + var call = r._call; + r._ready = r._loader.ready() + .then(function(redraw) { + if (redraw) call(); + r._ready = null; + }); + } + + return p; +}; + +/** + * Sanitize a URL to include as a hyperlink in the rendered scene. + * This method proxies a call to ImageLoader.sanitizeURL, but also tracks + * image loading progress and invokes a re-render once complete. + * @param {string} uri - The URI string to sanitize. + * @return {Promise} - A Promise that resolves to the sanitized URL. + */ +prototype$H.sanitizeURL = function(uri) { + return this._load('sanitizeURL', uri); +}; + +/** + * Requests an image to include in the rendered scene. + * This method proxies a call to ImageLoader.loadImage, but also tracks + * image loading progress and invokes a re-render once complete. + * @param {string} uri - The URI string of the image. + * @return {Promise} - A Promise that resolves to the loaded Image. + */ +prototype$H.loadImage = function(uri) { + return this._load('loadImage', uri); +}; + +var Events = [ + 'keydown', + 'keypress', + 'keyup', + 'dragenter', + 'dragleave', + 'dragover', + 'mousedown', + 'mouseup', + 'mousemove', + 'mouseout', + 'mouseover', + 'click', + 'dblclick', + 'wheel', + 'mousewheel', + 'touchstart', + 'touchmove', + 'touchend' +]; + +var TooltipShowEvent = 'mousemove'; + +var TooltipHideEvent = 'mouseout'; + +var HrefEvent = 'click'; + +function CanvasHandler(loader, tooltip) { + Handler.call(this, loader, tooltip); + this._down = null; + this._touch = null; + this._first = true; +} + +var prototype$I = inherits(CanvasHandler, Handler); + +prototype$I.initialize = function(el, origin, obj) { + // add event listeners + var canvas = this._canvas = el && domFind(el, 'canvas'); + if (canvas) { + var that = this; + this.events.forEach(function(type) { + canvas.addEventListener(type, function(evt) { + if (prototype$I[type]) { + prototype$I[type].call(that, evt); + } else { + that.fire(type, evt); + } + }); + }); + } + + return Handler.prototype.initialize.call(this, el, origin, obj); +}; + +// return the backing canvas instance +prototype$I.canvas = function() { + return this._canvas; +}; + +// retrieve the current canvas context +prototype$I.context = function() { + return this._canvas.getContext('2d'); +}; + +// supported events +prototype$I.events = Events; + +// to keep old versions of firefox happy +prototype$I.DOMMouseScroll = function(evt) { + this.fire('mousewheel', evt); +}; + +function move(moveEvent, overEvent, outEvent) { + return function(evt) { + var a = this._active, + p = this.pickEvent(evt); + + if (p === a) { + // active item and picked item are the same + this.fire(moveEvent, evt); // fire move + } else { + // active item and picked item are different + if (!a || !a.exit) { + // fire out for prior active item + // suppress if active item was removed from scene + this.fire(outEvent, evt); + } + this._active = p; // set new active item + this.fire(overEvent, evt); // fire over for new active item + this.fire(moveEvent, evt); // fire move for new active item + } + }; +} + +function inactive(type) { + return function(evt) { + this.fire(type, evt); + this._active = null; + }; +} + +prototype$I.mousemove = move('mousemove', 'mouseover', 'mouseout'); +prototype$I.dragover = move('dragover', 'dragenter', 'dragleave'); + +prototype$I.mouseout = inactive('mouseout'); +prototype$I.dragleave = inactive('dragleave'); + +prototype$I.mousedown = function(evt) { + this._down = this._active; + this.fire('mousedown', evt); +}; + +prototype$I.click = function(evt) { + if (this._down === this._active) { + this.fire('click', evt); + this._down = null; + } +}; + +prototype$I.touchstart = function(evt) { + this._touch = this.pickEvent(evt.changedTouches[0]); + + if (this._first) { + this._active = this._touch; + this._first = false; + } + + this.fire('touchstart', evt, true); +}; + +prototype$I.touchmove = function(evt) { + this.fire('touchmove', evt, true); +}; + +prototype$I.touchend = function(evt) { + this.fire('touchend', evt, true); + this._touch = null; +}; + +// fire an event +prototype$I.fire = function(type, evt, touch) { + var a = touch ? this._touch : this._active, + h = this._handlers[type], i, len; + + // set event type relative to scenegraph items + evt.vegaType = type; + + // handle hyperlinks and tooltips first + if (type === HrefEvent && a && a.href) { + this.handleHref(evt, a, a.href); + } else if (type === TooltipShowEvent || type === TooltipHideEvent) { + this.handleTooltip(evt, a, type !== TooltipHideEvent); + } + + // invoke all registered handlers + if (h) { + for (i=0, len=h.length; i= 0) { + h.splice(i, 1); + } + + return this; +}; + +prototype$I.pickEvent = function(evt) { + var p = point$4(evt, this._canvas), + o = this._origin; + return this.pick(this._scene, p[0], p[1], p[0] - o[0], p[1] - o[1]); +}; + +// find the scenegraph item at the current mouse position +// x, y -- the absolute x, y mouse coordinates on the canvas element +// gx, gy -- the relative coordinates within the current group +prototype$I.pick = function(scene, x, y, gx, gy) { + var g = this.context(), + mark = Marks[scene.marktype]; + return mark.pick.call(this, g, scene, x, y, gx, gy); +}; + +function clip$1(context, scene) { + var clip = scene.clip; + + context.save(); + context.beginPath(); + + if (isFunction(clip)) { + clip(context); + } else { + var group = scene.group; + context.rect(0, 0, group.width || 0, group.height || 0); + } + + context.clip(); +} + +function devicePixelRatio() { + return typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1; +} + +var pixelRatio = devicePixelRatio(); + +function resize(canvas, width, height, origin, scaleFactor, opt) { + var inDOM = typeof HTMLElement !== 'undefined' + && canvas instanceof HTMLElement + && canvas.parentNode != null; + + var context = canvas.getContext('2d'), + ratio = inDOM ? pixelRatio : scaleFactor, + key; + + canvas.width = width * ratio; + canvas.height = height * ratio; + + for (key in opt) { + context[key] = opt[key]; + } + + if (inDOM && ratio !== 1) { + canvas.style.width = width + 'px'; + canvas.style.height = height + 'px'; + } + + context.pixelRatio = ratio; + context.setTransform( + ratio, 0, 0, ratio, + ratio * origin[0], + ratio * origin[1] + ); + + return canvas; +} + +function CanvasRenderer(loader) { + Renderer.call(this, loader); + this._redraw = false; + this._dirty = new Bounds(); +} + +var prototype$J = inherits(CanvasRenderer, Renderer), + base = Renderer.prototype, + tempBounds$1 = new Bounds(); + +prototype$J.initialize = function(el, width, height, origin, scaleFactor, options) { + this._options = options; + this._canvas = canvas(1, 1, options && options.type); // instantiate a small canvas + + if (el) { + domClear(el, 0).appendChild(this._canvas); + this._canvas.setAttribute('class', 'marks'); + } + // this method will invoke resize to size the canvas appropriately + return base.initialize.call(this, el, width, height, origin, scaleFactor); +}; + +prototype$J.resize = function(width, height, origin, scaleFactor) { + base.resize.call(this, width, height, origin, scaleFactor); + resize(this._canvas, this._width, this._height, + this._origin, this._scale, this._options && this._options.context); + this._redraw = true; + return this; +}; + +prototype$J.canvas = function() { + return this._canvas; +}; + +prototype$J.context = function() { + return this._canvas ? this._canvas.getContext('2d') : null; +}; + +prototype$J.dirty = function(item) { + var b = translate$1(item.bounds, item.mark.group); + this._dirty.union(b); +}; + +function clipToBounds(g, b, origin) { + // expand bounds by 1 pixel, then round to pixel boundaries + b.expand(1).round(); + + // to avoid artifacts translate if origin has fractional pixels + b.translate(-(origin[0] % 1), -(origin[1] % 1)); + + // set clipping path + g.beginPath(); + g.rect(b.x1, b.y1, b.width(), b.height()); + g.clip(); + + return b; +} + +function translate$1(bounds, group) { + if (group == null) return bounds; + var b = tempBounds$1.clear().union(bounds); + for (; group != null; group = group.mark.group) { + b.translate(group.x || 0, group.y || 0); + } + return b; +} + +prototype$J._render = function(scene) { + var g = this.context(), + o = this._origin, + w = this._width, + h = this._height, + b = this._dirty; + + // setup + g.save(); + if (this._redraw || b.empty()) { + this._redraw = false; + b = null; + } else { + b = clipToBounds(g, b, o); + } + + this.clear(-o[0], -o[1], w, h); + + // render + this.draw(g, scene, b); + + // takedown + g.restore(); + + this._dirty.clear(); + return this; +}; + +prototype$J.draw = function(ctx, scene, bounds) { + var mark = Marks[scene.marktype]; + if (scene.clip) clip$1(ctx, scene); + mark.draw.call(this, ctx, scene, bounds); + if (scene.clip) ctx.restore(); +}; + +prototype$J.clear = function(x, y, w, h) { + var g = this.context(); + g.clearRect(x, y, w, h); + if (this._bgcolor != null) { + g.fillStyle = this._bgcolor; + g.fillRect(x, y, w, h); + } +}; + +function SVGHandler(loader, tooltip) { + Handler.call(this, loader, tooltip); + var h = this; + h._hrefHandler = listener(h, function(evt, item) { + if (item && item.href) h.handleHref(evt, item, item.href); + }); + h._tooltipHandler = listener(h, function(evt, item) { + h.handleTooltip(evt, item, evt.type !== TooltipHideEvent); + }); +} + +var prototype$K = inherits(SVGHandler, Handler); + +prototype$K.initialize = function(el, origin, obj) { + var svg = this._svg; + if (svg) { + svg.removeEventListener(HrefEvent, this._hrefHandler); + svg.removeEventListener(TooltipShowEvent, this._tooltipHandler); + svg.removeEventListener(TooltipHideEvent, this._tooltipHandler); + } + this._svg = svg = el && domFind(el, 'svg'); + if (svg) { + svg.addEventListener(HrefEvent, this._hrefHandler); + svg.addEventListener(TooltipShowEvent, this._tooltipHandler); + svg.addEventListener(TooltipHideEvent, this._tooltipHandler); + } + return Handler.prototype.initialize.call(this, el, origin, obj); +}; + +prototype$K.canvas = function() { + return this._svg; +}; + +// wrap an event listener for the SVG DOM +function listener(context, handler) { + return function(evt) { + var target = evt.target, + item = target.__data__; + evt.vegaType = evt.type; + item = Array.isArray(item) ? item[0] : item; + handler.call(context._obj, evt, item); + }; +} + +// add an event handler +prototype$K.on = function(type, handler) { + var name = this.eventName(type), + h = this._handlers, + i = this._handlerIndex(h[name], type, handler); + + if (i < 0) { + var x = { + type: type, + handler: handler, + listener: listener(this, handler) + }; + + (h[name] || (h[name] = [])).push(x); + if (this._svg) { + this._svg.addEventListener(name, x.listener); + } + } + + return this; +}; + +// remove an event handler +prototype$K.off = function(type, handler) { + var name = this.eventName(type), + h = this._handlers[name], + i = this._handlerIndex(h, type, handler); + + if (i >= 0) { + if (this._svg) { + this._svg.removeEventListener(name, h[i].listener); + } + h.splice(i, 1); + } + + return this; +}; + +// generate string for an opening xml tag +// tag: the name of the xml tag +// attr: hash of attribute name-value pairs to include +// raw: additional raw string to include in tag markup +function openTag(tag, attr, raw) { + var s = '<' + tag, key, val; + if (attr) { + for (key in attr) { + val = attr[key]; + if (val != null) { + s += ' ' + key + '="' + val + '"'; + } + } + } + if (raw) s += ' ' + raw; + return s + '>'; +} + +// generate string for closing xml tag +// tag: the name of the xml tag +function closeTag(tag) { + return ''; +} + +var metadata = { + 'version': '1.1', + 'xmlns': 'http://www.w3.org/2000/svg', + 'xmlns:xlink': 'http://www.w3.org/1999/xlink' +}; + +var styles = { + 'fill': 'fill', + 'fillOpacity': 'fill-opacity', + 'stroke': 'stroke', + 'strokeOpacity': 'stroke-opacity', + 'strokeWidth': 'stroke-width', + 'strokeCap': 'stroke-linecap', + 'strokeJoin': 'stroke-linejoin', + 'strokeDash': 'stroke-dasharray', + 'strokeDashOffset': 'stroke-dashoffset', + 'strokeMiterLimit': 'stroke-miterlimit', + 'opacity': 'opacity' +}; + +var styleProperties = Object.keys(styles); + +var ns = metadata.xmlns; + +function SVGRenderer(loader) { + Renderer.call(this, loader); + this._dirtyID = 1; + this._dirty = []; + this._svg = null; + this._root = null; + this._defs = null; +} + +var prototype$L = inherits(SVGRenderer, Renderer); +var base$1 = Renderer.prototype; + +prototype$L.initialize = function(el, width, height, padding) { + if (el) { + this._svg = domChild(el, 0, 'svg', ns); + this._svg.setAttribute('class', 'marks'); + domClear(el, 1); + // set the svg root group + this._root = domChild(this._svg, 0, 'g', ns); + domClear(this._svg, 1); + } + + // create the svg definitions cache + this._defs = { + gradient: {}, + clipping: {} + }; + + // set background color if defined + this.background(this._bgcolor); + + return base$1.initialize.call(this, el, width, height, padding); +}; + +prototype$L.background = function(bgcolor) { + if (arguments.length && this._svg) { + this._svg.style.setProperty('background-color', bgcolor); + } + return base$1.background.apply(this, arguments); +}; + +prototype$L.resize = function(width, height, origin, scaleFactor) { + base$1.resize.call(this, width, height, origin, scaleFactor); + + if (this._svg) { + this._svg.setAttribute('width', this._width * this._scale); + this._svg.setAttribute('height', this._height * this._scale); + this._svg.setAttribute('viewBox', '0 0 ' + this._width + ' ' + this._height); + this._root.setAttribute('transform', 'translate(' + this._origin + ')'); + } + + this._dirty = []; + + return this; +}; + +prototype$L.canvas = function() { + return this._svg; +}; + +prototype$L.svg = function() { + if (!this._svg) return null; + + var attr = { + class: 'marks', + width: this._width * this._scale, + height: this._height * this._scale, + viewBox: '0 0 ' + this._width + ' ' + this._height + }; + for (var key in metadata) { + attr[key] = metadata[key]; + } + + var bg = !this._bgcolor ? '' + : (openTag('rect', { + width: this._width, + height: this._height, + style: 'fill: ' + this._bgcolor + ';' + }) + closeTag('rect')); + + return openTag('svg', attr) + bg + this._svg.innerHTML + closeTag('svg'); +}; + + +// -- Render entry point -- + +prototype$L._render = function(scene) { + // perform spot updates and re-render markup + if (this._dirtyCheck()) { + if (this._dirtyAll) this._resetDefs(); + this.draw(this._root, scene); + domClear(this._root, 1); + } + + this.updateDefs(); + + this._dirty = []; + ++this._dirtyID; + + return this; +}; + +// -- Manage SVG definitions ('defs') block -- + +prototype$L.updateDefs = function() { + var svg = this._svg, + defs = this._defs, + el = defs.el, + index = 0, id; + + for (id in defs.gradient) { + if (!el) defs.el = (el = domChild(svg, 0, 'defs', ns)); + index = updateGradient(el, defs.gradient[id], index); + } + + for (id in defs.clipping) { + if (!el) defs.el = (el = domChild(svg, 0, 'defs', ns)); + index = updateClipping(el, defs.clipping[id], index); + } + + // clean-up + if (el) { + if (index === 0) { + svg.removeChild(el); + defs.el = null; + } else { + domClear(el, index); + } + } +}; + +function updateGradient(el, grad, index) { + var i, n, stop; + + if (grad.gradient === 'radial') { + // SVG radial gradients automatically transform to normalized bbox + // coordinates, in a way that is cumbersome to replicate in canvas. + // So we wrap the radial gradient in a pattern element, allowing us + // to mantain a circular gradient that matches what canvas provides. + var pt = domChild(el, index++, 'pattern', ns); + pt.setAttribute('id', patternPrefix + grad.id); + pt.setAttribute('viewBox', '0,0,1,1'); + pt.setAttribute('width', '100%'); + pt.setAttribute('height', '100%'); + pt.setAttribute('preserveAspectRatio', 'xMidYMid slice'); + + pt = domChild(pt, 0, 'rect', ns); + pt.setAttribute('width', '1'); + pt.setAttribute('height', '1'); + pt.setAttribute('fill', 'url(' + href() + '#' + grad.id + ')'); + + el = domChild(el, index++, 'radialGradient', ns); + el.setAttribute('id', grad.id); + el.setAttribute('fx', grad.x1); + el.setAttribute('fy', grad.y1); + el.setAttribute('fr', grad.r1); + el.setAttribute('cx', grad.x2); + el.setAttribute('cy', grad.y2); + el.setAttribute( 'r', grad.r2); + } else { + el = domChild(el, index++, 'linearGradient', ns); + el.setAttribute('id', grad.id); + el.setAttribute('x1', grad.x1); + el.setAttribute('x2', grad.x2); + el.setAttribute('y1', grad.y1); + el.setAttribute('y2', grad.y2); + } + + for (i=0, n=grad.stops.length; i 1; +} + + +// -- Set attributes & styles on SVG elements --- + +var element = null, // temp var for current SVG element + values = null; // temp var for current values hash + +// Extra configuration for certain mark types +var mark_extras = { + group: function(mdef, el, item) { + values = el.__values__; // use parent's values hash + + element = el.childNodes[1]; + mdef.foreground(emit, item, this); + + element = el.childNodes[0]; + mdef.background(emit, item, this); + + var value = item.mark.interactive === false ? 'none' : null; + if (value !== values.events) { + element.style.setProperty('pointer-events', value); + values.events = value; + } + }, + text: function(mdef, el, item) { + var value; + + value = textValue(item); + if (value !== values.text) { + el.textContent = value; + values.text = value; + } + + setStyle(el, 'font-family', fontFamily(item)); + setStyle(el, 'font-size', fontSize(item) + 'px'); + setStyle(el, 'font-style', item.fontStyle); + setStyle(el, 'font-variant', item.fontVariant); + setStyle(el, 'font-weight', item.fontWeight); + } +}; + +function setStyle(el, name, value) { + if (value !== values[name]) { + if (value == null) { + el.style.removeProperty(name); + } else { + el.style.setProperty(name, value + ''); + } + values[name] = value; + } +} + +prototype$L._update = function(mdef, el, item) { + // set dom element and values cache + // provides access to emit method + element = el; + values = el.__values__; + + // apply svg attributes + mdef.attr(emit, item, this); + + // some marks need special treatment + var extra = mark_extras[mdef.type]; + if (extra) extra.call(this, mdef, el, item); + + // apply svg css styles + // note: element may be modified by 'extra' method + this.style(element, item); +}; + +function emit(name, value, ns) { + // early exit if value is unchanged + if (value === values[name]) return; + + if (value != null) { + // if value is provided, update DOM attribute + if (ns) { + element.setAttributeNS(ns, name, value); + } else { + element.setAttribute(name, value); + } + } else { + // else remove DOM attribute + if (ns) { + element.removeAttributeNS(ns, name); + } else { + element.removeAttribute(name); + } + } + + // note current value for future comparison + values[name] = value; +} + +prototype$L.style = function(el, o) { + if (o == null) return; + var i, n, prop, name, value; + + for (i=0, n=styleProperties.length; i 0) ? openTag('defs') + defs + closeTag('defs') : ''; +}; + +var object$1; + +function emit$1(name, value, ns, prefixed) { + object$1[prefixed || name] = value; +} + +prototype$M.attributes = function(attr, item) { + object$1 = {}; + attr(emit$1, item, this); + return object$1; +}; + +prototype$M.href = function(item) { + var that = this, + href = item.href, + attr; + + if (href) { + if (attr = that._hrefs && that._hrefs[href]) { + return attr; + } else { + that.sanitizeURL(href).then(function(attr) { + // rewrite to use xlink namespace + // note that this will be deprecated in SVG 2.0 + attr['xlink:href'] = attr.href; + attr.href = null; + (that._hrefs || (that._hrefs = {}))[href] = attr; + }); + } + } + return null; +}; + +prototype$M.mark = function(scene) { + var renderer = this, + mdef = Marks[scene.marktype], + tag = mdef.tag, + defs = this._defs, + str = '', + style; + + if (tag !== 'g' && scene.interactive === false) { + style = 'style="pointer-events: none;"'; + } + + // render opening group tag + str += openTag('g', { + 'class': cssClass(scene), + 'clip-path': scene.clip ? clip(renderer, scene, scene.group) : null + }, style); + + // render contained elements + function process(item) { + var href = renderer.href(item); + if (href) str += openTag('a', href); + + style = (tag !== 'g') ? applyStyles(item, scene, tag, defs) : null; + str += openTag(tag, renderer.attributes(mdef.attr, item), style); + + if (tag === 'text') { + str += escape_text(textValue(item)); + } else if (tag === 'g') { + str += openTag('path', renderer.attributes(mdef.background, item), + applyStyles(item, scene, 'bgrect', defs)) + closeTag('path'); + + str += openTag('g', renderer.attributes(mdef.foreground, item)) + + renderer.markGroup(item) + + closeTag('g'); + } + + str += closeTag(tag); + if (href) str += closeTag('a'); + } + + if (mdef.nested) { + if (scene.items && scene.items.length) process(scene.items[0]); + } else { + visit(scene, process); + } + + // render closing group tag + return str + closeTag('g'); +}; + +prototype$M.markGroup = function(scene) { + var renderer = this, + str = ''; + + visit(scene, function(item) { + str += renderer.mark(item); + }); + + return str; +}; + +function applyStyles(o, mark, tag, defs) { + if (o == null) return ''; + var i, n, prop, name, value, s = ''; + + if (tag === 'bgrect' && mark.interactive === false) { + s += 'pointer-events: none; '; + } + + if (tag === 'text') { + s += 'font-family: ' + fontFamily(o) + '; '; + s += 'font-size: ' + fontSize(o) + 'px; '; + if (o.fontStyle) s += 'font-style: ' + o.fontStyle + '; '; + if (o.fontVariant) s += 'font-variant: ' + o.fontVariant + '; '; + if (o.fontWeight) s += 'font-weight: ' + o.fontWeight + '; '; + } + + for (i=0, n=styleProperties.length; i/g, '>'); +} + +var Canvas = 'canvas'; +var PNG = 'png'; +var SVG = 'svg'; +var None$2 = 'none'; + +var RenderType = { + Canvas: Canvas, + PNG: PNG, + SVG: SVG, + None: None$2 +}; + +var modules = {}; + +modules[Canvas] = modules[PNG] = { + renderer: CanvasRenderer, + headless: CanvasRenderer, + handler: CanvasHandler +}; + +modules[SVG] = { + renderer: SVGRenderer, + headless: SVGStringRenderer, + handler: SVGHandler +}; + +modules[None$2] = {}; + +function renderModule(name, _) { + name = String(name || '').toLowerCase(); + if (arguments.length > 1) { + modules[name] = _; + return this; + } else { + return modules[name]; + } +} + +function intersect$1(scene, bounds, filter) { + const hits = [], // intersection results + box = new Bounds().union(bounds), // defensive copy + type = scene.marktype; + + return type ? intersectMark(scene, box, filter, hits) + : type === 'group' ? intersectGroup(scene, box, filter, hits) + : error('Intersect scene must be mark node or group item.'); +} + +function intersectMark(mark, box, filter, hits) { + if (visitMark(mark, box, filter)) { + const items = mark.items, + type = mark.marktype, + n = items.length; + + let i = 0; + + if (type === 'group') { + for (; i re-bound all items + // updates group bounds in response to modified group content + pulse.visit(pulse.MOD, function(item) { view.dirty(item); }); + markBounds.clear(); + mark.items.forEach(function(item) { + markBounds.union(boundItem$1(item, bound)); + }); + + // force reflow for legends to propagate any layout changes + // suppress other types to prevent overall layout jumpiness + if (mark.role === LegendRole) pulse.reflow(); + } + + else { + // incrementally update bounds, re-bound mark as needed + rebound = pulse.changed(pulse.REM); + + pulse.visit(pulse.ADD, function(item) { + markBounds.union(boundItem$1(item, bound)); + }); + + pulse.visit(pulse.MOD, function(item) { + rebound = rebound || markBounds.alignsWith(item.bounds); + view.dirty(item); + markBounds.union(boundItem$1(item, bound)); + }); + + if (rebound) { + markBounds.clear(); + mark.items.forEach(function(item) { markBounds.union(item.bounds); }); + } + } + + // ensure mark bounds do not exceed any clipping region + boundClip(mark); + + return pulse.modifies('bounds'); +}; + +function boundItem$1(item, bound, opt) { + return bound(item.bounds.clear(), item, opt); +} + +var COUNTER_NAME = ':vega_identifier:'; + +/** + * Adds a unique identifier to all added tuples. + * This transform creates a new signal that serves as an id counter. + * As a result, the id counter is shared across all instances of this + * transform, generating unique ids across multiple data streams. In + * addition, this signal value can be included in a snapshot of the + * dataflow state, enabling correct resumption of id allocation. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {string} params.as - The field name for the generated identifier. + */ +function Identifier(params) { + Transform.call(this, 0, params); +} + +Identifier.Definition = { + "type": "Identifier", + "metadata": {"modifies": true}, + "params": [ + { "name": "as", "type": "string", "required": true } + ] +}; + +var prototype$O = inherits(Identifier, Transform); + +prototype$O.transform = function(_, pulse) { + var counter = getCounter(pulse.dataflow), + id = counter.value, + as = _.as; + + pulse.visit(pulse.ADD, function(t) { + if (!t[as]) t[as] = ++id; + }); + + counter.set(this.value = id); + return pulse; +}; + +function getCounter(view) { + var counter = view._signals[COUNTER_NAME]; + if (!counter) { + view._signals[COUNTER_NAME] = (counter = view.add(0)); + } + return counter; +} + +/** + * Bind scenegraph items to a scenegraph mark instance. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {object} params.markdef - The mark definition for creating the mark. + * This is an object of legal scenegraph mark properties which *must* include + * the 'marktype' property. + */ +function Mark(params) { + Transform.call(this, null, params); +} + +var prototype$P = inherits(Mark, Transform); + +prototype$P.transform = function(_, pulse) { + var mark = this.value; + + // acquire mark on first invocation, bind context and group + if (!mark) { + mark = pulse.dataflow.scenegraph().mark(_.markdef, lookup$1(_), _.index); + mark.group.context = _.context; + if (!_.context.group) _.context.group = mark.group; + mark.source = this; + mark.clip = _.clip; + mark.interactive = _.interactive; + this.value = mark; + } + + // initialize entering items + var Init = mark.marktype === Group ? GroupItem : Item; + pulse.visit(pulse.ADD, function(item) { Init.call(item, mark); }); + + // update clipping and/or interactive status + if (_.modified('clip') || _.modified('interactive')) { + mark.clip = _.clip; + mark.interactive = !!_.interactive; + mark.zdirty = true; // force scenegraph re-eval + pulse.reflow(); + } + + // bind items array to scenegraph mark + mark.items = pulse.source; + return pulse; +}; + +function lookup$1(_) { + var g = _.groups, p = _.parent; + return g && g.size === 1 ? g.get(Object.keys(g.object)[0]) + : g && p ? g.lookup(p) + : null; +} + +/** + * Analyze items for overlap, changing opacity to hide items with + * overlapping bounding boxes. This transform will preserve at least + * two items (e.g., first and last) even if overlap persists. + * @param {object} params - The parameters for this operator. + * @param {function(*,*): number} [params.sort] - A comparator + * function for sorting items. + * @param {object} [params.method] - The overlap removal method to apply. + * One of 'parity' (default, hide every other item until there is no + * more overlap) or 'greedy' (sequentially scan and hide and items that + * overlap with the last visible item). + * @param {object} [params.boundScale] - A scale whose range should be used + * to bound the items. Items exceeding the bounds of the scale range + * will be treated as overlapping. If null or undefined, no bounds check + * will be applied. + * @param {object} [params.boundOrient] - The orientation of the scale + * (top, bottom, left, or right) used to bound items. This parameter is + * ignored if boundScale is null or undefined. + * @param {object} [params.boundTolerance] - The tolerance in pixels for + * bound inclusion testing (default 1). This specifies by how many pixels + * an item's bounds may exceed the scale range bounds and not be culled. + * @constructor + */ +function Overlap(params) { + Transform.call(this, null, params); +} + +var prototype$Q = inherits(Overlap, Transform); + +var methods = { + parity: function(items) { + return items.filter((item, i) => i % 2 ? (item.opacity = 0) : 1); + }, + greedy: function(items, sep) { + var a; + return items.filter((b, i) => { + if (!i || !intersect$2(a.bounds, b.bounds, sep)) { + a = b; + return 1; + } else { + return b.opacity = 0; + } + }); + } +}; + +// compute bounding box intersection +// including padding pixels of separation +function intersect$2(a, b, sep) { + return sep > Math.max( + b.x1 - a.x2, + a.x1 - b.x2, + b.y1 - a.y2, + a.y1 - b.y2 + ); +} + +function hasOverlap(items, pad) { + for (var i=1, n=items.length, a=items[0].bounds, b; i 1 && b.height() > 1; +} + +function boundTest(scale, orient, tolerance) { + var range = scale.range(), + b = new Bounds(); + + if (orient === Top || orient === Bottom) { + b.set(range[0], -Infinity, range[1], +Infinity); + } else { + b.set(-Infinity, range[0], +Infinity, range[1]); + } + b.expand(tolerance || 1); + + return item => b.encloses(item.bounds); +} + +// reset all items to be fully opaque +function reset(source) { + source.forEach(item => item.opacity = 1); + return source; +} + +// add all tuples to mod, fork pulse if parameters were modified +// fork prevents cross-stream tuple pollution (e.g., pulse from scale) +function reflow(pulse, _) { + return pulse.reflow(_.modified()).modifies('opacity'); +} + +prototype$Q.transform = function(_, pulse) { + var reduce = methods[_.method] || methods.parity, + source = pulse.materialize(pulse.SOURCE).source, + sep = _.separation || 0, + items, test, bounds; + + if (!source || !source.length) return; + + if (!_.method) { + // early exit if method is falsy + if (_.modified('method')) { + reset(source); + pulse = reflow(pulse, _); + } + return pulse; + } + + if (_.sort) { + source = source.slice().sort(_.sort); + } + + // skip labels with no content + source = source.filter(hasBounds); + + items = reset(source); + pulse = reflow(pulse, _); + + if (items.length >= 3 && hasOverlap(items, sep)) { + do { + items = reduce(items, sep); + } while (items.length >= 3 && hasOverlap(items, sep)); + + if (items.length < 3 && !peek(source).opacity) { + if (items.length > 1) peek(items).opacity = 0; + peek(source).opacity = 1; + } + } + + if (_.boundScale && _.boundTolerance >= 0) { + test = boundTest(_.boundScale, _.boundOrient, +_.boundTolerance); + source.forEach(item => { + if (!test(item)) item.opacity = 0; + }); + } + + // re-calculate mark bounds + bounds = items[0].mark.bounds.clear(); + source.forEach(item => { + if (item.opacity) bounds.union(item.bounds); + }); + + return pulse; +}; + +/** + * Queue modified scenegraph items for rendering. + * @constructor + */ +function Render(params) { + Transform.call(this, null, params); +} + +var prototype$R = inherits(Render, Transform); + +prototype$R.transform = function(_, pulse) { + var view = pulse.dataflow; + + pulse.visit(pulse.ALL, function(item) { view.dirty(item); }); + + // set z-index dirty flag as needed + if (pulse.fields && pulse.fields['zindex']) { + var item = pulse.source && pulse.source[0]; + if (item) item.mark.zdirty = true; + } +}; + +const tempBounds$2 = new Bounds(); + +function set(item, property, value) { + return item[property] === value ? 0 + : (item[property] = value, 1); +} + +const AxisOffset = 0.5; + +function isYAxis(mark) { + var orient = mark.items[0].datum.orient; + return orient === Left || orient === Right; +} + +function axisIndices(datum) { + var index = +datum.grid; + return [ + datum.ticks ? index++ : -1, // ticks index + datum.labels ? index++ : -1, // labels index + index + (+datum.domain) // title index + ]; +} + +function axisLayout(view, axis, width, height) { + var item = axis.items[0], + datum = item.datum, + orient = datum.orient, + indices = axisIndices(datum), + range = item.range, + offset = item.offset, + position = item.position, + minExtent = item.minExtent, + maxExtent = item.maxExtent, + title = datum.title && item.items[indices[2]].items[0], + titlePadding = item.titlePadding, + bounds = item.bounds, + x = 0, y = 0, i, s; + + tempBounds$2.clear().union(bounds); + bounds.clear(); + if ((i=indices[0]) > -1) bounds.union(item.items[i].bounds); + if ((i=indices[1]) > -1) bounds.union(item.items[i].bounds); + + // position axis group and title + switch (orient) { + case Top: + x = position || 0; + y = -offset; + s = Math.max(minExtent, Math.min(maxExtent, -bounds.y1)); + if (title) s = axisTitleLayout(title, s, titlePadding, 0, -1, bounds); + bounds.add(0, -s).add(range, 0); + break; + case Left: + x = -offset; + y = position || 0; + s = Math.max(minExtent, Math.min(maxExtent, -bounds.x1)); + if (title) s = axisTitleLayout(title, s, titlePadding, 1, -1, bounds); + bounds.add(-s, 0).add(0, range); + break; + case Right: + x = width + offset; + y = position || 0; + s = Math.max(minExtent, Math.min(maxExtent, bounds.x2)); + if (title) s = axisTitleLayout(title, s, titlePadding, 1, 1, bounds); + bounds.add(0, 0).add(s, range); + break; + case Bottom: + x = position || 0; + y = height + offset; + s = Math.max(minExtent, Math.min(maxExtent, bounds.y2)); + if (title) s = axisTitleLayout(title, s, titlePadding, 0, 1, bounds); + bounds.add(0, 0).add(range, s); + break; + default: + x = item.x; + y = item.y; + } + + // update bounds + boundStroke(bounds.translate(x, y), item); + + if (set(item, 'x', x + AxisOffset) | set(item, 'y', y + AxisOffset)) { + item.bounds = tempBounds$2; + view.dirty(item); + item.bounds = bounds; + view.dirty(item); + } + + return item.mark.bounds.clear().union(bounds); +} + +function axisTitleLayout(title, offset, pad, isYAxis, sign, bounds) { + var b = title.bounds, dx = 0, dy = 0; + + if (title.auto) { + offset += pad; + + isYAxis + ? dx = (title.x || 0) - (title.x = sign * offset) + : dy = (title.y || 0) - (title.y = sign * offset); + + b.translate(-dx, -dy); + title.mark.bounds.set(b.x1, b.y1, b.x2, b.y2); + + if (isYAxis) { + bounds.add(0, b.y1).add(0, b.y2); + offset += b.width(); + } else { + bounds.add(b.x1, 0).add(b.x2, 0); + offset += b.height(); + } + } else { + bounds.union(b); + } + + return offset; +} + +function gridLayoutGroups(group) { + var groups = group.items, + n = groups.length, + i = 0, mark, items; + + var views = { + marks: [], + rowheaders: [], + rowfooters: [], + colheaders: [], + colfooters: [], + rowtitle: null, + coltitle: null + }; + + // layout axes, gather legends, collect bounds + for (; i 1) { + for (i=0; i 0) dx[i] += x / 2; + } + } + + // perform vertical centering + if (alignRow && get$2(opt.center, Row) && ncols !== 1) { + for (i=0; i 0) dy[i] += y / 2; + } + } + + // position grid relative to anchor + for (i=0; i limit) { + view.warn('Grid headers exceed limit: ' + limit); + headers = headers.slice(0, limit); + } + + // apply offset + init += offset; + + // clear mark bounds for all headers + for (j=0, m=headers.length; j= 0 && (g = groups[k]) == null; k-=back); + + // assign coordinates and update bounds + if (isX) { + x = band == null ? g.x : Math.round(g.bounds.x1 + band * g.bounds.width()); + y = init; + } else { + x = init; + y = band == null ? g.y : Math.round(g.bounds.y1 + band * g.bounds.height()); + } + b.union(h.bounds.translate(x - (h.x || 0), y - (h.y || 0))); + h.x = x; + h.y = y; + view.dirty(h); + + // update current edge of layout bounds + edge = agg(edge, b[bf]); + } + + return edge; +} + +function layoutTitle(view, g, offset, isX, bounds, band) { + if (!g) return; + view.dirty(g); + + // compute title coordinates + var x = offset, y = offset; + isX + ? (x = Math.round(bounds.x1 + band * bounds.width())) + : (y = Math.round(bounds.y1 + band * bounds.height())); + + // assign coordinates and update bounds + g.bounds.translate(x - (g.x || 0), y - (g.y || 0)); + g.mark.bounds.clear().union(g.bounds); + g.x = x; + g.y = y; + + // queue title for redraw + view.dirty(g); +} + +// utility for looking up legend layout configuration +function lookup$2(config, orient) { + const opt = config[orient] || {}; + return (key, d) => opt[key] != null ? opt[key] + : config[key] != null ? config[key] + : d; +} + +// if legends specify offset directly, use the maximum specified value +function offsets(legends, value) { + var max = -Infinity; + legends.forEach(item => { + if (item.offset != null) max = Math.max(max, item.offset); + }); + return max > -Infinity ? max : value; +} + +function legendParams(g, orient, config, xb, yb, w, h) { + const _ = lookup$2(config, orient), + offset = offsets(g, _('offset', 0)), + anchor = _('anchor', Start), + mult = anchor === End ? 1 : anchor === Middle ? 0.5 : 0; + + const p = { + align: Each, + bounds: _('bounds', Flush), + columns: _('direction') === 'vertical' ? 1 : g.length, + padding: _('margin', 8), + center: _('center'), + nodirty: true + }; + + switch (orient) { + case Left: + p.anchor = { + x: Math.floor(xb.x1) - offset, column: End, + y: mult * (h || xb.height() + 2 * xb.y1), row: anchor + }; + break; + case Right: + p.anchor = { + x: Math.ceil(xb.x2) + offset, + y: mult * (h || xb.height() + 2 * xb.y1), row: anchor + }; + break; + case Top: + p.anchor = { + y: Math.floor(yb.y1) - offset, row: End, + x: mult * (w || yb.width() + 2 * yb.x1), column: anchor + }; + break; + case Bottom: + p.anchor = { + y: Math.ceil(yb.y2) + offset, + x: mult * (w || yb.width() + 2 * yb.x1), column: anchor + }; + break; + case TopLeft: + p.anchor = {x: offset, y: offset}; + break; + case TopRight: + p.anchor = {x: w - offset, y: offset, column: End}; + break; + case BottomLeft: + p.anchor = {x: offset, y: h - offset, row: End}; + break; + case BottomRight: + p.anchor = {x: w - offset, y: h - offset, column: End, row: End}; + break; + } + + return p; +} + +function legendLayout(view, legend) { + var item = legend.items[0], + datum = item.datum, + orient = item.orient, + bounds = item.bounds, + x = item.x, y = item.y, w, h; + + // cache current bounds for later comparison + item._bounds + ? item._bounds.clear().union(bounds) + : item._bounds = bounds.clone(); + bounds.clear(); + + // adjust legend to accommodate padding and title + legendGroupLayout(view, item, item.items[0].items[0]); + + // aggregate bounds to determine size, and include origin + bounds = legendBounds(item, bounds); + w = 2 * item.padding; + h = 2 * item.padding; + if (!bounds.empty()) { + w = Math.ceil(bounds.width() + w); + h = Math.ceil(bounds.height() + h); + } + + if (datum.type === Symbols) { + legendEntryLayout(item.items[0].items[0].items[0].items); + } + + if (orient !== None$1) { + item.x = x = 0; + item.y = y = 0; + } + item.width = w; + item.height = h; + boundStroke(bounds.set(x, y, x + w, y + h), item); + item.mark.bounds.clear().union(bounds); + + return item; +} + +function legendBounds(item, b) { + // aggregate item bounds + item.items.forEach(_ => b.union(_.bounds)); + + // anchor to legend origin + b.x1 = item.padding; + b.y1 = item.padding; + + return b; +} + +function legendGroupLayout(view, item, entry) { + var pad = item.padding, + ex = pad - entry.x, + ey = pad - entry.y; + + if (!item.datum.title) { + if (ex || ey) translate$2(view, entry, ex, ey); + } else { + var title = item.items[1].items[0], + anchor = title.anchor, + tpad = item.titlePadding || 0, + tx = pad - title.x, + ty = pad - title.y; + + switch (title.orient) { + case Left: + ex += Math.ceil(title.bounds.width()) + tpad; + break; + case Right: + case Bottom: + break; + default: + ey += title.fontSize + tpad; + } + if (ex || ey) translate$2(view, entry, ex, ey); + + switch (title.orient) { + case Left: + ty += legendTitleOffset(item, entry, title, anchor, 0, 1); + break; + case Right: + tx += legendTitleOffset(item, entry, title, End, 1, 0) + tpad; + ty += legendTitleOffset(item, entry, title, anchor, 0, 1); + break; + case Bottom: + tx += legendTitleOffset(item, entry, title, anchor, 1, 0); + ty += legendTitleOffset(item, entry, title, End, 0, 0, 1) + tpad; + break; + default: + tx += legendTitleOffset(item, entry, title, anchor, 1, 0); + } + if (tx || ty) translate$2(view, title, tx, ty); + + // translate legend if title pushes into negative coordinates + if ((tx = Math.round(title.bounds.x1 - pad)) < 0) { + translate$2(view, entry, -tx, 0); + translate$2(view, title, -tx, 0); + } + } +} + +function legendTitleOffset(item, entry, title, anchor, x, lr, noBar) { + const grad = item.datum.type !== 'symbol', + vgrad = title.datum.vgrad, + e = grad && (lr || !vgrad) && !noBar ? entry.items[0] : entry, + s = e.bounds[x ? 'x2' : 'y2'] - item.padding, + u = vgrad && lr ? s : 0, + v = vgrad && lr ? 0 : s; + + return Math.round(anchor === Start ? u : anchor === End ? v : 0.5 * s); +} + +function translate$2(view, item, dx, dy) { + item.x += dx; + item.y += dy; + item.bounds.translate(dx, dy); + item.mark.bounds.translate(dx, dy); + view.dirty(item); +} + +function legendEntryLayout(entries) { + // get max widths for each column + var widths = entries.reduce(function(w, g) { + w[g.column] = Math.max(g.bounds.x2 - g.x, w[g.column] || 0); + return w; + }, {}); + + // set dimensions of legend entry groups + entries.forEach(function(g) { + g.width = widths[g.column]; + g.height = g.bounds.y2 - g.y; + }); +} + +function titleLayout(view, title, width, height, viewBounds) { + var item = title.items[0], + frame = item.frame, + orient = item.orient, + anchor = item.anchor, + offset = item.offset, + bounds = item.bounds, + vertical = (orient === Left || orient === Right), + start = 0, + end = vertical ? height : width, + x = 0, y = 0, pos; + + if (frame !== Group) { + orient === Left ? (start = viewBounds.y2, end = viewBounds.y1) + : orient === Right ? (start = viewBounds.y1, end = viewBounds.y2) + : (start = viewBounds.x1, end = viewBounds.x2); + } else if (orient === Left) { + start = height, end = 0; + } + + pos = (anchor === Start) ? start + : (anchor === End) ? end + : (start + end) / 2; + + tempBounds$2.clear().union(bounds); + + // position title text + switch (orient) { + case Top: + x = pos; + y = viewBounds.y1 - offset; + break; + case Left: + x = viewBounds.x1 - offset; + y = pos; + break; + case Right: + x = viewBounds.x2 + offset; + y = pos; + break; + case Bottom: + x = pos; + y = viewBounds.y2 + offset; + break; + default: + x = item.x; + y = item.y; + } + + bounds.translate(x - (item.x || 0), y - (item.y || 0)); + if (set(item, 'x', x) | set(item, 'y', y)) { + item.bounds = tempBounds$2; + view.dirty(item); + item.bounds = bounds; + view.dirty(item); + } + + // update bounds + return title.bounds.clear().union(bounds); +} + +/** + * Layout view elements such as axes and legends. + * Also performs size adjustments. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {object} params.mark - Scenegraph mark of groups to layout. + */ +function ViewLayout(params) { + Transform.call(this, null, params); +} + +var prototype$S = inherits(ViewLayout, Transform); + +prototype$S.transform = function(_, pulse) { + // TODO incremental update, output? + var view = pulse.dataflow; + _.mark.items.forEach(function(group) { + if (_.layout) trellisLayout(view, group, _.layout); + layoutGroup(view, group, _); + }); + if (_.modified()) pulse.reflow(); + return pulse; +}; + +function layoutGroup(view, group, _) { + var items = group.items, + width = Math.max(0, group.width || 0), + height = Math.max(0, group.height || 0), + viewBounds = new Bounds().set(0, 0, width, height), + xBounds = viewBounds.clone(), + yBounds = viewBounds.clone(), + legends = [], title, + mark, orient, b, i, n; + + // layout axes, gather legends, collect bounds + for (i=0, n=items.length; i { + orient = item.orient || Right; + if (orient !== None$1) (l[orient] || (l[orient] = [])).push(item); + }); + + // perform grid layout for each orient group + for (let orient in l) { + const g = l[orient]; + gridLayout(view, g, legendParams( + g, orient, _.legends, xBounds, yBounds, width, height + )); + } + + // update view bounds + legends.forEach(item => { + const b = item.bounds; + + if (!b.equals(item._bounds)) { + item.bounds = item._bounds; + view.dirty(item); // dirty previous location + item.bounds = b; + view.dirty(item); + } + + if (_.autosize && _.autosize.type === Fit) { + // For autosize fit, incorporate the orthogonal dimension only. + // Legends that overrun the chart area will then be clipped; + // otherwise the chart area gets reduced to nothing! + switch(item.orient) { + case Left: + case Right: + viewBounds.add(b.x1, 0).add(b.x2, 0); + break; + case Top: + case Bottom: + viewBounds.add(0, b.y1).add(0, b.y2); + } + } else { + viewBounds.union(b); + } + }); + } + + // combine bounding boxes + viewBounds.union(xBounds).union(yBounds); + + // layout title, adjust bounds + if (title) { + viewBounds.union(titleLayout(view, title, width, height, viewBounds)); + } + + // perform size adjustment + viewSizeLayout(view, group, viewBounds, _); +} + +function viewSizeLayout(view, group, viewBounds, _) { + var auto = _.autosize || {}, + type = auto.type, + viewWidth = view._width, + viewHeight = view._height, + padding = view.padding(); + + if (view._autosize < 1 || !type) return; + + var width = Math.max(0, group.width || 0), + left = Math.max(0, Math.ceil(-viewBounds.x1)), + right = Math.max(0, Math.ceil(viewBounds.x2 - width)), + height = Math.max(0, group.height || 0), + top = Math.max(0, Math.ceil(-viewBounds.y1)), + bottom = Math.max(0, Math.ceil(viewBounds.y2 - height)); + + if (auto.contains === Padding) { + viewWidth -= padding.left + padding.right; + viewHeight -= padding.top + padding.bottom; + } + + if (type === None$1) { + left = 0; + top = 0; + width = viewWidth; + height = viewHeight; + } + + else if (type === Fit) { + width = Math.max(0, viewWidth - left - right); + height = Math.max(0, viewHeight - top - bottom); + } + + else if (type === FitX) { + width = Math.max(0, viewWidth - left - right); + viewHeight = height + top + bottom; + } + + else if (type === FitY) { + viewWidth = width + left + right; + height = Math.max(0, viewHeight - top - bottom); + } + + else if (type === Pad) { + viewWidth = width + left + right; + viewHeight = height + top + bottom; + } + + view._resizeView( + viewWidth, viewHeight, + width, height, + [left, top], + auto.resize + ); +} + + + +var vtx = /*#__PURE__*/Object.freeze({ + bound: Bound, + identifier: Identifier, + mark: Mark, + overlap: Overlap, + render: Render, + viewlayout: ViewLayout +}); + +function bandSpace(count, paddingInner, paddingOuter) { + var space = count - paddingInner + paddingOuter * 2; + return count ? (space > 0 ? space : 1) : 0; +} + +const Identity = 'identity'; + +const Linear$1 = 'linear'; +const Log = 'log'; +const Pow = 'pow'; +const Sqrt = 'sqrt'; +const Symlog = 'symlog'; + +const Time = 'time'; +const UTC = 'utc'; + +const Sequential = 'sequential'; +const Diverging = 'diverging'; + +const Quantile = 'quantile'; +const Quantize = 'quantize'; +const Threshold = 'threshold'; + +const Ordinal = 'ordinal'; +const Point = 'point'; +const Band = 'band'; +const BinOrdinal = 'bin-ordinal'; + +function isSequential(key) { + return key && key.startsWith(Sequential); +} + +function isDiverging(key) { + return key && key.startsWith(Diverging); +} + +function isInterpolating(key) { + return isSequential(key) || isDiverging(key); +} + +function isLogarithmic(key) { + return key === Log || key.endsWith('-log'); +} + +function isContinuous(key) { + switch (key) { + case Linear$1: + case Log: + case Pow: + case Sqrt: + case Symlog: + case Time: + case UTC: + case Sequential: + return true; + } + return false; +} + +var time = { + millisecond: millisecond, + second: second, + minute: minute, + hour: hour, + day: day, + week: sunday, + month: month, + year: year +}; + +var utc = { + millisecond: millisecond, + second: second, + minute: utcMinute, + hour: utcHour, + day: utcDay, + week: utcSunday, + month: utcMonth, + year: utcYear +}; + +function timeInterval(unit, type) { + const t = (type === UTC ? utc : time); + return t.hasOwnProperty(unit) && t[unit]; +} + +function invertRange(scale) { + return function(_) { + var lo = _[0], + hi = _[1], + t; + + if (hi < lo) { + t = lo; + lo = hi; + hi = t; + } + + return [ + scale.invert(lo), + scale.invert(hi) + ]; + } +} + +function invertRangeExtent(scale) { + return function(_) { + var range = scale.range(), + lo = _[0], + hi = _[1], + min = -1, max, t, i, n; + + if (hi < lo) { + t = lo; + lo = hi; + hi = t; + } + + for (i=0, n=range.length; i= lo && range[i] <= hi) { + if (min < 0) min = i; + max = i; + } + } + + if (min < 0) return undefined; + + lo = scale.invertExtent(range[min]); + hi = scale.invertExtent(range[max]); + + return [ + lo[0] === undefined ? lo[1] : lo[0], + hi[1] === undefined ? hi[0] : hi[1] + ]; + } +} + +function ascending$3(a, b) { + return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; +} + +function bisector$3(compare) { + if (compare.length === 1) compare = ascendingComparator$3(compare); + return { + left: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) < 0) lo = mid + 1; + else hi = mid; + } + return lo; + }, + right: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) > 0) hi = mid; + else lo = mid + 1; + } + return lo; + } + }; +} + +function ascendingComparator$3(f) { + return function(d, x) { + return ascending$3(f(d), x); + }; +} + +var ascendingBisect$3 = bisector$3(ascending$3); +var bisectRight = ascendingBisect$3.right; + +function sequence(start, stop, step) { + start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step; + + var i = -1, + n = Math.max(0, Math.ceil((stop - start) / step)) | 0, + range = new Array(n); + + while (++i < n) { + range[i] = start + i * step; + } + + return range; +} + +function ascending$4(a, b) { + return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; +} + +function bisector$4(compare) { + if (compare.length === 1) compare = ascendingComparator$4(compare); + return { + left: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) < 0) lo = mid + 1; + else hi = mid; + } + return lo; + }, + right: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) > 0) hi = mid; + else lo = mid + 1; + } + return lo; + } + }; +} + +function ascendingComparator$4(f) { + return function(d, x) { + return ascending$4(f(d), x); + }; +} + +var ascendingBisect$4 = bisector$4(ascending$4); +var bisectRight$1 = ascendingBisect$4.right; + +var e10 = Math.sqrt(50), + e5 = Math.sqrt(10), + e2 = Math.sqrt(2); + +function ticks(start, stop, count) { + var reverse, + i = -1, + n, + ticks, + step; + + stop = +stop, start = +start, count = +count; + if (start === stop && count > 0) return [start]; + if (reverse = stop < start) n = start, start = stop, stop = n; + if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return []; + + if (step > 0) { + start = Math.ceil(start / step); + stop = Math.floor(stop / step); + ticks = new Array(n = Math.ceil(stop - start + 1)); + while (++i < n) ticks[i] = (start + i) * step; + } else { + start = Math.floor(start * step); + stop = Math.ceil(stop * step); + ticks = new Array(n = Math.ceil(start - stop + 1)); + while (++i < n) ticks[i] = (start - i) / step; + } + + if (reverse) ticks.reverse(); + + return ticks; +} + +function tickIncrement(start, stop, count) { + var step = (stop - start) / Math.max(0, count), + power = Math.floor(Math.log(step) / Math.LN10), + error = step / Math.pow(10, power); + return power >= 0 + ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power) + : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1); +} + +function tickStep(start, stop, count) { + var step0 = Math.abs(stop - start) / Math.max(0, count), + step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)), + error = step0 / step1; + if (error >= e10) step1 *= 10; + else if (error >= e5) step1 *= 5; + else if (error >= e2) step1 *= 2; + return stop < start ? -step1 : step1; +} + +function number$2(x) { + return x === null ? NaN : +x; +} + +function quantile$2(values, p, valueof = number$2) { + if (!(n = values.length)) return; + if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values); + if (p >= 1) return +valueof(values[n - 1], n - 1, values); + var n, + i = (n - 1) * p, + i0 = Math.floor(i), + value0 = +valueof(values[i0], i0, values), + value1 = +valueof(values[i0 + 1], i0 + 1, values); + return value0 + (value1 - value0) * (i - i0); +} + +function initRange(domain, range) { + switch (arguments.length) { + case 0: break; + case 1: this.range(domain); break; + default: this.range(range).domain(domain); break; + } + return this; +} + +function initInterpolator(domain, interpolator) { + switch (arguments.length) { + case 0: break; + case 1: this.interpolator(domain); break; + default: this.interpolator(interpolator).domain(domain); break; + } + return this; +} + +const implicit = Symbol("implicit"); + +function ordinal() { + var index = new Map(), + domain = [], + range = [], + unknown = implicit; + + function scale(d) { + var key = d + "", i = index.get(key); + if (!i) { + if (unknown !== implicit) return unknown; + index.set(key, i = domain.push(d)); + } + return range[(i - 1) % range.length]; + } + + scale.domain = function(_) { + if (!arguments.length) return domain.slice(); + domain = [], index = new Map(); + for (const value of _) { + const key = value + ""; + if (index.has(key)) continue; + index.set(key, domain.push(value)); + } + return scale; + }; + + scale.range = function(_) { + return arguments.length ? (range = Array.from(_), scale) : range.slice(); + }; + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : unknown; + }; + + scale.copy = function() { + return ordinal(domain, range).unknown(unknown); + }; + + initRange.apply(scale, arguments); + + return scale; +} + +function define(constructor, factory, prototype) { + constructor.prototype = factory.prototype = prototype; + prototype.constructor = constructor; +} + +function extend$1(parent, definition) { + var prototype = Object.create(parent.prototype); + for (var key in definition) prototype[key] = definition[key]; + return prototype; +} + +function Color() {} + +var darker = 0.7; +var brighter = 1 / darker; + +var reI = "\\s*([+-]?\\d+)\\s*", + reN = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*", + reP = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*", + reHex3 = /^#([0-9a-f]{3})$/, + reHex6 = /^#([0-9a-f]{6})$/, + reRgbInteger = new RegExp("^rgb\\(" + [reI, reI, reI] + "\\)$"), + reRgbPercent = new RegExp("^rgb\\(" + [reP, reP, reP] + "\\)$"), + reRgbaInteger = new RegExp("^rgba\\(" + [reI, reI, reI, reN] + "\\)$"), + reRgbaPercent = new RegExp("^rgba\\(" + [reP, reP, reP, reN] + "\\)$"), + reHslPercent = new RegExp("^hsl\\(" + [reN, reP, reP] + "\\)$"), + reHslaPercent = new RegExp("^hsla\\(" + [reN, reP, reP, reN] + "\\)$"); + +var named = { + aliceblue: 0xf0f8ff, + antiquewhite: 0xfaebd7, + aqua: 0x00ffff, + aquamarine: 0x7fffd4, + azure: 0xf0ffff, + beige: 0xf5f5dc, + bisque: 0xffe4c4, + black: 0x000000, + blanchedalmond: 0xffebcd, + blue: 0x0000ff, + blueviolet: 0x8a2be2, + brown: 0xa52a2a, + burlywood: 0xdeb887, + cadetblue: 0x5f9ea0, + chartreuse: 0x7fff00, + chocolate: 0xd2691e, + coral: 0xff7f50, + cornflowerblue: 0x6495ed, + cornsilk: 0xfff8dc, + crimson: 0xdc143c, + cyan: 0x00ffff, + darkblue: 0x00008b, + darkcyan: 0x008b8b, + darkgoldenrod: 0xb8860b, + darkgray: 0xa9a9a9, + darkgreen: 0x006400, + darkgrey: 0xa9a9a9, + darkkhaki: 0xbdb76b, + darkmagenta: 0x8b008b, + darkolivegreen: 0x556b2f, + darkorange: 0xff8c00, + darkorchid: 0x9932cc, + darkred: 0x8b0000, + darksalmon: 0xe9967a, + darkseagreen: 0x8fbc8f, + darkslateblue: 0x483d8b, + darkslategray: 0x2f4f4f, + darkslategrey: 0x2f4f4f, + darkturquoise: 0x00ced1, + darkviolet: 0x9400d3, + deeppink: 0xff1493, + deepskyblue: 0x00bfff, + dimgray: 0x696969, + dimgrey: 0x696969, + dodgerblue: 0x1e90ff, + firebrick: 0xb22222, + floralwhite: 0xfffaf0, + forestgreen: 0x228b22, + fuchsia: 0xff00ff, + gainsboro: 0xdcdcdc, + ghostwhite: 0xf8f8ff, + gold: 0xffd700, + goldenrod: 0xdaa520, + gray: 0x808080, + green: 0x008000, + greenyellow: 0xadff2f, + grey: 0x808080, + honeydew: 0xf0fff0, + hotpink: 0xff69b4, + indianred: 0xcd5c5c, + indigo: 0x4b0082, + ivory: 0xfffff0, + khaki: 0xf0e68c, + lavender: 0xe6e6fa, + lavenderblush: 0xfff0f5, + lawngreen: 0x7cfc00, + lemonchiffon: 0xfffacd, + lightblue: 0xadd8e6, + lightcoral: 0xf08080, + lightcyan: 0xe0ffff, + lightgoldenrodyellow: 0xfafad2, + lightgray: 0xd3d3d3, + lightgreen: 0x90ee90, + lightgrey: 0xd3d3d3, + lightpink: 0xffb6c1, + lightsalmon: 0xffa07a, + lightseagreen: 0x20b2aa, + lightskyblue: 0x87cefa, + lightslategray: 0x778899, + lightslategrey: 0x778899, + lightsteelblue: 0xb0c4de, + lightyellow: 0xffffe0, + lime: 0x00ff00, + limegreen: 0x32cd32, + linen: 0xfaf0e6, + magenta: 0xff00ff, + maroon: 0x800000, + mediumaquamarine: 0x66cdaa, + mediumblue: 0x0000cd, + mediumorchid: 0xba55d3, + mediumpurple: 0x9370db, + mediumseagreen: 0x3cb371, + mediumslateblue: 0x7b68ee, + mediumspringgreen: 0x00fa9a, + mediumturquoise: 0x48d1cc, + mediumvioletred: 0xc71585, + midnightblue: 0x191970, + mintcream: 0xf5fffa, + mistyrose: 0xffe4e1, + moccasin: 0xffe4b5, + navajowhite: 0xffdead, + navy: 0x000080, + oldlace: 0xfdf5e6, + olive: 0x808000, + olivedrab: 0x6b8e23, + orange: 0xffa500, + orangered: 0xff4500, + orchid: 0xda70d6, + palegoldenrod: 0xeee8aa, + palegreen: 0x98fb98, + paleturquoise: 0xafeeee, + palevioletred: 0xdb7093, + papayawhip: 0xffefd5, + peachpuff: 0xffdab9, + peru: 0xcd853f, + pink: 0xffc0cb, + plum: 0xdda0dd, + powderblue: 0xb0e0e6, + purple: 0x800080, + rebeccapurple: 0x663399, + red: 0xff0000, + rosybrown: 0xbc8f8f, + royalblue: 0x4169e1, + saddlebrown: 0x8b4513, + salmon: 0xfa8072, + sandybrown: 0xf4a460, + seagreen: 0x2e8b57, + seashell: 0xfff5ee, + sienna: 0xa0522d, + silver: 0xc0c0c0, + skyblue: 0x87ceeb, + slateblue: 0x6a5acd, + slategray: 0x708090, + slategrey: 0x708090, + snow: 0xfffafa, + springgreen: 0x00ff7f, + steelblue: 0x4682b4, + tan: 0xd2b48c, + teal: 0x008080, + thistle: 0xd8bfd8, + tomato: 0xff6347, + turquoise: 0x40e0d0, + violet: 0xee82ee, + wheat: 0xf5deb3, + white: 0xffffff, + whitesmoke: 0xf5f5f5, + yellow: 0xffff00, + yellowgreen: 0x9acd32 +}; + +define(Color, color$1, { + displayable: function() { + return this.rgb().displayable(); + }, + hex: function() { + return this.rgb().hex(); + }, + toString: function() { + return this.rgb() + ""; + } +}); + +function color$1(format) { + var m; + format = (format + "").trim().toLowerCase(); + return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00 + : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000 + : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0) + : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%) + : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1) + : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1) + : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%) + : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1) + : named.hasOwnProperty(format) ? rgbn(named[format]) + : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0) + : null; +} + +function rgbn(n) { + return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1); +} + +function rgba(r, g, b, a) { + if (a <= 0) r = g = b = NaN; + return new Rgb(r, g, b, a); +} + +function rgbConvert(o) { + if (!(o instanceof Color)) o = color$1(o); + if (!o) return new Rgb; + o = o.rgb(); + return new Rgb(o.r, o.g, o.b, o.opacity); +} + +function rgb(r, g, b, opacity) { + return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity); +} + +function Rgb(r, g, b, opacity) { + this.r = +r; + this.g = +g; + this.b = +b; + this.opacity = +opacity; +} + +define(Rgb, rgb, extend$1(Color, { + brighter: function(k) { + k = k == null ? brighter : Math.pow(brighter, k); + return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); + }, + darker: function(k) { + k = k == null ? darker : Math.pow(darker, k); + return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); + }, + rgb: function() { + return this; + }, + displayable: function() { + return (0 <= this.r && this.r <= 255) + && (0 <= this.g && this.g <= 255) + && (0 <= this.b && this.b <= 255) + && (0 <= this.opacity && this.opacity <= 1); + }, + hex: function() { + return "#" + hex(this.r) + hex(this.g) + hex(this.b); + }, + toString: function() { + var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a)); + return (a === 1 ? "rgb(" : "rgba(") + + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", " + + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", " + + Math.max(0, Math.min(255, Math.round(this.b) || 0)) + + (a === 1 ? ")" : ", " + a + ")"); + } +})); + +function hex(value) { + value = Math.max(0, Math.min(255, Math.round(value) || 0)); + return (value < 16 ? "0" : "") + value.toString(16); +} + +function hsla(h, s, l, a) { + if (a <= 0) h = s = l = NaN; + else if (l <= 0 || l >= 1) h = s = NaN; + else if (s <= 0) h = NaN; + return new Hsl(h, s, l, a); +} + +function hslConvert(o) { + if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity); + if (!(o instanceof Color)) o = color$1(o); + if (!o) return new Hsl; + if (o instanceof Hsl) return o; + o = o.rgb(); + var r = o.r / 255, + g = o.g / 255, + b = o.b / 255, + min = Math.min(r, g, b), + max = Math.max(r, g, b), + h = NaN, + s = max - min, + l = (max + min) / 2; + if (s) { + if (r === max) h = (g - b) / s + (g < b) * 6; + else if (g === max) h = (b - r) / s + 2; + else h = (r - g) / s + 4; + s /= l < 0.5 ? max + min : 2 - max - min; + h *= 60; + } else { + s = l > 0 && l < 1 ? 0 : h; + } + return new Hsl(h, s, l, o.opacity); +} + +function hsl(h, s, l, opacity) { + return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity); +} + +function Hsl(h, s, l, opacity) { + this.h = +h; + this.s = +s; + this.l = +l; + this.opacity = +opacity; +} + +define(Hsl, hsl, extend$1(Color, { + brighter: function(k) { + k = k == null ? brighter : Math.pow(brighter, k); + return new Hsl(this.h, this.s, this.l * k, this.opacity); + }, + darker: function(k) { + k = k == null ? darker : Math.pow(darker, k); + return new Hsl(this.h, this.s, this.l * k, this.opacity); + }, + rgb: function() { + var h = this.h % 360 + (this.h < 0) * 360, + s = isNaN(h) || isNaN(this.s) ? 0 : this.s, + l = this.l, + m2 = l + (l < 0.5 ? l : 1 - l) * s, + m1 = 2 * l - m2; + return new Rgb( + hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2), + hsl2rgb(h, m1, m2), + hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2), + this.opacity + ); + }, + displayable: function() { + return (0 <= this.s && this.s <= 1 || isNaN(this.s)) + && (0 <= this.l && this.l <= 1) + && (0 <= this.opacity && this.opacity <= 1); + } +})); + +/* From FvD 13.37, CSS Color Module Level 3 */ +function hsl2rgb(h, m1, m2) { + return (h < 60 ? m1 + (m2 - m1) * h / 60 + : h < 180 ? m2 + : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60 + : m1) * 255; +} + +var deg2rad = Math.PI / 180; +var rad2deg = 180 / Math.PI; + +// https://beta.observablehq.com/@mbostock/lab-and-rgb +var K = 18, + Xn = 0.96422, + Yn = 1, + Zn = 0.82521, + t0$1 = 4 / 29, + t1$1 = 6 / 29, + t2 = 3 * t1$1 * t1$1, + t3 = t1$1 * t1$1 * t1$1; + +function labConvert(o) { + if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity); + if (o instanceof Hcl) { + if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity); + var h = o.h * deg2rad; + return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity); + } + if (!(o instanceof Rgb)) o = rgbConvert(o); + var r = rgb2lrgb(o.r), + g = rgb2lrgb(o.g), + b = rgb2lrgb(o.b), + y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z; + if (r === g && g === b) x = z = y; else { + x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn); + z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn); + } + return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity); +} + +function lab(l, a, b, opacity) { + return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity); +} + +function Lab(l, a, b, opacity) { + this.l = +l; + this.a = +a; + this.b = +b; + this.opacity = +opacity; +} + +define(Lab, lab, extend$1(Color, { + brighter: function(k) { + return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity); + }, + darker: function(k) { + return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity); + }, + rgb: function() { + var y = (this.l + 16) / 116, + x = isNaN(this.a) ? y : y + this.a / 500, + z = isNaN(this.b) ? y : y - this.b / 200; + x = Xn * lab2xyz(x); + y = Yn * lab2xyz(y); + z = Zn * lab2xyz(z); + return new Rgb( + lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z), + lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z), + lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z), + this.opacity + ); + } +})); + +function xyz2lab(t) { + return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0$1; +} + +function lab2xyz(t) { + return t > t1$1 ? t * t * t : t2 * (t - t0$1); +} + +function lrgb2rgb(x) { + return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055); +} + +function rgb2lrgb(x) { + return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4); +} + +function hclConvert(o) { + if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity); + if (!(o instanceof Lab)) o = labConvert(o); + if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity); + var h = Math.atan2(o.b, o.a) * rad2deg; + return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity); +} + +function hcl(h, c, l, opacity) { + return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity); +} + +function Hcl(h, c, l, opacity) { + this.h = +h; + this.c = +c; + this.l = +l; + this.opacity = +opacity; +} + +define(Hcl, hcl, extend$1(Color, { + brighter: function(k) { + return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity); + }, + darker: function(k) { + return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity); + }, + rgb: function() { + return labConvert(this).rgb(); + } +})); + +var A = -0.14861, + B = +1.78277, + C = -0.29227, + D = -0.90649, + E = +1.97294, + ED = E * D, + EB = E * B, + BC_DA = B * C - D * A; + +function cubehelixConvert(o) { + if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity); + if (!(o instanceof Rgb)) o = rgbConvert(o); + var r = o.r / 255, + g = o.g / 255, + b = o.b / 255, + l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB), + bl = b - l, + k = (E * (g - l) - C * bl) / D, + s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1 + h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN; + return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity); +} + +function cubehelix(h, s, l, opacity) { + return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity); +} + +function Cubehelix(h, s, l, opacity) { + this.h = +h; + this.s = +s; + this.l = +l; + this.opacity = +opacity; +} + +define(Cubehelix, cubehelix, extend$1(Color, { + brighter: function(k) { + k = k == null ? brighter : Math.pow(brighter, k); + return new Cubehelix(this.h, this.s, this.l * k, this.opacity); + }, + darker: function(k) { + k = k == null ? darker : Math.pow(darker, k); + return new Cubehelix(this.h, this.s, this.l * k, this.opacity); + }, + rgb: function() { + var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad, + l = +this.l, + a = isNaN(this.s) ? 0 : this.s * l * (1 - l), + cosh = Math.cos(h), + sinh = Math.sin(h); + return new Rgb( + 255 * (l + a * (A * cosh + B * sinh)), + 255 * (l + a * (C * cosh + D * sinh)), + 255 * (l + a * (E * cosh)), + this.opacity + ); + } +})); + +function basis(t1, v0, v1, v2, v3) { + var t2 = t1 * t1, t3 = t2 * t1; + return ((1 - 3 * t1 + 3 * t2 - t3) * v0 + + (4 - 6 * t2 + 3 * t3) * v1 + + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2 + + t3 * v3) / 6; +} + +function basis$1(values) { + var n = values.length - 1; + return function(t) { + var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n), + v1 = values[i], + v2 = values[i + 1], + v0 = i > 0 ? values[i - 1] : 2 * v1 - v2, + v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1; + return basis((t - i / n) * n, v0, v1, v2, v3); + }; +} + +function basisClosed(values) { + var n = values.length; + return function(t) { + var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n), + v0 = values[(i + n - 1) % n], + v1 = values[i % n], + v2 = values[(i + 1) % n], + v3 = values[(i + 2) % n]; + return basis((t - i / n) * n, v0, v1, v2, v3); + }; +} + +function constant$3(x) { + return function() { + return x; + }; +} + +function linear(a, d) { + return function(t) { + return a + t * d; + }; +} + +function exponential(a, b, y) { + return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) { + return Math.pow(a + t * b, y); + }; +} + +function hue(a, b) { + var d = b - a; + return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant$3(isNaN(a) ? b : a); +} + +function gamma(y) { + return (y = +y) === 1 ? nogamma : function(a, b) { + return b - a ? exponential(a, b, y) : constant$3(isNaN(a) ? b : a); + }; +} + +function nogamma(a, b) { + var d = b - a; + return d ? linear(a, d) : constant$3(isNaN(a) ? b : a); +} + +var rgb$1 = (function rgbGamma(y) { + var color = gamma(y); + + function rgb$1(start, end) { + var r = color((start = rgb(start)).r, (end = rgb(end)).r), + g = color(start.g, end.g), + b = color(start.b, end.b), + opacity = nogamma(start.opacity, end.opacity); + return function(t) { + start.r = r(t); + start.g = g(t); + start.b = b(t); + start.opacity = opacity(t); + return start + ""; + }; + } + + rgb$1.gamma = rgbGamma; + + return rgb$1; +})(1); + +function rgbSpline(spline) { + return function(colors) { + var n = colors.length, + r = new Array(n), + g = new Array(n), + b = new Array(n), + i, color; + for (i = 0; i < n; ++i) { + color = rgb(colors[i]); + r[i] = color.r || 0; + g[i] = color.g || 0; + b[i] = color.b || 0; + } + r = spline(r); + g = spline(g); + b = spline(b); + color.opacity = 1; + return function(t) { + color.r = r(t); + color.g = g(t); + color.b = b(t); + return color + ""; + }; + }; +} + +var rgbBasis = rgbSpline(basis$1); +var rgbBasisClosed = rgbSpline(basisClosed); + +function array$1(a, b) { + var nb = b ? b.length : 0, + na = a ? Math.min(nb, a.length) : 0, + x = new Array(na), + c = new Array(nb), + i; + + for (i = 0; i < na; ++i) x[i] = interpolate(a[i], b[i]); + for (; i < nb; ++i) c[i] = b[i]; + + return function(t) { + for (i = 0; i < na; ++i) c[i] = x[i](t); + return c; + }; +} + +function date(a, b) { + var d = new Date; + return a = +a, b -= a, function(t) { + return d.setTime(a + b * t), d; + }; +} + +function interpolateNumber(a, b) { + return a = +a, b -= a, function(t) { + return a + b * t; + }; +} + +function object$2(a, b) { + var i = {}, + c = {}, + k; + + if (a === null || typeof a !== "object") a = {}; + if (b === null || typeof b !== "object") b = {}; + + for (k in b) { + if (k in a) { + i[k] = interpolate(a[k], b[k]); + } else { + c[k] = b[k]; + } + } + + return function(t) { + for (k in i) c[k] = i[k](t); + return c; + }; +} + +var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, + reB = new RegExp(reA.source, "g"); + +function zero$1(b) { + return function() { + return b; + }; +} + +function one$1(b) { + return function(t) { + return b(t) + ""; + }; +} + +function string(a, b) { + var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b + am, // current match in a + bm, // current match in b + bs, // string preceding current number in b, if any + i = -1, // index in s + s = [], // string constants and placeholders + q = []; // number interpolators + + // Coerce inputs to strings. + a = a + "", b = b + ""; + + // Interpolate pairs of numbers in a & b. + while ((am = reA.exec(a)) + && (bm = reB.exec(b))) { + if ((bs = bm.index) > bi) { // a string precedes the next number in b + bs = b.slice(bi, bs); + if (s[i]) s[i] += bs; // coalesce with previous string + else s[++i] = bs; + } + if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match + if (s[i]) s[i] += bm; // coalesce with previous string + else s[++i] = bm; + } else { // interpolate non-matching numbers + s[++i] = null; + q.push({i: i, x: interpolateNumber(am, bm)}); + } + bi = reB.lastIndex; + } + + // Add remains of b. + if (bi < b.length) { + bs = b.slice(bi); + if (s[i]) s[i] += bs; // coalesce with previous string + else s[++i] = bs; + } + + // Special optimization for only a single match. + // Otherwise, interpolate each of the numbers and rejoin the string. + return s.length < 2 ? (q[0] + ? one$1(q[0].x) + : zero$1(b)) + : (b = q.length, function(t) { + for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t); + return s.join(""); + }); +} + +function interpolate(a, b) { + var t = typeof b, c; + return b == null || t === "boolean" ? constant$3(b) + : (t === "number" ? interpolateNumber + : t === "string" ? ((c = color$1(b)) ? (b = c, rgb$1) : string) + : b instanceof color$1 ? rgb$1 + : b instanceof Date ? date + : Array.isArray(b) ? array$1 + : typeof b.valueOf !== "function" && typeof b.toString !== "function" || isNaN(b) ? object$2 + : interpolateNumber)(a, b); +} + +function discrete(range) { + var n = range.length; + return function(t) { + return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))]; + }; +} + +function hue$1(a, b) { + var i = hue(+a, +b); + return function(t) { + var x = i(t); + return x - 360 * Math.floor(x / 360); + }; +} + +function interpolateRound(a, b) { + return a = +a, b -= a, function(t) { + return Math.round(a + b * t); + }; +} + +var degrees = 180 / Math.PI; + +var identity$2 = { + translateX: 0, + translateY: 0, + rotate: 0, + skewX: 0, + scaleX: 1, + scaleY: 1 +}; + +function decompose(a, b, c, d, e, f) { + var scaleX, scaleY, skewX; + if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX; + if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX; + if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY; + if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX; + return { + translateX: e, + translateY: f, + rotate: Math.atan2(b, a) * degrees, + skewX: Math.atan(skewX) * degrees, + scaleX: scaleX, + scaleY: scaleY + }; +} + +var cssNode, + cssRoot, + cssView, + svgNode; + +function parseCss(value) { + if (value === "none") return identity$2; + if (!cssNode) cssNode = document.createElement("DIV"), cssRoot = document.documentElement, cssView = document.defaultView; + cssNode.style.transform = value; + value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue("transform"); + cssRoot.removeChild(cssNode); + value = value.slice(7, -1).split(","); + return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]); +} + +function parseSvg(value) { + if (value == null) return identity$2; + if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g"); + svgNode.setAttribute("transform", value); + if (!(value = svgNode.transform.baseVal.consolidate())) return identity$2; + value = value.matrix; + return decompose(value.a, value.b, value.c, value.d, value.e, value.f); +} + +function interpolateTransform(parse, pxComma, pxParen, degParen) { + + function pop(s) { + return s.length ? s.pop() + " " : ""; + } + + function translate(xa, ya, xb, yb, s, q) { + if (xa !== xb || ya !== yb) { + var i = s.push("translate(", null, pxComma, null, pxParen); + q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)}); + } else if (xb || yb) { + s.push("translate(" + xb + pxComma + yb + pxParen); + } + } + + function rotate(a, b, s, q) { + if (a !== b) { + if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path + q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: interpolateNumber(a, b)}); + } else if (b) { + s.push(pop(s) + "rotate(" + b + degParen); + } + } + + function skewX(a, b, s, q) { + if (a !== b) { + q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: interpolateNumber(a, b)}); + } else if (b) { + s.push(pop(s) + "skewX(" + b + degParen); + } + } + + function scale(xa, ya, xb, yb, s, q) { + if (xa !== xb || ya !== yb) { + var i = s.push(pop(s) + "scale(", null, ",", null, ")"); + q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)}); + } else if (xb !== 1 || yb !== 1) { + s.push(pop(s) + "scale(" + xb + "," + yb + ")"); + } + } + + return function(a, b) { + var s = [], // string constants and placeholders + q = []; // number interpolators + a = parse(a), b = parse(b); + translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q); + rotate(a.rotate, b.rotate, s, q); + skewX(a.skewX, b.skewX, s, q); + scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q); + a = b = null; // gc + return function(t) { + var i = -1, n = q.length, o; + while (++i < n) s[(o = q[i]).i] = o.x(t); + return s.join(""); + }; + }; +} + +var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)"); +var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")"); + +var rho = Math.SQRT2, + rho2 = 2, + rho4 = 4, + epsilon2 = 1e-12; + +function cosh(x) { + return ((x = Math.exp(x)) + 1 / x) / 2; +} + +function sinh(x) { + return ((x = Math.exp(x)) - 1 / x) / 2; +} + +function tanh(x) { + return ((x = Math.exp(2 * x)) - 1) / (x + 1); +} + +// p0 = [ux0, uy0, w0] +// p1 = [ux1, uy1, w1] +function zoom$1(p0, p1) { + var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], + ux1 = p1[0], uy1 = p1[1], w1 = p1[2], + dx = ux1 - ux0, + dy = uy1 - uy0, + d2 = dx * dx + dy * dy, + i, + S; + + // Special case for u0 ≅ u1. + if (d2 < epsilon2) { + S = Math.log(w1 / w0) / rho; + i = function(t) { + return [ + ux0 + t * dx, + uy0 + t * dy, + w0 * Math.exp(rho * t * S) + ]; + }; + } + + // General case. + else { + var d1 = Math.sqrt(d2), + b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1), + b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1), + r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), + r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1); + S = (r1 - r0) / rho; + i = function(t) { + var s = t * S, + coshr0 = cosh(r0), + u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0)); + return [ + ux0 + u * dx, + uy0 + u * dy, + w0 * coshr0 / cosh(rho * s + r0) + ]; + }; + } + + i.duration = S * 1000; + + return i; +} + +function hsl$1(hue) { + return function(start, end) { + var h = hue((start = hsl(start)).h, (end = hsl(end)).h), + s = nogamma(start.s, end.s), + l = nogamma(start.l, end.l), + opacity = nogamma(start.opacity, end.opacity); + return function(t) { + start.h = h(t); + start.s = s(t); + start.l = l(t); + start.opacity = opacity(t); + return start + ""; + }; + } +} + +var hsl$2 = hsl$1(hue); +var hslLong = hsl$1(nogamma); + +function lab$1(start, end) { + var l = nogamma((start = lab(start)).l, (end = lab(end)).l), + a = nogamma(start.a, end.a), + b = nogamma(start.b, end.b), + opacity = nogamma(start.opacity, end.opacity); + return function(t) { + start.l = l(t); + start.a = a(t); + start.b = b(t); + start.opacity = opacity(t); + return start + ""; + }; +} + +function hcl$1(hue) { + return function(start, end) { + var h = hue((start = hcl(start)).h, (end = hcl(end)).h), + c = nogamma(start.c, end.c), + l = nogamma(start.l, end.l), + opacity = nogamma(start.opacity, end.opacity); + return function(t) { + start.h = h(t); + start.c = c(t); + start.l = l(t); + start.opacity = opacity(t); + return start + ""; + }; + } +} + +var hcl$2 = hcl$1(hue); +var hclLong = hcl$1(nogamma); + +function cubehelix$1(hue) { + return (function cubehelixGamma(y) { + y = +y; + + function cubehelix$1(start, end) { + var h = hue((start = cubehelix(start)).h, (end = cubehelix(end)).h), + s = nogamma(start.s, end.s), + l = nogamma(start.l, end.l), + opacity = nogamma(start.opacity, end.opacity); + return function(t) { + start.h = h(t); + start.s = s(t); + start.l = l(Math.pow(t, y)); + start.opacity = opacity(t); + return start + ""; + }; + } + + cubehelix$1.gamma = cubehelixGamma; + + return cubehelix$1; + })(1); +} + +var cubehelix$2 = cubehelix$1(hue); +var cubehelixLong = cubehelix$1(nogamma); + +function piecewise(interpolate, values) { + var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n); + while (i < n) I[i] = interpolate(v, v = values[++i]); + return function(t) { + var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n))); + return I[i](t - i); + }; +} + +function quantize(interpolator, n) { + var samples = new Array(n); + for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1)); + return samples; +} + + + +var $$1 = /*#__PURE__*/Object.freeze({ + interpolate: interpolate, + interpolateArray: array$1, + interpolateBasis: basis$1, + interpolateBasisClosed: basisClosed, + interpolateDate: date, + interpolateDiscrete: discrete, + interpolateHue: hue$1, + interpolateNumber: interpolateNumber, + interpolateObject: object$2, + interpolateRound: interpolateRound, + interpolateString: string, + interpolateTransformCss: interpolateTransformCss, + interpolateTransformSvg: interpolateTransformSvg, + interpolateZoom: zoom$1, + interpolateRgb: rgb$1, + interpolateRgbBasis: rgbBasis, + interpolateRgbBasisClosed: rgbBasisClosed, + interpolateHsl: hsl$2, + interpolateHslLong: hslLong, + interpolateLab: lab$1, + interpolateHcl: hcl$2, + interpolateHclLong: hclLong, + interpolateCubehelix: cubehelix$2, + interpolateCubehelixLong: cubehelixLong, + piecewise: piecewise, + quantize: quantize +}); + +function constant$4(x) { + return function() { + return x; + }; +} + +function number$3(x) { + return +x; +} + +var unit = [0, 1]; + +function identity$3(x) { + return x; +} + +function normalize(a, b) { + return (b -= (a = +a)) + ? function(x) { return (x - a) / b; } + : constant$4(isNaN(b) ? NaN : 0.5); +} + +function clamper(domain) { + var a = domain[0], b = domain[domain.length - 1], t; + if (a > b) t = a, a = b, b = t; + return function(x) { return Math.max(a, Math.min(b, x)); }; +} + +// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1]. +// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b]. +function bimap(domain, range, interpolate) { + var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1]; + if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0); + else d0 = normalize(d0, d1), r0 = interpolate(r0, r1); + return function(x) { return r0(d0(x)); }; +} + +function polymap(domain, range, interpolate) { + var j = Math.min(domain.length, range.length) - 1, + d = new Array(j), + r = new Array(j), + i = -1; + + // Reverse descending domains. + if (domain[j] < domain[0]) { + domain = domain.slice().reverse(); + range = range.slice().reverse(); + } + + while (++i < j) { + d[i] = normalize(domain[i], domain[i + 1]); + r[i] = interpolate(range[i], range[i + 1]); + } + + return function(x) { + var i = bisectRight$1(domain, x, 1, j) - 1; + return r[i](d[i](x)); + }; +} + +function copy(source, target) { + return target + .domain(source.domain()) + .range(source.range()) + .interpolate(source.interpolate()) + .clamp(source.clamp()) + .unknown(source.unknown()); +} + +function transformer() { + var domain = unit, + range = unit, + interpolate$1 = interpolate, + transform, + untransform, + unknown, + clamp = identity$3, + piecewise, + output, + input; + + function rescale() { + piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap; + output = input = null; + return scale; + } + + function scale(x) { + return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate$1)))(transform(clamp(x))); + } + + scale.invert = function(y) { + return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y))); + }; + + scale.domain = function(_) { + return arguments.length ? (domain = Array.from(_, number$3), clamp === identity$3 || (clamp = clamper(domain)), rescale()) : domain.slice(); + }; + + scale.range = function(_) { + return arguments.length ? (range = Array.from(_), rescale()) : range.slice(); + }; + + scale.rangeRound = function(_) { + return range = Array.from(_), interpolate$1 = interpolateRound, rescale(); + }; + + scale.clamp = function(_) { + return arguments.length ? (clamp = _ ? clamper(domain) : identity$3, scale) : clamp !== identity$3; + }; + + scale.interpolate = function(_) { + return arguments.length ? (interpolate$1 = _, rescale()) : interpolate$1; + }; + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : unknown; + }; + + return function(t, u) { + transform = t, untransform = u; + return rescale(); + }; +} + +function continuous(transform, untransform) { + return transformer()(transform, untransform); +} + +// Computes the decimal coefficient and exponent of the specified number x with +// significant digits p, where x is positive and p is in [1, 21] or undefined. +// For example, formatDecimal(1.23) returns ["123", 0]. +function formatDecimal(x, p) { + if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity + var i, coefficient = x.slice(0, i); + + // The string returned by toExponential either has the form \d\.\d+e[-+]\d+ + // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3). + return [ + coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient, + +x.slice(i + 1) + ]; +} + +function exponent(x) { + return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN; +} + +function formatGroup(grouping, thousands) { + return function(value, width) { + var i = value.length, + t = [], + j = 0, + g = grouping[0], + length = 0; + + while (i > 0 && g > 0) { + if (length + g + 1 > width) g = Math.max(1, width - length); + t.push(value.substring(i -= g, i + g)); + if ((length += g + 1) > width) break; + g = grouping[j = (j + 1) % grouping.length]; + } + + return t.reverse().join(thousands); + }; +} + +function formatNumerals(numerals) { + return function(value) { + return value.replace(/[0-9]/g, function(i) { + return numerals[+i]; + }); + }; +} + +// [[fill]align][sign][symbol][0][width][,][.precision][~][type] +var re = /^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i; + +function formatSpecifier(specifier) { + return new FormatSpecifier(specifier); +} + +formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof + +function FormatSpecifier(specifier) { + if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier); + var match; + this.fill = match[1] || " "; + this.align = match[2] || ">"; + this.sign = match[3] || "-"; + this.symbol = match[4] || ""; + this.zero = !!match[5]; + this.width = match[6] && +match[6]; + this.comma = !!match[7]; + this.precision = match[8] && +match[8].slice(1); + this.trim = !!match[9]; + this.type = match[10] || ""; +} + +FormatSpecifier.prototype.toString = function() { + return this.fill + + this.align + + this.sign + + this.symbol + + (this.zero ? "0" : "") + + (this.width == null ? "" : Math.max(1, this.width | 0)) + + (this.comma ? "," : "") + + (this.precision == null ? "" : "." + Math.max(0, this.precision | 0)) + + (this.trim ? "~" : "") + + this.type; +}; + +// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k. +function formatTrim(s) { + out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) { + switch (s[i]) { + case ".": i0 = i1 = i; break; + case "0": if (i0 === 0) i0 = i; i1 = i; break; + default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break; + } + } + return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s; +} + +var prefixExponent; + +function formatPrefixAuto(x, p) { + var d = formatDecimal(x, p); + if (!d) return x + ""; + var coefficient = d[0], + exponent = d[1], + i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1, + n = coefficient.length; + return i === n ? coefficient + : i > n ? coefficient + new Array(i - n + 1).join("0") + : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i) + : "0." + new Array(1 - i).join("0") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y! +} + +function formatRounded(x, p) { + var d = formatDecimal(x, p); + if (!d) return x + ""; + var coefficient = d[0], + exponent = d[1]; + return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient + : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1) + : coefficient + new Array(exponent - coefficient.length + 2).join("0"); +} + +var formatTypes = { + "%": function(x, p) { return (x * 100).toFixed(p); }, + "b": function(x) { return Math.round(x).toString(2); }, + "c": function(x) { return x + ""; }, + "d": function(x) { return Math.round(x).toString(10); }, + "e": function(x, p) { return x.toExponential(p); }, + "f": function(x, p) { return x.toFixed(p); }, + "g": function(x, p) { return x.toPrecision(p); }, + "o": function(x) { return Math.round(x).toString(8); }, + "p": function(x, p) { return formatRounded(x * 100, p); }, + "r": formatRounded, + "s": formatPrefixAuto, + "X": function(x) { return Math.round(x).toString(16).toUpperCase(); }, + "x": function(x) { return Math.round(x).toString(16); } +}; + +function identity$4(x) { + return x; +} + +var prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"]; + +function formatLocale$1(locale) { + var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity$4, + currency = locale.currency, + decimal = locale.decimal, + numerals = locale.numerals ? formatNumerals(locale.numerals) : identity$4, + percent = locale.percent || "%"; + + function newFormat(specifier) { + specifier = formatSpecifier(specifier); + + var fill = specifier.fill, + align = specifier.align, + sign = specifier.sign, + symbol = specifier.symbol, + zero = specifier.zero, + width = specifier.width, + comma = specifier.comma, + precision = specifier.precision, + trim = specifier.trim, + type = specifier.type; + + // The "n" type is an alias for ",g". + if (type === "n") comma = true, type = "g"; + + // The "" type, and any invalid type, is an alias for ".12~g". + else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = "g"; + + // If zero fill is specified, padding goes after sign and before digits. + if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "="; + + // Compute the prefix and suffix. + // For SI-prefix, the suffix is lazily computed. + var prefix = symbol === "$" ? currency[0] : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "", + suffix = symbol === "$" ? currency[1] : /[%p]/.test(type) ? percent : ""; + + // What format function should we use? + // Is this an integer type? + // Can this type generate exponential notation? + var formatType = formatTypes[type], + maybeSuffix = /[defgprs%]/.test(type); + + // Set the default precision if not specified, + // or clamp the specified precision to the supported range. + // For significant precision, it must be in [1, 21]. + // For fixed precision, it must be in [0, 20]. + precision = precision == null ? 6 + : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision)) + : Math.max(0, Math.min(20, precision)); + + function format(value) { + var valuePrefix = prefix, + valueSuffix = suffix, + i, n, c; + + if (type === "c") { + valueSuffix = formatType(value) + valueSuffix; + value = ""; + } else { + value = +value; + + // Perform the initial formatting. + var valueNegative = value < 0; + value = formatType(Math.abs(value), precision); + + // Trim insignificant zeros. + if (trim) value = formatTrim(value); + + // If a negative value rounds to zero during formatting, treat as positive. + if (valueNegative && +value === 0) valueNegative = false; + + // Compute the prefix and suffix. + valuePrefix = (valueNegative ? (sign === "(" ? sign : "-") : sign === "-" || sign === "(" ? "" : sign) + valuePrefix; + valueSuffix = (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : ""); + + // Break the formatted value into the integer “value” part that can be + // grouped, and fractional or exponential “suffix” part that is not. + if (maybeSuffix) { + i = -1, n = value.length; + while (++i < n) { + if (c = value.charCodeAt(i), 48 > c || c > 57) { + valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix; + value = value.slice(0, i); + break; + } + } + } + } + + // If the fill character is not "0", grouping is applied before padding. + if (comma && !zero) value = group(value, Infinity); + + // Compute the padding. + var length = valuePrefix.length + value.length + valueSuffix.length, + padding = length < width ? new Array(width - length + 1).join(fill) : ""; + + // If the fill character is "0", grouping is applied after padding. + if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = ""; + + // Reconstruct the final output based on the desired alignment. + switch (align) { + case "<": value = valuePrefix + value + valueSuffix + padding; break; + case "=": value = valuePrefix + padding + value + valueSuffix; break; + case "^": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break; + default: value = padding + valuePrefix + value + valueSuffix; break; + } + + return numerals(value); + } + + format.toString = function() { + return specifier + ""; + }; + + return format; + } + + function formatPrefix(specifier, value) { + var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)), + e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3, + k = Math.pow(10, -e), + prefix = prefixes[8 + e / 3]; + return function(value) { + return f(k * value) + prefix; + }; + } + + return { + format: newFormat, + formatPrefix: formatPrefix + }; +} + +var locale$1; +var format$1; +var formatPrefix; + +defaultLocale$1({ + decimal: ".", + thousands: ",", + grouping: [3], + currency: ["$", ""] +}); + +function defaultLocale$1(definition) { + locale$1 = formatLocale$1(definition); + format$1 = locale$1.format; + formatPrefix = locale$1.formatPrefix; + return locale$1; +} + +function precisionFixed(step) { + return Math.max(0, -exponent(Math.abs(step))); +} + +function precisionPrefix(step, value) { + return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step))); +} + +function precisionRound(step, max) { + step = Math.abs(step), max = Math.abs(max) - step; + return Math.max(0, exponent(max) - exponent(step)) + 1; +} + +function spanFormat(start, stop, count, specifier) { + var step = tickStep(start, stop, count), + precision; + specifier = formatSpecifier(specifier == null ? ",f" : specifier); + switch (specifier.type) { + case "s": { + var value = Math.max(Math.abs(start), Math.abs(stop)); + if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision; + return formatPrefix(specifier, value); + } + case "": + case "e": + case "g": + case "p": + case "r": { + if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e"); + break; + } + case "f": + case "%": { + if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === "%") * 2; + break; + } + } + return format$1(specifier); +} + +function linearish(scale) { + var domain = scale.domain; + + scale.ticks = function(count) { + var d = domain(); + return ticks(d[0], d[d.length - 1], count == null ? 10 : count); + }; + + scale.tickFormat = function(count, specifier) { + var d = domain(); + return spanFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier); + }; + + scale.nice = function(count) { + if (count == null) count = 10; + + var d = domain(), + i0 = 0, + i1 = d.length - 1, + start = d[i0], + stop = d[i1], + step; + + if (stop < start) { + step = start, start = stop, stop = step; + step = i0, i0 = i1, i1 = step; + } + + step = tickIncrement(start, stop, count); + + if (step > 0) { + start = Math.floor(start / step) * step; + stop = Math.ceil(stop / step) * step; + step = tickIncrement(start, stop, count); + } else if (step < 0) { + start = Math.ceil(start * step) / step; + stop = Math.floor(stop * step) / step; + step = tickIncrement(start, stop, count); + } + + if (step > 0) { + d[i0] = Math.floor(start / step) * step; + d[i1] = Math.ceil(stop / step) * step; + domain(d); + } else if (step < 0) { + d[i0] = Math.ceil(start * step) / step; + d[i1] = Math.floor(stop * step) / step; + domain(d); + } + + return scale; + }; + + return scale; +} + +function linear$1() { + var scale = continuous(identity$3, identity$3); + + scale.copy = function() { + return copy(scale, linear$1()); + }; + + initRange.apply(scale, arguments); + + return linearish(scale); +} + +function identity$5(domain) { + var unknown; + + function scale(x) { + return isNaN(x = +x) ? unknown : x; + } + + scale.invert = scale; + + scale.domain = scale.range = function(_) { + return arguments.length ? (domain = Array.from(_, number$3), scale) : domain.slice(); + }; + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : unknown; + }; + + scale.copy = function() { + return identity$5(domain).unknown(unknown); + }; + + domain = arguments.length ? Array.from(domain, number$3) : [0, 1]; + + return linearish(scale); +} + +function nice(domain, interval) { + domain = domain.slice(); + + var i0 = 0, + i1 = domain.length - 1, + x0 = domain[i0], + x1 = domain[i1], + t; + + if (x1 < x0) { + t = i0, i0 = i1, i1 = t; + t = x0, x0 = x1, x1 = t; + } + + domain[i0] = interval.floor(x0); + domain[i1] = interval.ceil(x1); + return domain; +} + +function transformLog(x) { + return Math.log(x); +} + +function transformExp(x) { + return Math.exp(x); +} + +function transformLogn(x) { + return -Math.log(-x); +} + +function transformExpn(x) { + return -Math.exp(-x); +} + +function pow10(x) { + return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x; +} + +function powp(base) { + return base === 10 ? pow10 + : base === Math.E ? Math.exp + : function(x) { return Math.pow(base, x); }; +} + +function logp(base) { + return base === Math.E ? Math.log + : base === 10 && Math.log10 + || base === 2 && Math.log2 + || (base = Math.log(base), function(x) { return Math.log(x) / base; }); +} + +function reflect(f) { + return function(x) { + return -f(-x); + }; +} + +function loggish(transform) { + var scale = transform(transformLog, transformExp), + domain = scale.domain, + base = 10, + logs, + pows; + + function rescale() { + logs = logp(base), pows = powp(base); + if (domain()[0] < 0) { + logs = reflect(logs), pows = reflect(pows); + transform(transformLogn, transformExpn); + } else { + transform(transformLog, transformExp); + } + return scale; + } + + scale.base = function(_) { + return arguments.length ? (base = +_, rescale()) : base; + }; + + scale.domain = function(_) { + return arguments.length ? (domain(_), rescale()) : domain(); + }; + + scale.ticks = function(count) { + var d = domain(), + u = d[0], + v = d[d.length - 1], + r; + + if (r = v < u) i = u, u = v, v = i; + + var i = logs(u), + j = logs(v), + p, + k, + t, + n = count == null ? 10 : +count, + z = []; + + if (!(base % 1) && j - i < n) { + i = Math.round(i) - 1, j = Math.round(j) + 1; + if (u > 0) for (; i < j; ++i) { + for (k = 1, p = pows(i); k < base; ++k) { + t = p * k; + if (t < u) continue; + if (t > v) break; + z.push(t); + } + } else for (; i < j; ++i) { + for (k = base - 1, p = pows(i); k >= 1; --k) { + t = p * k; + if (t < u) continue; + if (t > v) break; + z.push(t); + } + } + } else { + z = ticks(i, j, Math.min(j - i, n)).map(pows); + } + + return r ? z.reverse() : z; + }; + + scale.tickFormat = function(count, specifier) { + if (specifier == null) specifier = base === 10 ? ".0e" : ","; + if (typeof specifier !== "function") specifier = format$1(specifier); + if (count === Infinity) return specifier; + if (count == null) count = 10; + var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate? + return function(d) { + var i = d / pows(Math.round(logs(d))); + if (i * base < base - 0.5) i *= base; + return i <= k ? specifier(d) : ""; + }; + }; + + scale.nice = function() { + return domain(nice(domain(), { + floor: function(x) { return pows(Math.floor(logs(x))); }, + ceil: function(x) { return pows(Math.ceil(logs(x))); } + })); + }; + + return scale; +} + +function log$2() { + var scale = loggish(transformer()).domain([1, 10]); + + scale.copy = function() { + return copy(scale, log$2()).base(scale.base()); + }; + + initRange.apply(scale, arguments); + + return scale; +} + +function transformSymlog(c) { + return function(x) { + return Math.sign(x) * Math.log1p(Math.abs(x / c)); + }; +} + +function transformSymexp(c) { + return function(x) { + return Math.sign(x) * Math.expm1(Math.abs(x)) * c; + }; +} + +function symlogish(transform) { + var c = 1, scale = transform(transformSymlog(c), transformSymexp(c)); + + scale.constant = function(_) { + return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c; + }; + + return linearish(scale); +} + +function symlog$1() { + var scale = symlogish(transformer()); + + scale.copy = function() { + return copy(scale, symlog$1()).constant(scale.constant()); + }; + + return initRange.apply(scale, arguments); +} + +function transformPow(exponent) { + return function(x) { + return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent); + }; +} + +function transformSqrt(x) { + return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x); +} + +function transformSquare(x) { + return x < 0 ? -x * x : x * x; +} + +function powish(transform) { + var scale = transform(identity$3, identity$3), + exponent = 1; + + function rescale() { + return exponent === 1 ? transform(identity$3, identity$3) + : exponent === 0.5 ? transform(transformSqrt, transformSquare) + : transform(transformPow(exponent), transformPow(1 / exponent)); + } + + scale.exponent = function(_) { + return arguments.length ? (exponent = +_, rescale()) : exponent; + }; + + return linearish(scale); +} + +function pow$1() { + var scale = powish(transformer()); + + scale.copy = function() { + return copy(scale, pow$1()).exponent(scale.exponent()); + }; + + initRange.apply(scale, arguments); + + return scale; +} + +function sqrt$1() { + return pow$1.apply(null, arguments).exponent(0.5); +} + +function quantile$3() { + var domain = [], + range = [], + thresholds = [], + unknown; + + function rescale() { + var i = 0, n = Math.max(1, range.length); + thresholds = new Array(n - 1); + while (++i < n) thresholds[i - 1] = quantile$2(domain, i / n); + return scale; + } + + function scale(x) { + return isNaN(x = +x) ? unknown : range[bisectRight$1(thresholds, x)]; + } + + scale.invertExtent = function(y) { + var i = range.indexOf(y); + return i < 0 ? [NaN, NaN] : [ + i > 0 ? thresholds[i - 1] : domain[0], + i < thresholds.length ? thresholds[i] : domain[domain.length - 1] + ]; + }; + + scale.domain = function(_) { + if (!arguments.length) return domain.slice(); + domain = []; + for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d); + domain.sort(ascending$4); + return rescale(); + }; + + scale.range = function(_) { + return arguments.length ? (range = Array.from(_), rescale()) : range.slice(); + }; + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : unknown; + }; + + scale.quantiles = function() { + return thresholds.slice(); + }; + + scale.copy = function() { + return quantile$3() + .domain(domain) + .range(range) + .unknown(unknown); + }; + + return initRange.apply(scale, arguments); +} + +function quantize$1() { + var x0 = 0, + x1 = 1, + n = 1, + domain = [0.5], + range = [0, 1], + unknown; + + function scale(x) { + return x <= x ? range[bisectRight$1(domain, x, 0, n)] : unknown; + } + + function rescale() { + var i = -1; + domain = new Array(n); + while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1); + return scale; + } + + scale.domain = function(_) { + return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1]; + }; + + scale.range = function(_) { + return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice(); + }; + + scale.invertExtent = function(y) { + var i = range.indexOf(y); + return i < 0 ? [NaN, NaN] + : i < 1 ? [x0, domain[0]] + : i >= n ? [domain[n - 1], x1] + : [domain[i - 1], domain[i]]; + }; + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : scale; + }; + + scale.thresholds = function() { + return domain.slice(); + }; + + scale.copy = function() { + return quantize$1() + .domain([x0, x1]) + .range(range) + .unknown(unknown); + }; + + return initRange.apply(linearish(scale), arguments); +} + +function threshold() { + var domain = [0.5], + range = [0, 1], + unknown, + n = 1; + + function scale(x) { + return x <= x ? range[bisectRight$1(domain, x, 0, n)] : unknown; + } + + scale.domain = function(_) { + return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice(); + }; + + scale.range = function(_) { + return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice(); + }; + + scale.invertExtent = function(y) { + var i = range.indexOf(y); + return [domain[i - 1], domain[i]]; + }; + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : unknown; + }; + + scale.copy = function() { + return threshold() + .domain(domain) + .range(range) + .unknown(unknown); + }; + + return initRange.apply(scale, arguments); +} + +var durationSecond$1 = 1000, + durationMinute$1 = durationSecond$1 * 60, + durationHour$1 = durationMinute$1 * 60, + durationDay$1 = durationHour$1 * 24, + durationWeek$1 = durationDay$1 * 7, + durationMonth = durationDay$1 * 30, + durationYear = durationDay$1 * 365; + +function date$1(t) { + return new Date(t); +} + +function number$4(t) { + return t instanceof Date ? +t : +new Date(+t); +} + +function calendar(year, month, week, day, hour, minute, second, millisecond, format) { + var scale = continuous(identity$3, identity$3), + invert = scale.invert, + domain = scale.domain; + + var formatMillisecond = format(".%L"), + formatSecond = format(":%S"), + formatMinute = format("%I:%M"), + formatHour = format("%I %p"), + formatDay = format("%a %d"), + formatWeek = format("%b %d"), + formatMonth = format("%B"), + formatYear = format("%Y"); + + var tickIntervals = [ + [second, 1, durationSecond$1], + [second, 5, 5 * durationSecond$1], + [second, 15, 15 * durationSecond$1], + [second, 30, 30 * durationSecond$1], + [minute, 1, durationMinute$1], + [minute, 5, 5 * durationMinute$1], + [minute, 15, 15 * durationMinute$1], + [minute, 30, 30 * durationMinute$1], + [ hour, 1, durationHour$1 ], + [ hour, 3, 3 * durationHour$1 ], + [ hour, 6, 6 * durationHour$1 ], + [ hour, 12, 12 * durationHour$1 ], + [ day, 1, durationDay$1 ], + [ day, 2, 2 * durationDay$1 ], + [ week, 1, durationWeek$1 ], + [ month, 1, durationMonth ], + [ month, 3, 3 * durationMonth ], + [ year, 1, durationYear ] + ]; + + function tickFormat(date) { + return (second(date) < date ? formatMillisecond + : minute(date) < date ? formatSecond + : hour(date) < date ? formatMinute + : day(date) < date ? formatHour + : month(date) < date ? (week(date) < date ? formatDay : formatWeek) + : year(date) < date ? formatMonth + : formatYear)(date); + } + + function tickInterval(interval, start, stop, step) { + if (interval == null) interval = 10; + + // If a desired tick count is specified, pick a reasonable tick interval + // based on the extent of the domain and a rough estimate of tick size. + // Otherwise, assume interval is already a time interval and use it. + if (typeof interval === "number") { + var target = Math.abs(stop - start) / interval, + i = bisector$4(function(i) { return i[2]; }).right(tickIntervals, target); + if (i === tickIntervals.length) { + step = tickStep(start / durationYear, stop / durationYear, interval); + interval = year; + } else if (i) { + i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i]; + step = i[1]; + interval = i[0]; + } else { + step = Math.max(tickStep(start, stop, interval), 1); + interval = millisecond; + } + } + + return step == null ? interval : interval.every(step); + } + + scale.invert = function(y) { + return new Date(invert(y)); + }; + + scale.domain = function(_) { + return arguments.length ? domain(Array.from(_, number$4)) : domain().map(date$1); + }; + + scale.ticks = function(interval, step) { + var d = domain(), + t0 = d[0], + t1 = d[d.length - 1], + r = t1 < t0, + t; + if (r) t = t0, t0 = t1, t1 = t; + t = tickInterval(interval, t0, t1, step); + t = t ? t.range(t0, t1 + 1) : []; // inclusive stop + return r ? t.reverse() : t; + }; + + scale.tickFormat = function(count, specifier) { + return specifier == null ? tickFormat : format(specifier); + }; + + scale.nice = function(interval, step) { + var d = domain(); + return (interval = tickInterval(interval, d[0], d[d.length - 1], step)) + ? domain(nice(d, interval)) + : scale; + }; + + scale.copy = function() { + return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format)); + }; + + return scale; +} + +function time$1() { + return initRange.apply(calendar(year, month, sunday, day, hour, minute, second, millisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments); +} + +function utcTime() { + return initRange.apply(calendar(utcYear, utcMonth, utcSunday, utcDay, utcHour, utcMinute, second, millisecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments); +} + +function transformer$1() { + var x0 = 0, + x1 = 1, + t0, + t1, + k10, + transform, + interpolator = identity$3, + clamp = false, + unknown; + + function scale(x) { + return isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x)); + } + + scale.domain = function(_) { + return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1]; + }; + + scale.clamp = function(_) { + return arguments.length ? (clamp = !!_, scale) : clamp; + }; + + scale.interpolator = function(_) { + return arguments.length ? (interpolator = _, scale) : interpolator; + }; + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : unknown; + }; + + return function(t) { + transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0); + return scale; + }; +} + +function copy$1(source, target) { + return target + .domain(source.domain()) + .interpolator(source.interpolator()) + .clamp(source.clamp()) + .unknown(source.unknown()); +} + +function sequential() { + var scale = linearish(transformer$1()(identity$3)); + + scale.copy = function() { + return copy$1(scale, sequential()); + }; + + return initInterpolator.apply(scale, arguments); +} + +function sequentialLog() { + var scale = loggish(transformer$1()).domain([1, 10]); + + scale.copy = function() { + return copy$1(scale, sequentialLog()).base(scale.base()); + }; + + return initInterpolator.apply(scale, arguments); +} + +function sequentialSymlog() { + var scale = symlogish(transformer$1()); + + scale.copy = function() { + return copy$1(scale, sequentialSymlog()).constant(scale.constant()); + }; + + return initInterpolator.apply(scale, arguments); +} + +function sequentialPow() { + var scale = powish(transformer$1()); + + scale.copy = function() { + return copy$1(scale, sequentialPow()).exponent(scale.exponent()); + }; + + return initInterpolator.apply(scale, arguments); +} + +function sequentialSqrt() { + return sequentialPow.apply(null, arguments).exponent(0.5); +} + +function transformer$2() { + var x0 = 0, + x1 = 0.5, + x2 = 1, + t0, + t1, + t2, + k10, + k21, + interpolator = identity$3, + transform, + clamp = false, + unknown; + + function scale(x) { + return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (x < t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x)); + } + + scale.domain = function(_) { + return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), scale) : [x0, x1, x2]; + }; + + scale.clamp = function(_) { + return arguments.length ? (clamp = !!_, scale) : clamp; + }; + + scale.interpolator = function(_) { + return arguments.length ? (interpolator = _, scale) : interpolator; + }; + + scale.unknown = function(_) { + return arguments.length ? (unknown = _, scale) : unknown; + }; + + return function(t) { + transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1); + return scale; + }; +} + +function diverging() { + var scale = linearish(transformer$2()(identity$3)); + + scale.copy = function() { + return copy$1(scale, diverging()); + }; + + return initInterpolator.apply(scale, arguments); +} + +function divergingLog() { + var scale = loggish(transformer$2()).domain([0.1, 1, 10]); + + scale.copy = function() { + return copy$1(scale, divergingLog()).base(scale.base()); + }; + + return initInterpolator.apply(scale, arguments); +} + +function divergingSymlog() { + var scale = symlogish(transformer$2()); + + scale.copy = function() { + return copy$1(scale, divergingSymlog()).constant(scale.constant()); + }; + + return initInterpolator.apply(scale, arguments); +} + +function divergingPow() { + var scale = powish(transformer$2()); + + scale.copy = function() { + return copy$1(scale, divergingPow()).exponent(scale.exponent()); + }; + + return initInterpolator.apply(scale, arguments); +} + +function divergingSqrt() { + return divergingPow.apply(null, arguments).exponent(0.5); +} + +function band() { + var scale = ordinal().unknown(undefined), + domain = scale.domain, + ordinalRange = scale.range, + range = [0, 1], + step, + bandwidth, + round = false, + paddingInner = 0, + paddingOuter = 0, + align = 0.5; + + delete scale.unknown; + + function rescale() { + var n = domain().length, + reverse = range[1] < range[0], + start = range[reverse - 0], + stop = range[1 - reverse], + space = bandSpace(n, paddingInner, paddingOuter); + + step = (stop - start) / (space || 1); + if (round) { + step = Math.floor(step); + } + start += (stop - start - step * (n - paddingInner)) * align; + bandwidth = step * (1 - paddingInner); + if (round) { + start = Math.round(start); + bandwidth = Math.round(bandwidth); + } + var values = sequence(n).map(function(i) { return start + step * i; }); + return ordinalRange(reverse ? values.reverse() : values); + } + + scale.domain = function(_) { + if (arguments.length) { + domain(_); + return rescale(); + } else { + return domain(); + } + }; + + scale.range = function(_) { + if (arguments.length) { + range = [+_[0], +_[1]]; + return rescale(); + } else { + return range.slice(); + } + }; + + scale.rangeRound = function(_) { + range = [+_[0], +_[1]]; + round = true; + return rescale(); + }; + + scale.bandwidth = function() { + return bandwidth; + }; + + scale.step = function() { + return step; + }; + + scale.round = function(_) { + if (arguments.length) { + round = !!_; + return rescale(); + } else { + return round; + } + }; + + scale.padding = function(_) { + if (arguments.length) { + paddingOuter = Math.max(0, Math.min(1, _)); + paddingInner = paddingOuter; + return rescale(); + } else { + return paddingInner; + } + }; + + scale.paddingInner = function(_) { + if (arguments.length) { + paddingInner = Math.max(0, Math.min(1, _)); + return rescale(); + } else { + return paddingInner; + } + }; + + scale.paddingOuter = function(_) { + if (arguments.length) { + paddingOuter = Math.max(0, Math.min(1, _)); + return rescale(); + } else { + return paddingOuter; + } + }; + + scale.align = function(_) { + if (arguments.length) { + align = Math.max(0, Math.min(1, _)); + return rescale(); + } else { + return align; + } + }; + + scale.invertRange = function(_) { + // bail if range has null or undefined values + if (_[0] == null || _[1] == null) return; + + var lo = +_[0], + hi = +_[1], + reverse = range[1] < range[0], + values = reverse ? ordinalRange().reverse() : ordinalRange(), + n = values.length - 1, a, b, t; + + // bail if either range endpoint is invalid + if (lo !== lo || hi !== hi) return; + + // order range inputs, bail if outside of scale range + if (hi < lo) { + t = lo; + lo = hi; + hi = t; + } + if (hi < values[0] || lo > range[1-reverse]) return; + + // binary search to index into scale range + a = Math.max(0, bisectRight(values, lo) - 1); + b = lo===hi ? a : bisectRight(values, hi) - 1; + + // increment index a if lo is within padding gap + if (lo - values[a] > bandwidth + 1e-10) ++a; + + if (reverse) { + // map + swap + t = a; + a = n - b; + b = n - t; + } + return (a > b) ? undefined : domain().slice(a, b+1); + }; + + scale.invert = function(_) { + var value = scale.invertRange([_, _]); + return value ? value[0] : value; + }; + + scale.copy = function() { + return band() + .domain(domain()) + .range(range) + .round(round) + .paddingInner(paddingInner) + .paddingOuter(paddingOuter) + .align(align); + }; + + return rescale(); +} + +function pointish(scale) { + var copy = scale.copy; + + scale.padding = scale.paddingOuter; + delete scale.paddingInner; + + scale.copy = function() { + return pointish(copy()); + }; + + return scale; +} + +function point$5() { + return pointish(band().paddingInner(1)); +} + +var map = Array.prototype.map; + +function numbers$2(_) { + return map.call(_, function(x) { return +x; }); +} + +var slice = Array.prototype.slice; + +function scaleBinOrdinal() { + var domain = [], + range = []; + + function scale(x) { + return x == null || x !== x + ? undefined + : range[(bisectRight(domain, x) - 1) % range.length]; + } + + scale.domain = function(_) { + if (arguments.length) { + domain = numbers$2(_); + return scale; + } else { + return domain.slice(); + } + }; + + scale.range = function(_) { + if (arguments.length) { + range = slice.call(_); + return scale; + } else { + return range.slice(); + } + }; + + scale.tickFormat = function(count, specifier) { + return spanFormat(domain[0], peek(domain), count == null ? 10 : count, specifier); + }; + + scale.copy = function() { + return scaleBinOrdinal().domain(scale.domain()).range(scale.range()); + }; + + return scale; +} + +/** + * Augment scales with their type and needed inverse methods. + */ +function create(type, constructor) { + return function scale() { + var s = constructor(); + + if (!s.invertRange) { + s.invertRange = s.invert ? invertRange(s) + : s.invertExtent ? invertRangeExtent(s) + : undefined; + } + + s.type = type; + return s; + }; +} + +function scale$1(type, scale) { + if (arguments.length > 1) { + scales[type] = create(type, scale); + return this; + } else { + return scales.hasOwnProperty(type) ? scales[type] : undefined; + } +} + +var scales = { + // identity scale + [Identity]: identity$5, + + // continuous scales + [Linear$1]: linear$1, + [Log]: log$2, + [Pow]: pow$1, + [Sqrt]: sqrt$1, + [Symlog]: symlog$1, + [Time]: time$1, + [UTC]: utcTime, + + // sequential scales + [Sequential]: sequential, // backwards compat + [Sequential+'-'+Linear$1]: sequential, + [Sequential+'-'+Log]: sequentialLog, + [Sequential+'-'+Pow]: sequentialPow, + [Sequential+'-'+Sqrt]: sequentialSqrt, + [Sequential+'-'+Symlog]: sequentialSymlog, + + // diverging scales + [Diverging+'-'+Linear$1]: diverging, + [Diverging+'-'+Log]: divergingLog, + [Diverging+'-'+Pow]: divergingPow, + [Diverging+'-'+Sqrt]: divergingSqrt, + [Diverging+'-'+Symlog]: divergingSymlog, + + // discretizing scales + [Quantile]: quantile$3, + [Quantize]: quantize$1, + [Threshold]: threshold, + + // discrete scales + [BinOrdinal]: scaleBinOrdinal, + [Ordinal]: ordinal, + [Band]: band, + [Point]: point$5 +}; + +for (var key$1 in scales) { + scale$1(key$1, scales[key$1]); +} + +const scaleProps = ['clamp', 'base', 'constant', 'exponent']; + +function interpolateRange(interpolator, range) { + var start = range[0], + span = peek(range) - start; + return function(i) { return interpolator(start + i * span); }; +} + +function interpolateColors(colors, type, gamma) { + return piecewise(interpolate$1(type || 'rgb', gamma), colors); +} + +function quantizeInterpolator(interpolator, count) { + var samples = new Array(count), + n = count + 1; + for (var i = 0; i < count;) samples[i] = interpolator(++i / n); + return samples; +} + +function scaleFraction(scale, min, max) { + var delta = max - min, i, t, s; + + if (!delta || !isFinite(delta)) { + return constant(0.5); + } else { + i = (t = scale.type).indexOf('-'); + t = i < 0 ? t : t.slice(i + 1); + s = scale$1(t)().domain([min, max]).range([0, 1]); + scaleProps.forEach(m => scale[m] ? s[m](scale[m]()) : 0); + return s; + } +} + +function interpolate$1(type, gamma) { + var interp = $$1[method(type)]; + return (gamma != null && interp && interp.gamma) + ? interp.gamma(gamma) + : interp; +} + +function method(type) { + return 'interpolate' + type.toLowerCase() + .split('-') + .map(function(s) { return s[0].toUpperCase() + s.slice(1); }) + .join(''); +} + +const continuous$1 = { + blues: 'cfe1f2bed8eca8cee58fc1de74b2d75ba3cf4592c63181bd206fb2125ca40a4a90', + greens: 'd3eecdc0e6baabdda594d3917bc77d60ba6c46ab5e329a512089430e7735036429', + greys: 'e2e2e2d4d4d4c4c4c4b1b1b19d9d9d8888887575756262624d4d4d3535351e1e1e', + oranges: 'fdd8b3fdc998fdb87bfda55efc9244f87f2cf06b18e4580bd14904b93d029f3303', + purples: 'e2e1efd4d4e8c4c5e0b4b3d6a3a0cc928ec3827cb97566ae684ea25c3696501f8c', + reds: 'fdc9b4fcb49afc9e80fc8767fa7051f6573fec3f2fdc2a25c81b1db21218970b13', + + blueGreen: 'd5efedc1e8e0a7ddd18bd2be70c6a958ba9144ad77319c5d2089460e7736036429', + bluePurple: 'ccddecbad0e4a8c2dd9ab0d4919cc98d85be8b6db28a55a6873c99822287730f71', + greenBlue: 'd3eecec5e8c3b1e1bb9bd8bb82cec269c2ca51b2cd3c9fc7288abd1675b10b60a1', + orangeRed: 'fddcaffdcf9bfdc18afdad77fb9562f67d53ee6545e24932d32d1ebf130da70403', + purpleBlue: 'dbdaebc8cee4b1c3de97b7d87bacd15b9fc93a90c01e7fb70b70ab056199045281', + purpleBlueGreen: 'dbd8eac8cee4b0c3de93b7d872acd1549fc83892bb1c88a3097f8702736b016353', + purpleRed: 'dcc9e2d3b3d7ce9eccd186c0da6bb2e14da0e23189d91e6fc61159ab07498f023a', + redPurple: 'fccfccfcbec0faa9b8f98faff571a5ec539ddb3695c41b8aa908808d0179700174', + yellowGreen: 'e4f4acd1eca0b9e2949ed68880c97c62bb6e47aa5e3297502083440e723b036034', + yellowOrangeBrown: 'feeaa1fedd84fecc63feb746fca031f68921eb7215db5e0bc54c05ab3d038f3204', + yellowOrangeRed: 'fee087fed16ffebd59fea849fd903efc7335f9522bee3423de1b20ca0b22af0225', + + blueOrange: '134b852f78b35da2cb9dcae1d2e5eff2f0ebfce0bafbbf74e8932fc5690d994a07', + brownBlueGreen: '704108a0651ac79548e3c78af3e6c6eef1eac9e9e48ed1c74da79e187a72025147', + purpleGreen: '5b1667834792a67fb6c9aed3e6d6e8eff0efd9efd5aedda971bb75368e490e5e29', + purpleOrange: '4114696647968f83b7b9b4d6dadbebf3eeeafce0bafbbf74e8932fc5690d994a07', + redBlue: '8c0d25bf363adf745ef4ae91fbdbc9f2efeed2e5ef9dcae15da2cb2f78b3134b85', + redGrey: '8c0d25bf363adf745ef4ae91fcdccbfaf4f1e2e2e2c0c0c0969696646464343434', + yellowGreenBlue: 'eff9bddbf1b4bde5b594d5b969c5be45b4c22c9ec02182b82163aa23479c1c3185', + redYellowBlue: 'a50026d4322cf16e43fcac64fedd90faf8c1dcf1ecabd6e875abd04a74b4313695', + redYellowGreen: 'a50026d4322cf16e43fcac63fedd8df9f7aed7ee8ea4d86e64bc6122964f006837', + pinkYellowGreen: '8e0152c0267edd72adf0b3d6faddedf5f3efe1f2cab6de8780bb474f9125276419', + spectral: '9e0142d13c4bf0704afcac63fedd8dfbf8b0e0f3a1a9dda269bda94288b55e4fa2', + + viridis: '440154470e61481a6c482575472f7d443a834144873d4e8a39568c35608d31688e2d708e2a788e27818e23888e21918d1f988b1fa08822a8842ab07f35b77943bf7154c56866cc5d7ad1518fd744a5db36bcdf27d2e21be9e51afde725', + magma: '0000040404130b0924150e3720114b2c11603b0f704a107957157e651a80721f817f24828c29819a2e80a8327db6377ac43c75d1426fde4968e95462f1605df76f5cfa7f5efc8f65fe9f6dfeaf78febf84fece91fddea0fcedaffcfdbf', + inferno: '0000040403130c0826170c3b240c4f330a5f420a68500d6c5d126e6b176e781c6d86216b932667a12b62ae305cbb3755c73e4cd24644dd513ae65c30ed6925f3771af8850ffb9506fca50afcb519fac62df6d645f2e661f3f484fcffa4', + plasma: '0d088723069033059742039d5002a25d01a66a00a87801a88405a7900da49c179ea72198b12a90ba3488c33d80cb4779d35171da5a69e16462e76e5bed7953f2834cf68f44fa9a3dfca636fdb32ffec029fcce25f9dc24f5ea27f0f921', + + rainbow: '6e40aa883eb1a43db3bf3cafd83fa4ee4395fe4b83ff576eff6659ff7847ff8c38f3a130e2b72fcfcc36bee044aff05b8ff4576ff65b52f6673af27828ea8d1ddfa319d0b81cbecb23abd82f96e03d82e14c6edb5a5dd0664dbf6e40aa', + sinebow: 'ff4040fc582af47218e78d0bd5a703bfbf00a7d5038de70b72f41858fc2a40ff402afc5818f4720be78d03d5a700bfbf03a7d50b8de71872f42a58fc4040ff582afc7218f48d0be7a703d5bf00bfd503a7e70b8df41872fc2a58ff4040', + + browns: 'eedbbdecca96e9b97ae4a865dc9856d18954c7784cc0673fb85536ad44339f3632', + tealBlues: 'bce4d89dd3d181c3cb65b3c245a2b9368fae347da0306a932c5985', + teals: 'bbdfdfa2d4d58ac9c975bcbb61b0af4da5a43799982b8b8c1e7f7f127273006667', + warmGreys: 'dcd4d0cec5c1c0b8b4b3aaa7a59c9998908c8b827f7e7673726866665c5a59504e', + + goldGreen: 'f4d166d5ca60b6c35c98bb597cb25760a6564b9c533f8f4f33834a257740146c36', + goldOrange: 'f4d166f8be5cf8aa4cf5983bf3852aef701be2621fd65322c54923b142239e3a26', + goldRed: 'f4d166f6be59f9aa51fc964ef6834bee734ae56249db5247cf4244c43141b71d3e', + + lightGreyRed: 'efe9e6e1dad7d5cbc8c8bdb9bbaea9cd967ddc7b43e15f19df4011dc000b', + lightGreyTeal: 'e4eaead6dcddc8ced2b7c2c7a6b4bc64b0bf22a6c32295c11f85be1876bc', + lightMulti: 'e0f1f2c4e9d0b0de9fd0e181f6e072f6c053f3993ef77440ef4a3c', + lightOrange: 'f2e7daf7d5baf9c499fab184fa9c73f68967ef7860e8645bde515bd43d5b', + lightTealBlue: 'e3e9e0c0dccf9aceca7abfc859afc0389fb9328dad2f7ca0276b95255988', + + darkBlue: '3232322d46681a5c930074af008cbf05a7ce25c0dd38daed50f3faffffff', + darkGold: '3c3c3c584b37725e348c7631ae8b2bcfa424ecc31ef9de30fff184ffffff', + darkGreen: '3a3a3a215748006f4d048942489e4276b340a6c63dd2d836ffeb2cffffaa', + darkMulti: '3737371f5287197d8c29a86995ce3fffe800ffffff', + darkRed: '3434347036339e3c38cc4037e75d1eec8620eeab29f0ce32ffeb2c' +}; + +const discrete$1 = { + category10: '1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf', + category20: '1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5', + category20b: '393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6', + category20c: '3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9', + tableau10: '4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac', + tableau20: '4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5', + accent: '7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666', + dark2: '1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666', + paired: 'a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928', + pastel1: 'fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2', + pastel2: 'b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc', + set1: 'e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999', + set2: '66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3', + set3: '8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f' +}; + +function colors(palette) { + var n = palette.length / 6 | 0, c = new Array(n), i = 0; + while (i < n) c[i] = '#' + palette.slice(i * 6, ++i * 6); + return c; +} + +function apply(_, f) { + for (let k in _) scheme(k, f(_[k])); +} + +const schemes = {}; +apply(discrete$1, colors); +apply(continuous$1, _ => interpolateColors(colors(_))); + +function scheme(name, scheme) { + name = name && name.toLowerCase(); + if (arguments.length > 1) { + schemes[name] = scheme; + return this; + } else { + return schemes[name]; + } +} + +/** + * Determine the tick count or interval function. + * @param {Scale} scale - The scale for which to generate tick values. + * @param {*} count - The desired tick count or interval specifier. + * @param {number} minStep - The desired minimum step between tick values. + * @return {*} - The tick count or interval function. + */ +function tickCount(scale, count, minStep) { + var step; + + if (isNumber(count) && minStep != null) { + count = Math.min(count, ~~(span(scale.domain()) / minStep) || 1); + } + + if (isObject(count)) { + step = count.step; + count = count.interval; + } + + if (isString(count)) { + count = timeInterval(count, scale.type) + || error('Only time and utc scales accept interval strings.'); + if (step) count = count.every(step); + } + + return count; +} + +/** + * Filter a set of candidate tick values, ensuring that only tick values + * that lie within the scale range are included. + * @param {Scale} scale - The scale for which to generate tick values. + * @param {Array<*>} ticks - The candidate tick values. + * @param {*} count - The tick count or interval function. + * @return {Array<*>} - The filtered tick values. + */ +function validTicks(scale, ticks, count) { + var range = scale.range(), + lo = Math.floor(range[0]), + hi = Math.ceil(peek(range)); + + if (lo > hi) { + range = hi; + hi = lo; + lo = range; + } + + ticks = ticks.filter(function(v) { + v = scale(v); + return lo <= v && v <= hi; + }); + + if (count > 0 && ticks.length > 1) { + var endpoints = [ticks[0], peek(ticks)]; + while (ticks.length > count && ticks.length >= 3) { + ticks = ticks.filter(function(_, i) { return !(i % 2); }); + } + if (ticks.length < 3) { + ticks = endpoints; + } + } + + return ticks; +} + +/** + * Generate tick values for the given scale and approximate tick count or + * interval value. If the scale has a 'ticks' method, it will be used to + * generate the ticks, with the count argument passed as a parameter. If the + * scale lacks a 'ticks' method, the full scale domain will be returned. + * @param {Scale} scale - The scale for which to generate tick values. + * @param {*} [count] - The approximate number of desired ticks. + * @return {Array<*>} - The generated tick values. + */ +function tickValues(scale, count) { + return scale.bins ? validTicks(scale, binValues(scale.bins, count)) + : scale.ticks ? scale.ticks(count) + : scale.domain(); +} + +/** + * Generate tick values for an array of bin values. + * @param {Array<*>} bins - An array of bin boundaries. + * @param {Number} [count] - The approximate number of desired ticks. + * @return {Array<*>} - The generated tick values. + */ +function binValues(bins, count) { + var n = bins.length, + stride = ~~(n / (count || n)); + + return stride < 2 + ? bins.slice() + : bins.filter(function(x, i) { return !(i % stride); }); +} + +/** + * Generate a label format function for a scale. If the scale has a + * 'tickFormat' method, it will be used to generate the formatter, with the + * count and specifier arguments passed as parameters. If the scale lacks a + * 'tickFormat' method, the returned formatter performs simple string coercion. + * If the input scale is a logarithmic scale and the format specifier does not + * indicate a desired decimal precision, a special variable precision formatter + * that automatically trims trailing zeroes will be generated. + * @param {Scale} scale - The scale for which to generate the label formatter. + * @param {*} [count] - The approximate number of desired ticks. + * @param {string} [specifier] - The format specifier. Must be a legal d3 + * specifier string (see https://github.com/d3/d3-format#formatSpecifier). + * @return {function(*):string} - The generated label formatter. + */ +function tickFormat(scale, count, specifier, formatType) { + var format = scale.tickFormat ? scale.tickFormat(count, specifier) + : specifier && formatType === Time ? timeFormat(specifier) + : specifier ? format$1(specifier) + : String; + + if (isLogarithmic(scale.type)) { + var logfmt = variablePrecision(specifier); + format = scale.bins ? logfmt : filter$1(format, logfmt); + } + + return format; +} + +function filter$1(sourceFormat, targetFormat) { + return function(_) { + return sourceFormat(_) ? targetFormat(_) : ''; + }; +} + +function variablePrecision(specifier) { + var s = formatSpecifier(specifier || ','); + + if (s.precision == null) { + s.precision = 12; + switch (s.type) { + case '%': s.precision -= 2; break; + case 'e': s.precision -= 1; break; + } + return trimZeroes( + format$1(s), // number format + format$1('.1f')(1)[1] // decimal point character + ); + } else { + return format$1(s); + } +} + +function trimZeroes(format, decimalChar) { + return function(x) { + var str = format(x), + dec = str.indexOf(decimalChar), + idx, end; + + if (dec < 0) return str; + + idx = rightmostDigit(str, dec); + end = idx < str.length ? str.slice(idx) : ''; + while (--idx > dec) if (str[idx] !== '0') { ++idx; break; } + + return str.slice(0, idx) + end; + }; +} + +function rightmostDigit(str, dec) { + var i = str.lastIndexOf('e'), c; + if (i > 0) return i; + for (i=str.length; --i > dec;) { + c = str.charCodeAt(i); + if (c >= 48 && c <= 57) return i + 1; // is digit + } +} + +/** + * Generates axis ticks for visualizing a spatial scale. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {Scale} params.scale - The scale to generate ticks for. + * @param {*} [params.count=10] - The approximate number of ticks, or + * desired tick interval, to use. + * @param {Array<*>} [params.values] - The exact tick values to use. + * These must be legal domain values for the provided scale. + * If provided, the count argument is ignored. + * @param {function(*):string} [params.formatSpecifier] - A format specifier + * to use in conjunction with scale.tickFormat. Legal values are + * any valid d3 4.0 format specifier. + * @param {function(*):string} [params.format] - The format function to use. + * If provided, the formatSpecifier argument is ignored. + */ +function AxisTicks(params) { + Transform.call(this, null, params); +} + +var prototype$T = inherits(AxisTicks, Transform); + +prototype$T.transform = function(_, pulse) { + if (this.value && !_.modified()) { + return pulse.StopPropagation; + } + + var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS), + ticks = this.value, + scale = _.scale, + tally = _.count == null ? (_.values ? _.values.length : 10) : _.count, + count = tickCount(scale, tally, _.minstep), + format = _.format || tickFormat(scale, count, _.formatSpecifier, _.formatType), + values = _.values ? validTicks(scale, _.values, count) : tickValues(scale, count); + + if (ticks) out.rem = ticks; + + ticks = values.map(function(value, i) { + return ingest({ + index: i / (values.length - 1 || 1), + value: value, + label: format(value) + }); + }); + + if (_.extra && ticks.length) { + // add an extra tick pegged to the initial domain value + // this is used to generate axes with 'binned' domains + ticks.push(ingest({ + index: -1, + extra: {value: ticks[0].value}, + label: '' + })); + } + + out.source = ticks; + out.add = ticks; + this.value = ticks; + + return out; +}; + +/** + * Joins a set of data elements against a set of visual items. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {function(object): object} [params.item] - An item generator function. + * @param {function(object): *} [params.key] - The key field associating data and visual items. + */ +function DataJoin(params) { + Transform.call(this, null, params); +} + +var prototype$U = inherits(DataJoin, Transform); + +function defaultItemCreate() { + return ingest({}); +} + +function isExit(t) { + return t.exit; +} + +prototype$U.transform = function(_, pulse) { + var df = pulse.dataflow, + out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS), + item = _.item || defaultItemCreate, + key = _.key || tupleid, + map = this.value; + + // prevent transient (e.g., hover) requests from + // cascading across marks derived from marks + if (isArray(out.encode)) { + out.encode = null; + } + + if (map && (_.modified('key') || pulse.modified(key))) { + error('DataJoin does not support modified key function or fields.'); + } + + if (!map) { + pulse = pulse.addAll(); + this.value = map = fastmap().test(isExit); + map.lookup = function(t) { return map.get(key(t)); }; + } + + pulse.visit(pulse.ADD, function(t) { + var k = key(t), + x = map.get(k); + + if (x) { + if (x.exit) { + map.empty--; + out.add.push(x); + } else { + out.mod.push(x); + } + } else { + map.set(k, (x = item(t))); + out.add.push(x); + } + + x.datum = t; + x.exit = false; + }); + + pulse.visit(pulse.MOD, function(t) { + var k = key(t), + x = map.get(k); + + if (x) { + x.datum = t; + out.mod.push(x); + } + }); + + pulse.visit(pulse.REM, function(t) { + var k = key(t), + x = map.get(k); + + if (t === x.datum && !x.exit) { + out.rem.push(x); + x.exit = true; + ++map.empty; + } + }); + + if (pulse.changed(pulse.ADD_MOD)) out.modifies('datum'); + + if (_.clean && map.empty > df.cleanThreshold) df.runAfter(map.clean); + + return out; +}; + +/** + * Invokes encoding functions for visual items. + * @constructor + * @param {object} params - The parameters to the encoding functions. This + * parameter object will be passed through to all invoked encoding functions. + * @param {object} [params.mod=false] - Flag indicating if tuples in the input + * mod set that are unmodified by encoders should be included in the output. + * @param {object} param.encoders - The encoding functions + * @param {function(object, object): boolean} [param.encoders.update] - Update encoding set + * @param {function(object, object): boolean} [param.encoders.enter] - Enter encoding set + * @param {function(object, object): boolean} [param.encoders.exit] - Exit encoding set + */ +function Encode(params) { + Transform.call(this, null, params); +} + +var prototype$V = inherits(Encode, Transform); + +prototype$V.transform = function(_, pulse) { + var out = pulse.fork(pulse.ADD_REM), + fmod = _.mod || false, + encoders = _.encoders, + encode = pulse.encode; + + // if an array, the encode directive includes additional sets + // that must be defined in order for the primary set to be invoked + // e.g., only run the update set if the hover set is defined + if (isArray(encode)) { + if (out.changed() || encode.every(function(e) { return encoders[e]; })) { + encode = encode[0]; + out.encode = null; // consume targeted encode directive + } else { + return pulse.StopPropagation; + } + } + + // marshall encoder functions + var reenter = encode === 'enter', + update = encoders.update || falsy, + enter = encoders.enter || falsy, + exit = encoders.exit || falsy, + set = (encode && !reenter ? encoders[encode] : update) || falsy; + + if (pulse.changed(pulse.ADD)) { + pulse.visit(pulse.ADD, function(t) { enter(t, _); update(t, _); }); + out.modifies(enter.output); + out.modifies(update.output); + if (set !== falsy && set !== update) { + pulse.visit(pulse.ADD, function(t) { set(t, _); }); + out.modifies(set.output); + } + } + + if (pulse.changed(pulse.REM) && exit !== falsy) { + pulse.visit(pulse.REM, function(t) { exit(t, _); }); + out.modifies(exit.output); + } + + if (reenter || set !== falsy) { + var flag = pulse.MOD | (_.modified() ? pulse.REFLOW : 0); + if (reenter) { + pulse.visit(flag, function(t) { + var mod = enter(t, _) || fmod; + if (set(t, _) || mod) out.mod.push(t); + }); + if (out.mod.length) out.modifies(enter.output); + } else { + pulse.visit(flag, function(t) { + if (set(t, _) || fmod) out.mod.push(t); + }); + } + if (out.mod.length) out.modifies(set.output); + } + + return out.changed() ? out : pulse.StopPropagation; +}; + +var Symbols$1 = 'symbol'; +var Discrete = 'discrete'; +var Gradient$1 = 'gradient'; + +const symbols$1 = { + [Quantile]: 'quantiles', + [Quantize]: 'thresholds', + [Threshold]: 'domain' +}; + +const formats$1 = { + [Quantile]: 'quantiles', + [Quantize]: 'domain' +}; + +function labelValues(scale, count) { + return scale.bins ? binValues$1(scale.bins) + : symbols$1[scale.type] ? thresholdValues(scale[symbols$1[scale.type]]()) + : tickValues(scale, count); +} + +function thresholdFormat(scale, specifier) { + var _ = scale[formats$1[scale.type]](), + n = _.length, + d = n > 1 ? _[1] - _[0] : _[0], i; + + for (i=1; i} [params.values] - The exact tick values to use. + * These must be legal domain values for the provided scale. + * If provided, the count argument is ignored. + * @param {string} [params.formatSpecifier] - A format specifier + * to use in conjunction with scale.tickFormat. Legal values are + * any valid D3 format specifier string. + * @param {function(*):string} [params.format] - The format function to use. + * If provided, the formatSpecifier argument is ignored. + */ +function LegendEntries(params) { + Transform.call(this, [], params); +} + +var prototype$W = inherits(LegendEntries, Transform); + +prototype$W.transform = function(_, pulse) { + if (this.value != null && !_.modified()) { + return pulse.StopPropagation; + } + + var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS), + items = this.value, + type = _.type || Symbols$1, + scale = _.scale, + count = tickCount(scale, _.count == null ? 5 : _.count, _.minstep), + format = _.format || labelFormat(scale, count, type, _.formatSpecifier, _.formatType), + values = _.values || labelValues(scale, count, type), + domain, fraction, size, offset; + + if (items) out.rem = items; + + if (type === Symbols$1) { + if (isFunction(size = _.size)) { + // if first value maps to size zero, remove from list (vega#717) + if (!_.values && scale(values[0]) === 0) { + values = values.slice(1); + } + // compute size offset for legend entries + offset = values.reduce(function(max, value) { + return Math.max(max, size(value, _)); + }, 0); + } else { + size = constant(offset = size || 8); + } + + items = values.map(function(value, index) { + return ingest({ + index: index, + label: format(value, index, values), + value: value, + offset: offset, + size: size(value, _) + }); + }); + } + + else if (type === Gradient$1) { + domain = scale.domain(), + fraction = scaleFraction(scale, domain[0], peek(domain)); + + // if automatic label generation produces 2 or fewer values, + // use the domain end points instead (fixes vega/vega#1364) + if (values.length < 3 && !_.values && domain[0] !== peek(domain)) { + values = [domain[0], peek(domain)]; + } + + items = values.map(function(value, index) { + return ingest({ + index: index, + label: format(value, index, values), + value: value, + perc: fraction(value) + }); + }); + } + + else { + size = values.length - 1; + fraction = labelFraction(scale); + + items = values.map(function(value, index) { + return ingest({ + index: index, + label: format(value, index, values), + value: value, + perc: index ? fraction(value) : 0, + perc2: index === size ? 1 : fraction(values[index+1]) + }); + }); + } + + out.source = items; + out.add = items; + this.value = items; + + return out; +}; + +var Paths = fastmap({ + 'line': line$2, + 'line-radial': lineR, + 'arc': arc$2, + 'arc-radial': arcR, + 'curve': curve, + 'curve-radial': curveR, + 'orthogonal-horizontal': orthoX, + 'orthogonal-vertical': orthoY, + 'orthogonal-radial': orthoR, + 'diagonal-horizontal': diagonalX, + 'diagonal-vertical': diagonalY, + 'diagonal-radial': diagonalR +}); + +function sourceX(t) { return t.source.x; } +function sourceY(t) { return t.source.y; } +function targetX(t) { return t.target.x; } +function targetY(t) { return t.target.y; } + + /** + * Layout paths linking source and target elements. + * @constructor + * @param {object} params - The parameters for this operator. + */ +function LinkPath(params) { + Transform.call(this, {}, params); +} + +LinkPath.Definition = { + "type": "LinkPath", + "metadata": {"modifies": true}, + "params": [ + { "name": "sourceX", "type": "field", "default": "source.x" }, + { "name": "sourceY", "type": "field", "default": "source.y" }, + { "name": "targetX", "type": "field", "default": "target.x" }, + { "name": "targetY", "type": "field", "default": "target.y" }, + { "name": "orient", "type": "enum", "default": "vertical", + "values": ["horizontal", "vertical", "radial"] }, + { "name": "shape", "type": "enum", "default": "line", + "values": ["line", "arc", "curve", "diagonal", "orthogonal"] }, + { "name": "require", "type": "signal" }, + { "name": "as", "type": "string", "default": "path" } + ] +}; + +var prototype$X = inherits(LinkPath, Transform); + +prototype$X.transform = function(_, pulse) { + var sx = _.sourceX || sourceX, + sy = _.sourceY || sourceY, + tx = _.targetX || targetX, + ty = _.targetY || targetY, + as = _.as || 'path', + orient = _.orient || 'vertical', + shape = _.shape || 'line', + path = Paths.get(shape + '-' + orient) || Paths.get(shape); + + if (!path) { + error('LinkPath unsupported type: ' + _.shape + + (_.orient ? '-' + _.orient : '')); + } + + pulse.visit(pulse.SOURCE, function(t) { + t[as] = path(sx(t), sy(t), tx(t), ty(t)); + }); + + return pulse.reflow(_.modified()).modifies(as); +}; + +// -- Link Path Generation Methods ----- + +function line$2(sx, sy, tx, ty) { + return 'M' + sx + ',' + sy + + 'L' + tx + ',' + ty; +} + +function lineR(sa, sr, ta, tr) { + return line$2( + sr * Math.cos(sa), sr * Math.sin(sa), + tr * Math.cos(ta), tr * Math.sin(ta) + ); +} + +function arc$2(sx, sy, tx, ty) { + var dx = tx - sx, + dy = ty - sy, + rr = Math.sqrt(dx * dx + dy * dy) / 2, + ra = 180 * Math.atan2(dy, dx) / Math.PI; + return 'M' + sx + ',' + sy + + 'A' + rr + ',' + rr + + ' ' + ra + ' 0 1' + + ' ' + tx + ',' + ty; +} + +function arcR(sa, sr, ta, tr) { + return arc$2( + sr * Math.cos(sa), sr * Math.sin(sa), + tr * Math.cos(ta), tr * Math.sin(ta) + ); +} + +function curve(sx, sy, tx, ty) { + var dx = tx - sx, + dy = ty - sy, + ix = 0.2 * (dx + dy), + iy = 0.2 * (dy - dx); + return 'M' + sx + ',' + sy + + 'C' + (sx+ix) + ',' + (sy+iy) + + ' ' + (tx+iy) + ',' + (ty-ix) + + ' ' + tx + ',' + ty; +} + +function curveR(sa, sr, ta, tr) { + return curve( + sr * Math.cos(sa), sr * Math.sin(sa), + tr * Math.cos(ta), tr * Math.sin(ta) + ); +} + +function orthoX(sx, sy, tx, ty) { + return 'M' + sx + ',' + sy + + 'V' + ty + 'H' + tx; +} + +function orthoY(sx, sy, tx, ty) { + return 'M' + sx + ',' + sy + + 'H' + tx + 'V' + ty; +} + +function orthoR(sa, sr, ta, tr) { + var sc = Math.cos(sa), + ss = Math.sin(sa), + tc = Math.cos(ta), + ts = Math.sin(ta), + sf = Math.abs(ta - sa) > Math.PI ? ta <= sa : ta > sa; + return 'M' + (sr*sc) + ',' + (sr*ss) + + 'A' + sr + ',' + sr + ' 0 0,' + (sf?1:0) + + ' ' + (sr*tc) + ',' + (sr*ts) + + 'L' + (tr*tc) + ',' + (tr*ts); +} + +function diagonalX(sx, sy, tx, ty) { + var m = (sx + tx) / 2; + return 'M' + sx + ',' + sy + + 'C' + m + ',' + sy + + ' ' + m + ',' + ty + + ' ' + tx + ',' + ty; +} + +function diagonalY(sx, sy, tx, ty) { + var m = (sy + ty) / 2; + return 'M' + sx + ',' + sy + + 'C' + sx + ',' + m + + ' ' + tx + ',' + m + + ' ' + tx + ',' + ty; +} + +function diagonalR(sa, sr, ta, tr) { + var sc = Math.cos(sa), + ss = Math.sin(sa), + tc = Math.cos(ta), + ts = Math.sin(ta), + mr = (sr + tr) / 2; + return 'M' + (sr*sc) + ',' + (sr*ss) + + 'C' + (mr*sc) + ',' + (mr*ss) + + ' ' + (mr*tc) + ',' + (mr*ts) + + ' ' + (tr*tc) + ',' + (tr*ts); +} + +function ascending$5(a, b) { + return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; +} + +function bisector$5(compare) { + if (compare.length === 1) compare = ascendingComparator$5(compare); + return { + left: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) < 0) lo = mid + 1; + else hi = mid; + } + return lo; + }, + right: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) > 0) hi = mid; + else lo = mid + 1; + } + return lo; + } + }; +} + +function ascendingComparator$5(f) { + return function(d, x) { + return ascending$5(f(d), x); + }; +} + +var ascendingBisect$5 = bisector$5(ascending$5); + +function sequence$1(start, stop, step) { + start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step; + + var i = -1, + n = Math.max(0, Math.ceil((stop - start) / step)) | 0, + range = new Array(n); + + while (++i < n) { + range[i] = start + i * step; + } + + return range; +} + +function sum(values, valueof) { + let sum = 0; + if (valueof === undefined) { + for (let value of values) { + if (value = +value) { + sum += value; + } + } + } else { + let index = -1; + for (let value of values) { + if (value = +valueof(value, ++index, values)) { + sum += value; + } + } + } + return sum; +} + +/** + * Pie and donut chart layout. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {function(object): *} params.field - The value field to size pie segments. + * @param {number} [params.startAngle=0] - The start angle (in radians) of the layout. + * @param {number} [params.endAngle=2π] - The end angle (in radians) of the layout. + * @param {boolean} [params.sort] - Boolean flag for sorting sectors by value. + */ +function Pie(params) { + Transform.call(this, null, params); +} + +Pie.Definition = { + "type": "Pie", + "metadata": {"modifies": true}, + "params": [ + { "name": "field", "type": "field" }, + { "name": "startAngle", "type": "number", "default": 0 }, + { "name": "endAngle", "type": "number", "default": 6.283185307179586 }, + { "name": "sort", "type": "boolean", "default": false }, + { "name": "as", "type": "string", "array": true, "length": 2, "default": ["startAngle", "endAngle"] } + ] +}; + +var prototype$Y = inherits(Pie, Transform); + +prototype$Y.transform = function(_, pulse) { + var as = _.as || ['startAngle', 'endAngle'], + startAngle = as[0], + endAngle = as[1], + field = _.field || one, + start = _.startAngle || 0, + stop = _.endAngle != null ? _.endAngle : 2 * Math.PI, + data = pulse.source, + values = data.map(field), + n = values.length, + a = start, + k = (stop - start) / sum(values), + index = sequence$1(n), + i, t, v; + + if (_.sort) { + index.sort(function(a, b) { + return values[a] - values[b]; + }); + } + + for (i=0; i -1) return raw; + + var domain = _.domain, + type = scale.type, + zero = _.zero || (_.zero === undefined && includeZero(scale)), + n, mid; + + if (!domain) return 0; + + // adjust continuous domain for minimum pixel padding + if (includePad(type) && _.padding && domain[0] !== peek(domain)) { + domain = padDomain(type, domain, _.range, _.padding, _.exponent, _.constant); + } + + // adjust domain based on zero, min, max settings + if (zero || _.domainMin != null || _.domainMax != null || _.domainMid != null) { + n = ((domain = domain.slice()).length - 1) || 1; + if (zero) { + if (domain[0] > 0) domain[0] = 0; + if (domain[n] < 0) domain[n] = 0; + } + if (_.domainMin != null) domain[0] = _.domainMin; + if (_.domainMax != null) domain[n] = _.domainMax; + + if (_.domainMid != null) { + mid = _.domainMid; + if (mid < domain[0] || mid > domain[n]) { + df.warn('Scale domainMid exceeds domain min or max.', mid); + } + domain.splice(n, 0, mid); + } + } + + // set the scale domain + scale.domain(domainCheck(type, domain, df)); + + // if ordinal scale domain is defined, prevent implicit + // domain construction as side-effect of scale lookup + if (type === Ordinal) { + scale.unknown(_.domainImplicit ? implicit : undefined); + } + + // perform 'nice' adjustment as requested + if (_.nice && scale.nice) { + scale.nice((_.nice !== true && tickCount(scale, _.nice)) || null); + } + + // return the cardinality of the domain + return domain.length; +} + +function rawDomain(scale, raw, df) { + if (raw) { + scale.domain(domainCheck(scale.type, raw, df)); + return raw.length; + } else { + return -1; + } +} + +function padDomain(type, domain, range, pad, exponent, constant) { + var span = Math.abs(peek(range) - range[0]), + frac = span / (span - 2 * pad), + d = type === Log ? zoomLog(domain, null, frac) + : type === Sqrt ? zoomPow(domain, null, frac, 0.5) + : type === Pow ? zoomPow(domain, null, frac, exponent || 1) + : type === Symlog ? zoomSymlog(domain, null, frac, constant || 1) + : zoomLinear(domain, null, frac); + + domain = domain.slice(); + domain[0] = d[0]; + domain[domain.length-1] = d[1]; + return domain; +} + +function domainCheck(type, domain, df) { + if (isLogarithmic(type)) { + // sum signs of domain values + // if all pos or all neg, abs(sum) === domain.length + var s = Math.abs(domain.reduce(function(s, v) { + return s + (v < 0 ? -1 : v > 0 ? 1 : 0); + }, 0)); + + if (s !== domain.length) { + df.warn('Log scale domain includes zero: ' + $(domain)); + } + } + return domain; +} + +function configureBins(scale, _, count) { + let bins = _.bins; + + if (bins && !isArray(bins)) { + // generate bin boundary array + const domain = (bins.start == null || bins.stop == null) && scale.domain(), + start = bins.start == null ? domain[0] : bins.start, + stop = bins.stop == null ? peek(domain) : bins.stop, + step = bins.step; + + if (!step) error('Scale bins parameter missing step property.'); + bins = sequence$1(start, stop + step, step); + } + + if (bins) { + // assign bin boundaries to scale instance + scale.bins = bins; + } else if (scale.bins) { + // no current bins, remove bins if previously set + delete scale.bins; + } + + // special handling for bin-ordinal scales + if (scale.type === BinOrdinal) { + if (!bins) { + // the domain specifies the bins + scale.bins = scale.domain(); + } else if (!_.domain && !_.domainRaw) { + // the bins specify the domain + scale.domain(bins); + count = bins.length; + } + } + + // return domain cardinality + return count; +} + +function configureRange(scale, _, count) { + var round = _.round || false, + range = _.range; + + // if range step specified, calculate full range extent + if (_.rangeStep != null) { + range = configureRangeStep(scale.type, _, count); + } + + // else if a range scheme is defined, use that + else if (_.scheme) { + range = configureScheme(scale.type, _, count); + if (isFunction(range)) return scale.interpolator(range); + } + + // given a range array for an interpolating scale, convert to interpolator + else if (range && isInterpolating(scale.type)) { + return scale.interpolator( + interpolateColors(flip(range, _.reverse), _.interpolate, _.interpolateGamma) + ); + } + + // configure rounding / interpolation + if (range && _.interpolate && scale.interpolate) { + scale.interpolate(interpolate$1(_.interpolate, _.interpolateGamma)); + } else if (isFunction(scale.round)) { + scale.round(round); + } else if (isFunction(scale.rangeRound)) { + scale.interpolate(round ? interpolateRound : interpolate); + } + + if (range) scale.range(flip(range, _.reverse)); +} + +function configureRangeStep(type, _, count) { + if (type !== Band && type !== Point) { + error('Only band and point scales support rangeStep.'); + } + + // calculate full range based on requested step size and padding + var outer = (_.paddingOuter != null ? _.paddingOuter : _.padding) || 0, + inner = type === Point ? 1 + : ((_.paddingInner != null ? _.paddingInner : _.padding) || 0); + return [0, _.rangeStep * bandSpace(count, inner, outer)]; +} + +function configureScheme(type, _, count) { + var extent = _.schemeExtent, + name, scheme$1; + + if (isArray(_.scheme)) { + scheme$1 = interpolateColors(_.scheme, _.interpolate, _.interpolateGamma); + } else { + name = _.scheme.toLowerCase(); + scheme$1 = scheme(name); + if (!scheme$1) error('Unrecognized scheme name: ' + _.scheme); + } + + // determine size for potential discrete range + count = (type === Threshold) ? count + 1 + : (type === BinOrdinal) ? count - 1 + : (type === Quantile || type === Quantize) ? (+_.schemeCount || DEFAULT_COUNT) + : count; + + // adjust and/or quantize scheme as appropriate + return isInterpolating(type) ? adjustScheme(scheme$1, extent, _.reverse) + : isFunction(scheme$1) ? quantizeInterpolator(adjustScheme(scheme$1, extent), count) + : type === Ordinal ? scheme$1 : scheme$1.slice(0, count); +} + +function adjustScheme(scheme, extent, reverse) { + return (isFunction(scheme) && (extent || reverse)) + ? interpolateRange(scheme, flip(extent || [0, 1], reverse)) + : scheme; +} + +function flip(array, reverse) { + return reverse ? array.slice().reverse() : array; +} + +/** + * Sorts scenegraph items in the pulse source array. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {function(*,*): number} [params.sort] - A comparator + * function for sorting tuples. + */ +function SortItems(params) { + Transform.call(this, null, params); +} + +var prototype$_ = inherits(SortItems, Transform); + +prototype$_.transform = function(_, pulse) { + var mod = _.modified('sort') + || pulse.changed(pulse.ADD) + || pulse.modified(_.sort.fields) + || pulse.modified('datum'); + + if (mod) pulse.source.sort(_.sort); + + this.modified(mod); + return pulse; +}; + +var Zero = 'zero', + Center = 'center', + Normalize = 'normalize', + DefOutput = ['y0', 'y1']; + +/** + * Stack layout for visualization elements. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {function(object): *} params.field - The value field to stack. + * @param {Array} [params.groupby] - An array of accessors to groupby. + * @param {function(object,object): number} [params.sort] - A comparator for stack sorting. + * @param {string} [offset='zero'] - One of 'zero', 'center', 'normalize'. + */ +function Stack(params) { + Transform.call(this, null, params); +} + +Stack.Definition = { + "type": "Stack", + "metadata": {"modifies": true}, + "params": [ + { "name": "field", "type": "field" }, + { "name": "groupby", "type": "field", "array": true }, + { "name": "sort", "type": "compare" }, + { "name": "offset", "type": "enum", "default": Zero, "values": [Zero, Center, Normalize] }, + { "name": "as", "type": "string", "array": true, "length": 2, "default": DefOutput } + ] +}; + +var prototype$$ = inherits(Stack, Transform); + +prototype$$.transform = function(_, pulse) { + var as = _.as || DefOutput, + y0 = as[0], + y1 = as[1], + field = _.field || one, + stack = _.offset === Center ? stackCenter + : _.offset === Normalize ? stackNormalize + : stackZero, + groups, i, n, max; + + // partition, sum, and sort the stack groups + groups = partition$2(pulse.source, _.groupby, _.sort, field); + + // compute stack layouts per group + for (i=0, n=groups.length, max=groups.max; i max) max = s; + if (sort) g.sort(sort); + } + groups.max = max; + + return groups; +} + + + +var encode = /*#__PURE__*/Object.freeze({ + axisticks: AxisTicks, + datajoin: DataJoin, + encode: Encode, + legendentries: LegendEntries, + linkpath: LinkPath, + pie: Pie, + scale: Scale, + sortitems: SortItems, + stack: Stack, + validTicks: validTicks +}); + +function ascending$6(a, b) { + return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; +} + +function bisector$6(compare) { + if (compare.length === 1) compare = ascendingComparator$6(compare); + return { + left: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) < 0) lo = mid + 1; + else hi = mid; + } + return lo; + }, + right: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) > 0) hi = mid; + else lo = mid + 1; + } + return lo; + } + }; +} + +function ascendingComparator$6(f) { + return function(d, x) { + return ascending$6(f(d), x); + }; +} + +var ascendingBisect$6 = bisector$6(ascending$6); + +function extent$3(values, valueof) { + let min; + let max; + if (valueof === undefined) { + for (const value of values) { + if (value != null) { + if (min === undefined) { + if (value >= value) min = max = value; + } else { + if (min > value) min = value; + if (max < value) max = value; + } + } + } + } else { + let index = -1; + for (let value of values) { + if ((value = valueof(value, ++index, values)) != null) { + if (min === undefined) { + if (value >= value) min = max = value; + } else { + if (min > value) min = value; + if (max < value) max = value; + } + } + } + } + return [min, max]; +} + +function ascending$7(a, b) { + return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; +} + +function bisector$7(compare) { + if (compare.length === 1) compare = ascendingComparator$7(compare); + return { + left: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) < 0) lo = mid + 1; + else hi = mid; + } + return lo; + }, + right: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) > 0) hi = mid; + else lo = mid + 1; + } + return lo; + } + }; +} + +function ascendingComparator$7(f) { + return function(d, x) { + return ascending$7(f(d), x); + }; +} + +var ascendingBisect$7 = bisector$7(ascending$7); + +function extent$4(values, valueof) { + var n = values.length, + i = -1, + value, + min, + max; + + if (valueof == null) { + while (++i < n) { // Find the first comparable value. + if ((value = values[i]) != null && value >= value) { + min = max = value; + while (++i < n) { // Compare the remaining values. + if ((value = values[i]) != null) { + if (min > value) min = value; + if (max < value) max = value; + } + } + } + } + } + + else { + while (++i < n) { // Find the first comparable value. + if ((value = valueof(values[i], i, values)) != null && value >= value) { + min = max = value; + while (++i < n) { // Compare the remaining values. + if ((value = valueof(values[i], i, values)) != null) { + if (min > value) min = value; + if (max < value) max = value; + } + } + } + } + } + + return [min, max]; +} + +function range$1(start, stop, step) { + start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step; + + var i = -1, + n = Math.max(0, Math.ceil((stop - start) / step)) | 0, + range = new Array(n); + + while (++i < n) { + range[i] = start + i * step; + } + + return range; +} + +var e10$1 = Math.sqrt(50), + e5$1 = Math.sqrt(10), + e2$1 = Math.sqrt(2); + +function tickStep$1(start, stop, count) { + var step0 = Math.abs(stop - start) / Math.max(0, count), + step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)), + error = step0 / step1; + if (error >= e10$1) step1 *= 10; + else if (error >= e5$1) step1 *= 5; + else if (error >= e2$1) step1 *= 2; + return stop < start ? -step1 : step1; +} + +function thresholdSturges(values) { + return Math.ceil(Math.log(values.length) / Math.LN2) + 1; +} + +function max$3(values, valueof) { + var n = values.length, + i = -1, + value, + max; + + if (valueof == null) { + while (++i < n) { // Find the first comparable value. + if ((value = values[i]) != null && value >= value) { + max = value; + while (++i < n) { // Compare the remaining values. + if ((value = values[i]) != null && value > max) { + max = value; + } + } + } + } + } + + else { + while (++i < n) { // Find the first comparable value. + if ((value = valueof(values[i], i, values)) != null && value >= value) { + max = value; + while (++i < n) { // Compare the remaining values. + if ((value = valueof(values[i], i, values)) != null && value > max) { + max = value; + } + } + } + } + } + + return max; +} + +var array$2 = Array.prototype; + +var slice$1 = array$2.slice; + +function ascending$8(a, b) { + return a - b; +} + +function area$2(ring) { + var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1]; + while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1]; + return area; +} + +function constant$5(x) { + return function() { + return x; + }; +} + +function contains(ring, hole) { + var i = -1, n = hole.length, c; + while (++i < n) if (c = ringContains(ring, hole[i])) return c; + return 0; +} + +function ringContains(ring, point) { + var x = point[0], y = point[1], contains = -1; + for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) { + var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1]; + if (segmentContains(pi, pj, point)) return 0; + if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains; + } + return contains; +} + +function segmentContains(a, b, c) { + var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]); +} + +function collinear(a, b, c) { + return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]); +} + +function within(p, q, r) { + return p <= q && q <= r || r <= q && q <= p; +} + +function noop$2() {} + +var cases = [ + [], + [[[1.0, 1.5], [0.5, 1.0]]], + [[[1.5, 1.0], [1.0, 1.5]]], + [[[1.5, 1.0], [0.5, 1.0]]], + [[[1.0, 0.5], [1.5, 1.0]]], + [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]], + [[[1.0, 0.5], [1.0, 1.5]]], + [[[1.0, 0.5], [0.5, 1.0]]], + [[[0.5, 1.0], [1.0, 0.5]]], + [[[1.0, 1.5], [1.0, 0.5]]], + [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]], + [[[1.5, 1.0], [1.0, 0.5]]], + [[[0.5, 1.0], [1.5, 1.0]]], + [[[1.0, 1.5], [1.5, 1.0]]], + [[[0.5, 1.0], [1.0, 1.5]]], + [] +]; + +function contours() { + var dx = 1, + dy = 1, + threshold = thresholdSturges, + smooth = smoothLinear; + + function contours(values) { + var tz = threshold(values); + + // Convert number of thresholds into uniform thresholds. + if (!Array.isArray(tz)) { + var domain = extent$4(values), start = domain[0], stop = domain[1]; + tz = tickStep$1(start, stop, tz); + tz = range$1(Math.floor(start / tz) * tz, Math.floor(stop / tz) * tz, tz); + } else { + tz = tz.slice().sort(ascending$8); + } + + return tz.map(function(value) { + return contour(values, value); + }); + } + + // Accumulate, smooth contour rings, assign holes to exterior rings. + // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js + function contour(values, value) { + var polygons = [], + holes = []; + + isorings(values, value, function(ring) { + smooth(ring, values, value); + if (area$2(ring) > 0) polygons.push([ring]); + else holes.push(ring); + }); + + holes.forEach(function(hole) { + for (var i = 0, n = polygons.length, polygon; i < n; ++i) { + if (contains((polygon = polygons[i])[0], hole) !== -1) { + polygon.push(hole); + return; + } + } + }); + + return { + type: "MultiPolygon", + value: value, + coordinates: polygons + }; + } + + // Marching squares with isolines stitched into rings. + // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js + function isorings(values, value, callback) { + var fragmentByStart = new Array, + fragmentByEnd = new Array, + x, y, t0, t1, t2, t3; + + // Special case for the first row (y = -1, t2 = t3 = 0). + x = y = -1; + t1 = values[0] >= value; + cases[t1 << 1].forEach(stitch); + while (++x < dx - 1) { + t0 = t1, t1 = values[x + 1] >= value; + cases[t0 | t1 << 1].forEach(stitch); + } + cases[t1 << 0].forEach(stitch); + + // General case for the intermediate rows. + while (++y < dy - 1) { + x = -1; + t1 = values[y * dx + dx] >= value; + t2 = values[y * dx] >= value; + cases[t1 << 1 | t2 << 2].forEach(stitch); + while (++x < dx - 1) { + t0 = t1, t1 = values[y * dx + dx + x + 1] >= value; + t3 = t2, t2 = values[y * dx + x + 1] >= value; + cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch); + } + cases[t1 | t2 << 3].forEach(stitch); + } + + // Special case for the last row (y = dy - 1, t0 = t1 = 0). + x = -1; + t2 = values[y * dx] >= value; + cases[t2 << 2].forEach(stitch); + while (++x < dx - 1) { + t3 = t2, t2 = values[y * dx + x + 1] >= value; + cases[t2 << 2 | t3 << 3].forEach(stitch); + } + cases[t2 << 3].forEach(stitch); + + function stitch(line) { + var start = [line[0][0] + x, line[0][1] + y], + end = [line[1][0] + x, line[1][1] + y], + startIndex = index(start), + endIndex = index(end), + f, g; + if (f = fragmentByEnd[startIndex]) { + if (g = fragmentByStart[endIndex]) { + delete fragmentByEnd[f.end]; + delete fragmentByStart[g.start]; + if (f === g) { + f.ring.push(end); + callback(f.ring); + } else { + fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)}; + } + } else { + delete fragmentByEnd[f.end]; + f.ring.push(end); + fragmentByEnd[f.end = endIndex] = f; + } + } else if (f = fragmentByStart[endIndex]) { + if (g = fragmentByEnd[startIndex]) { + delete fragmentByStart[f.start]; + delete fragmentByEnd[g.end]; + if (f === g) { + f.ring.push(end); + callback(f.ring); + } else { + fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)}; + } + } else { + delete fragmentByStart[f.start]; + f.ring.unshift(start); + fragmentByStart[f.start = startIndex] = f; + } + } else { + fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]}; + } + } + } + + function index(point) { + return point[0] * 2 + point[1] * (dx + 1) * 4; + } + + function smoothLinear(ring, values, value) { + ring.forEach(function(point) { + var x = point[0], + y = point[1], + xt = x | 0, + yt = y | 0, + v0, + v1 = values[yt * dx + xt]; + if (x > 0 && x < dx && xt === x) { + v0 = values[yt * dx + xt - 1]; + point[0] = x + (value - v0) / (v1 - v0) - 0.5; + } + if (y > 0 && y < dy && yt === y) { + v0 = values[(yt - 1) * dx + xt]; + point[1] = y + (value - v0) / (v1 - v0) - 0.5; + } + }); + } + + contours.contour = contour; + + contours.size = function(_) { + if (!arguments.length) return [dx, dy]; + var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]); + if (!(_0 > 0) || !(_1 > 0)) throw new Error("invalid size"); + return dx = _0, dy = _1, contours; + }; + + contours.thresholds = function(_) { + return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant$5(slice$1.call(_)) : constant$5(_), contours) : threshold; + }; + + contours.smooth = function(_) { + return arguments.length ? (smooth = _ ? smoothLinear : noop$2, contours) : smooth === smoothLinear; + }; + + return contours; +} + +// TODO Optimize edge cases. +// TODO Optimize index calculation. +// TODO Optimize arguments. +function blurX(source, target, r) { + var n = source.width, + m = source.height, + w = (r << 1) + 1; + for (var j = 0; j < m; ++j) { + for (var i = 0, sr = 0; i < n + r; ++i) { + if (i < n) { + sr += source.data[i + j * n]; + } + if (i >= r) { + if (i >= w) { + sr -= source.data[i - w + j * n]; + } + target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w); + } + } + } +} + +// TODO Optimize edge cases. +// TODO Optimize index calculation. +// TODO Optimize arguments. +function blurY(source, target, r) { + var n = source.width, + m = source.height, + w = (r << 1) + 1; + for (var i = 0; i < n; ++i) { + for (var j = 0, sr = 0; j < m + r; ++j) { + if (j < m) { + sr += source.data[i + j * n]; + } + if (j >= r) { + if (j >= w) { + sr -= source.data[i + (j - w) * n]; + } + target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w); + } + } + } +} + +function defaultX(d) { + return d[0]; +} + +function defaultY(d) { + return d[1]; +} + +function defaultWeight() { + return 1; +} + +function contourDensity() { + var x = defaultX, + y = defaultY, + weight = defaultWeight, + dx = 960, + dy = 500, + r = 20, // blur radius + k = 2, // log2(grid cell size) + o = r * 3, // grid offset, to pad for blur + n = (dx + o * 2) >> k, // grid width + m = (dy + o * 2) >> k, // grid height + threshold = constant$5(20); + + function density(data) { + var values0 = new Float32Array(n * m), + values1 = new Float32Array(n * m); + + data.forEach(function(d, i, data) { + var xi = (+x(d, i, data) + o) >> k, + yi = (+y(d, i, data) + o) >> k, + wi = +weight(d, i, data); + if (xi >= 0 && xi < n && yi >= 0 && yi < m) { + values0[xi + yi * n] += wi; + } + }); + + // TODO Optimize. + blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k); + blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k); + blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k); + blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k); + blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k); + blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k); + + var tz = threshold(values0); + + // Convert number of thresholds into uniform thresholds. + if (!Array.isArray(tz)) { + var stop = max$3(values0); + tz = tickStep$1(0, stop, tz); + tz = range$1(0, Math.floor(stop / tz) * tz, tz); + tz.shift(); + } + + return contours() + .thresholds(tz) + .size([n, m]) + (values0) + .map(transform); + } + + function transform(geometry) { + geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel. + geometry.coordinates.forEach(transformPolygon); + return geometry; + } + + function transformPolygon(coordinates) { + coordinates.forEach(transformRing); + } + + function transformRing(coordinates) { + coordinates.forEach(transformPoint); + } + + // TODO Optimize. + function transformPoint(coordinates) { + coordinates[0] = coordinates[0] * Math.pow(2, k) - o; + coordinates[1] = coordinates[1] * Math.pow(2, k) - o; + } + + function resize() { + o = r * 3; + n = (dx + o * 2) >> k; + m = (dy + o * 2) >> k; + return density; + } + + density.x = function(_) { + return arguments.length ? (x = typeof _ === "function" ? _ : constant$5(+_), density) : x; + }; + + density.y = function(_) { + return arguments.length ? (y = typeof _ === "function" ? _ : constant$5(+_), density) : y; + }; + + density.weight = function(_) { + return arguments.length ? (weight = typeof _ === "function" ? _ : constant$5(+_), density) : weight; + }; + + density.size = function(_) { + if (!arguments.length) return [dx, dy]; + var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]); + if (!(_0 >= 0) && !(_0 >= 0)) throw new Error("invalid size"); + return dx = _0, dy = _1, resize(); + }; + + density.cellSize = function(_) { + if (!arguments.length) return 1 << k; + if (!((_ = +_) >= 1)) throw new Error("invalid cell size"); + return k = Math.floor(Math.log(_) / Math.LN2), resize(); + }; + + density.thresholds = function(_) { + return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant$5(slice$1.call(_)) : constant$5(_), density) : threshold; + }; + + density.bandwidth = function(_) { + if (!arguments.length) return Math.sqrt(r * (r + 1)); + if (!((_ = +_) >= 0)) throw new Error("invalid bandwidth"); + return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize(); + }; + + return density; +} + +var CONTOUR_PARAMS = ['size', 'smooth']; +var DENSITY_PARAMS = ['x', 'y', 'weight', 'size', 'cellSize', 'bandwidth']; + +/** + * Generate contours based on kernel-density estimation of point data. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {Array} params.size - The dimensions [width, height] over which to compute contours. + * If the values parameter is provided, this must be the dimensions of the input data. + * If density estimation is performed, this is the output view dimensions in pixels. + * @param {Array} [params.values] - An array of numeric values representing an + * width x height grid of values over which to compute contours. If unspecified, this + * transform will instead attempt to compute contours for the kernel density estimate + * using values drawn from data tuples in the input pulse. + * @param {function(object): number} [params.x] - The pixel x-coordinate accessor for density estimation. + * @param {function(object): number} [params.y] - The pixel y-coordinate accessor for density estimation. + * @param {function(object): number} [params.weight] - The data point weight accessor for density estimation. + * @param {number} [params.cellSize] - Contour density calculation cell size. + * @param {number} [params.bandwidth] - Kernel density estimation bandwidth. + * @param {Array} [params.thresholds] - Contour threshold array. If + * this parameter is set, the count and nice parameters will be ignored. + * @param {number} [params.count] - The desired number of contours. + * @param {boolean} [params.nice] - Boolean flag indicating if the contour + * threshold values should be automatically aligned to "nice" + * human-friendly values. Setting this flag may cause the number of + * thresholds to deviate from the specified count. + * @param {boolean} [params.smooth] - Boolean flag indicating if the contour + * polygons should be smoothed using linear interpolation. The default is + * true. The parameter is ignored when using density estimation. + */ +function Contour(params) { + Transform.call(this, null, params); +} + +Contour.Definition = { + "type": "Contour", + "metadata": {"generates": true}, + "params": [ + { "name": "size", "type": "number", "array": true, "length": 2, "required": true }, + { "name": "values", "type": "number", "array": true }, + { "name": "x", "type": "field" }, + { "name": "y", "type": "field" }, + { "name": "weight", "type": "field" }, + { "name": "cellSize", "type": "number" }, + { "name": "bandwidth", "type": "number" }, + { "name": "count", "type": "number" }, + { "name": "smooth", "type": "boolean" }, + { "name": "nice", "type": "boolean", "default": false }, + { "name": "thresholds", "type": "number", "array": true } + ] +}; + +var prototype$10 = inherits(Contour, Transform); + +prototype$10.transform = function(_, pulse) { + if (this.value && !pulse.changed() && !_.modified()) + return pulse.StopPropagation; + + var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS), + count = _.count || 10, + contour, params, values; + + if (_.values) { + contour = contours(); + params = CONTOUR_PARAMS; + values = _.values; + } else { + contour = contourDensity(); + params = DENSITY_PARAMS; + values = pulse.materialize(pulse.SOURCE).source; + } + + // set threshold parameter + contour.thresholds(_.thresholds || (_.nice ? count : quantize$2(count))); + + // set all other parameters + params.forEach(function(param) { + if (_[param] != null) contour[param](_[param]); + }); + + if (this.value) out.rem = this.value; + values = values && values.length ? contour(values).map(ingest) : []; + this.value = out.source = out.add = values; + + return out; +}; + +function quantize$2(k) { + return function(values) { + var ex = extent$3(values), x0 = ex[0], dx = ex[1] - x0, + t = [], i = 1; + for (; i<=k; ++i) t.push(x0 + dx * i / (k + 1)); + return t; + }; +} + +var Feature = 'Feature'; +var FeatureCollection = 'FeatureCollection'; +var MultiPoint = 'MultiPoint'; + +/** + * Consolidate an array of [longitude, latitude] points or GeoJSON features + * into a combined GeoJSON object. This transform is particularly useful for + * combining geo data for a Projection's fit argument. The resulting GeoJSON + * data is available as this transform's value. Input pulses are unchanged. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {Array} [params.fields] - A two-element array + * of field accessors for the longitude and latitude values. + * @param {function(object): *} params.geojson - A field accessor for + * retrieving GeoJSON feature data. + */ +function GeoJSON(params) { + Transform.call(this, null, params); +} + +GeoJSON.Definition = { + "type": "GeoJSON", + "metadata": {}, + "params": [ + { "name": "fields", "type": "field", "array": true, "length": 2 }, + { "name": "geojson", "type": "field" }, + ] +}; + +var prototype$11 = inherits(GeoJSON, Transform); + +prototype$11.transform = function(_, pulse) { + var features = this._features, + points = this._points, + fields = _.fields, + lon = fields && fields[0], + lat = fields && fields[1], + geojson = _.geojson, + flag = pulse.ADD, + mod; + + mod = _.modified() + || pulse.changed(pulse.REM) + || pulse.modified(accessorFields(geojson)) + || (lon && (pulse.modified(accessorFields(lon)))) + || (lat && (pulse.modified(accessorFields(lat)))); + + if (!this.value || mod) { + flag = pulse.SOURCE; + this._features = (features = []); + this._points = (points = []); + } + + if (geojson) { + pulse.visit(flag, function(t) { + features.push(geojson(t)); + }); + } + + if (lon && lat) { + pulse.visit(flag, function(t) { + var x = lon(t), + y = lat(t); + if (x != null && y != null && (x = +x) === x && (y = +y) === y) { + points.push([x, y]); + } + }); + features = features.concat({ + type: Feature, + geometry: { + type: MultiPoint, + coordinates: points + } + }); + } + + this.value = { + type: FeatureCollection, + features: features + }; +}; + +// Adds floating point numbers with twice the normal precision. +// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and +// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3) +// 305–363 (1997). +// Code adapted from GeographicLib by Charles F. F. Karney, +// http://geographiclib.sourceforge.net/ + +function adder() { + return new Adder; +} + +function Adder() { + this.reset(); +} + +Adder.prototype = { + constructor: Adder, + reset: function() { + this.s = // rounded value + this.t = 0; // exact error + }, + add: function(y) { + add$2(temp$1, y, this.t); + add$2(this, temp$1.s, this.s); + if (this.s) this.t += temp$1.t; + else this.s = temp$1.t; + }, + valueOf: function() { + return this.s; + } +}; + +var temp$1 = new Adder; + +function add$2(adder, a, b) { + var x = adder.s = a + b, + bv = x - a, + av = x - bv; + adder.t = (a - av) + (b - bv); +} + +var epsilon$2 = 1e-6; +var epsilon2$1 = 1e-12; +var pi$2 = Math.PI; +var halfPi$1 = pi$2 / 2; +var quarterPi = pi$2 / 4; +var tau$2 = pi$2 * 2; + +var degrees$1 = 180 / pi$2; +var radians = pi$2 / 180; + +var abs$1 = Math.abs; +var atan = Math.atan; +var atan2$1 = Math.atan2; +var cos$1 = Math.cos; +var ceil = Math.ceil; +var exp$1 = Math.exp; +var log$3 = Math.log; +var pow$2 = Math.pow; +var sin$1 = Math.sin; +var sign$1 = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; }; +var sqrt$2 = Math.sqrt; +var tan = Math.tan; + +function acos$1(x) { + return x > 1 ? 0 : x < -1 ? pi$2 : Math.acos(x); +} + +function asin$1(x) { + return x > 1 ? halfPi$1 : x < -1 ? -halfPi$1 : Math.asin(x); +} + +function noop$3() {} + +function streamGeometry(geometry, stream) { + if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) { + streamGeometryType[geometry.type](geometry, stream); + } +} + +var streamObjectType = { + Feature: function(object, stream) { + streamGeometry(object.geometry, stream); + }, + FeatureCollection: function(object, stream) { + var features = object.features, i = -1, n = features.length; + while (++i < n) streamGeometry(features[i].geometry, stream); + } +}; + +var streamGeometryType = { + Sphere: function(object, stream) { + stream.sphere(); + }, + Point: function(object, stream) { + object = object.coordinates; + stream.point(object[0], object[1], object[2]); + }, + MultiPoint: function(object, stream) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]); + }, + LineString: function(object, stream) { + streamLine(object.coordinates, stream, 0); + }, + MultiLineString: function(object, stream) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) streamLine(coordinates[i], stream, 0); + }, + Polygon: function(object, stream) { + streamPolygon(object.coordinates, stream); + }, + MultiPolygon: function(object, stream) { + var coordinates = object.coordinates, i = -1, n = coordinates.length; + while (++i < n) streamPolygon(coordinates[i], stream); + }, + GeometryCollection: function(object, stream) { + var geometries = object.geometries, i = -1, n = geometries.length; + while (++i < n) streamGeometry(geometries[i], stream); + } +}; + +function streamLine(coordinates, stream, closed) { + var i = -1, n = coordinates.length - closed, coordinate; + stream.lineStart(); + while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]); + stream.lineEnd(); +} + +function streamPolygon(coordinates, stream) { + var i = -1, n = coordinates.length; + stream.polygonStart(); + while (++i < n) streamLine(coordinates[i], stream, 1); + stream.polygonEnd(); +} + +function geoStream(object, stream) { + if (object && streamObjectType.hasOwnProperty(object.type)) { + streamObjectType[object.type](object, stream); + } else { + streamGeometry(object, stream); + } +} + +var areaRingSum = adder(); + +var areaSum = adder(), + lambda00, + phi00, + lambda0, + cosPhi0, + sinPhi0; + +var areaStream = { + point: noop$3, + lineStart: noop$3, + lineEnd: noop$3, + polygonStart: function() { + areaRingSum.reset(); + areaStream.lineStart = areaRingStart; + areaStream.lineEnd = areaRingEnd; + }, + polygonEnd: function() { + var areaRing = +areaRingSum; + areaSum.add(areaRing < 0 ? tau$2 + areaRing : areaRing); + this.lineStart = this.lineEnd = this.point = noop$3; + }, + sphere: function() { + areaSum.add(tau$2); + } +}; + +function areaRingStart() { + areaStream.point = areaPointFirst; +} + +function areaRingEnd() { + areaPoint(lambda00, phi00); +} + +function areaPointFirst(lambda, phi) { + areaStream.point = areaPoint; + lambda00 = lambda, phi00 = phi; + lambda *= radians, phi *= radians; + lambda0 = lambda, cosPhi0 = cos$1(phi = phi / 2 + quarterPi), sinPhi0 = sin$1(phi); +} + +function areaPoint(lambda, phi) { + lambda *= radians, phi *= radians; + phi = phi / 2 + quarterPi; // half the angular distance from south pole + + // Spherical excess E for a spherical triangle with vertices: south pole, + // previous point, current point. Uses a formula derived from Cagnoli’s + // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2). + var dLambda = lambda - lambda0, + sdLambda = dLambda >= 0 ? 1 : -1, + adLambda = sdLambda * dLambda, + cosPhi = cos$1(phi), + sinPhi = sin$1(phi), + k = sinPhi0 * sinPhi, + u = cosPhi0 * cosPhi + k * cos$1(adLambda), + v = k * sdLambda * sin$1(adLambda); + areaRingSum.add(atan2$1(v, u)); + + // Advance the previous points. + lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi; +} + +function area$3(object) { + areaSum.reset(); + geoStream(object, areaStream); + return areaSum * 2; +} + +function spherical(cartesian) { + return [atan2$1(cartesian[1], cartesian[0]), asin$1(cartesian[2])]; +} + +function cartesian(spherical) { + var lambda = spherical[0], phi = spherical[1], cosPhi = cos$1(phi); + return [cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)]; +} + +function cartesianDot(a, b) { + return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; +} + +function cartesianCross(a, b) { + return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]]; +} + +// TODO return a +function cartesianAddInPlace(a, b) { + a[0] += b[0], a[1] += b[1], a[2] += b[2]; +} + +function cartesianScale(vector, k) { + return [vector[0] * k, vector[1] * k, vector[2] * k]; +} + +// TODO return d +function cartesianNormalizeInPlace(d) { + var l = sqrt$2(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]); + d[0] /= l, d[1] /= l, d[2] /= l; +} + +var lambda0$1, phi0, lambda1, phi1, // bounds + lambda2, // previous lambda-coordinate + lambda00$1, phi00$1, // first point + p0, // previous 3D point + deltaSum = adder(), + ranges, + range$2; + +var boundsStream = { + point: boundsPoint, + lineStart: boundsLineStart, + lineEnd: boundsLineEnd, + polygonStart: function() { + boundsStream.point = boundsRingPoint; + boundsStream.lineStart = boundsRingStart; + boundsStream.lineEnd = boundsRingEnd; + deltaSum.reset(); + areaStream.polygonStart(); + }, + polygonEnd: function() { + areaStream.polygonEnd(); + boundsStream.point = boundsPoint; + boundsStream.lineStart = boundsLineStart; + boundsStream.lineEnd = boundsLineEnd; + if (areaRingSum < 0) lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90); + else if (deltaSum > epsilon$2) phi1 = 90; + else if (deltaSum < -epsilon$2) phi0 = -90; + range$2[0] = lambda0$1, range$2[1] = lambda1; + } +}; + +function boundsPoint(lambda, phi) { + ranges.push(range$2 = [lambda0$1 = lambda, lambda1 = lambda]); + if (phi < phi0) phi0 = phi; + if (phi > phi1) phi1 = phi; +} + +function linePoint(lambda, phi) { + var p = cartesian([lambda * radians, phi * radians]); + if (p0) { + var normal = cartesianCross(p0, p), + equatorial = [normal[1], -normal[0], 0], + inflection = cartesianCross(equatorial, normal); + cartesianNormalizeInPlace(inflection); + inflection = spherical(inflection); + var delta = lambda - lambda2, + sign = delta > 0 ? 1 : -1, + lambdai = inflection[0] * degrees$1 * sign, + phii, + antimeridian = abs$1(delta) > 180; + if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) { + phii = inflection[1] * degrees$1; + if (phii > phi1) phi1 = phii; + } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) { + phii = -inflection[1] * degrees$1; + if (phii < phi0) phi0 = phii; + } else { + if (phi < phi0) phi0 = phi; + if (phi > phi1) phi1 = phi; + } + if (antimeridian) { + if (lambda < lambda2) { + if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda; + } else { + if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda; + } + } else { + if (lambda1 >= lambda0$1) { + if (lambda < lambda0$1) lambda0$1 = lambda; + if (lambda > lambda1) lambda1 = lambda; + } else { + if (lambda > lambda2) { + if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda; + } else { + if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda; + } + } + } + } else { + ranges.push(range$2 = [lambda0$1 = lambda, lambda1 = lambda]); + } + if (phi < phi0) phi0 = phi; + if (phi > phi1) phi1 = phi; + p0 = p, lambda2 = lambda; +} + +function boundsLineStart() { + boundsStream.point = linePoint; +} + +function boundsLineEnd() { + range$2[0] = lambda0$1, range$2[1] = lambda1; + boundsStream.point = boundsPoint; + p0 = null; +} + +function boundsRingPoint(lambda, phi) { + if (p0) { + var delta = lambda - lambda2; + deltaSum.add(abs$1(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta); + } else { + lambda00$1 = lambda, phi00$1 = phi; + } + areaStream.point(lambda, phi); + linePoint(lambda, phi); +} + +function boundsRingStart() { + areaStream.lineStart(); +} + +function boundsRingEnd() { + boundsRingPoint(lambda00$1, phi00$1); + areaStream.lineEnd(); + if (abs$1(deltaSum) > epsilon$2) lambda0$1 = -(lambda1 = 180); + range$2[0] = lambda0$1, range$2[1] = lambda1; + p0 = null; +} + +// Finds the left-right distance between two longitudes. +// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want +// the distance between ±180° to be 360°. +function angle(lambda0, lambda1) { + return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1; +} + +function rangeCompare(a, b) { + return a[0] - b[0]; +} + +function rangeContains(range, x) { + return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x; +} + +function bounds$1(feature) { + var i, n, a, b, merged, deltaMax, delta; + + phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity); + ranges = []; + geoStream(feature, boundsStream); + + // First, sort ranges by their minimum longitudes. + if (n = ranges.length) { + ranges.sort(rangeCompare); + + // Then, merge any ranges that overlap. + for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) { + b = ranges[i]; + if (rangeContains(a, b[0]) || rangeContains(a, b[1])) { + if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1]; + if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0]; + } else { + merged.push(a = b); + } + } + + // Finally, find the largest gap between the merged ranges. + // The final bounding box will be the inverse of this gap. + for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) { + b = merged[i]; + if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1]; + } + } + + ranges = range$2 = null; + + return lambda0$1 === Infinity || phi0 === Infinity + ? [[NaN, NaN], [NaN, NaN]] + : [[lambda0$1, phi0], [lambda1, phi1]]; +} + +var W0, W1, + X0, Y0, Z0, + X1, Y1, Z1, + X2, Y2, Z2, + lambda00$2, phi00$2, // first point + x0, y0, z0; // previous point + +var centroidStream = { + sphere: noop$3, + point: centroidPoint, + lineStart: centroidLineStart, + lineEnd: centroidLineEnd, + polygonStart: function() { + centroidStream.lineStart = centroidRingStart; + centroidStream.lineEnd = centroidRingEnd; + }, + polygonEnd: function() { + centroidStream.lineStart = centroidLineStart; + centroidStream.lineEnd = centroidLineEnd; + } +}; + +// Arithmetic mean of Cartesian vectors. +function centroidPoint(lambda, phi) { + lambda *= radians, phi *= radians; + var cosPhi = cos$1(phi); + centroidPointCartesian(cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)); +} + +function centroidPointCartesian(x, y, z) { + ++W0; + X0 += (x - X0) / W0; + Y0 += (y - Y0) / W0; + Z0 += (z - Z0) / W0; +} + +function centroidLineStart() { + centroidStream.point = centroidLinePointFirst; +} + +function centroidLinePointFirst(lambda, phi) { + lambda *= radians, phi *= radians; + var cosPhi = cos$1(phi); + x0 = cosPhi * cos$1(lambda); + y0 = cosPhi * sin$1(lambda); + z0 = sin$1(phi); + centroidStream.point = centroidLinePoint; + centroidPointCartesian(x0, y0, z0); +} + +function centroidLinePoint(lambda, phi) { + lambda *= radians, phi *= radians; + var cosPhi = cos$1(phi), + x = cosPhi * cos$1(lambda), + y = cosPhi * sin$1(lambda), + z = sin$1(phi), + w = atan2$1(sqrt$2((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z); + W1 += w; + X1 += w * (x0 + (x0 = x)); + Y1 += w * (y0 + (y0 = y)); + Z1 += w * (z0 + (z0 = z)); + centroidPointCartesian(x0, y0, z0); +} + +function centroidLineEnd() { + centroidStream.point = centroidPoint; +} + +// See J. E. Brock, The Inertia Tensor for a Spherical Triangle, +// J. Applied Mechanics 42, 239 (1975). +function centroidRingStart() { + centroidStream.point = centroidRingPointFirst; +} + +function centroidRingEnd() { + centroidRingPoint(lambda00$2, phi00$2); + centroidStream.point = centroidPoint; +} + +function centroidRingPointFirst(lambda, phi) { + lambda00$2 = lambda, phi00$2 = phi; + lambda *= radians, phi *= radians; + centroidStream.point = centroidRingPoint; + var cosPhi = cos$1(phi); + x0 = cosPhi * cos$1(lambda); + y0 = cosPhi * sin$1(lambda); + z0 = sin$1(phi); + centroidPointCartesian(x0, y0, z0); +} + +function centroidRingPoint(lambda, phi) { + lambda *= radians, phi *= radians; + var cosPhi = cos$1(phi), + x = cosPhi * cos$1(lambda), + y = cosPhi * sin$1(lambda), + z = sin$1(phi), + cx = y0 * z - z0 * y, + cy = z0 * x - x0 * z, + cz = x0 * y - y0 * x, + m = sqrt$2(cx * cx + cy * cy + cz * cz), + w = asin$1(m), // line weight = angle + v = m && -w / m; // area weight multiplier + X2 += v * cx; + Y2 += v * cy; + Z2 += v * cz; + W1 += w; + X1 += w * (x0 + (x0 = x)); + Y1 += w * (y0 + (y0 = y)); + Z1 += w * (z0 + (z0 = z)); + centroidPointCartesian(x0, y0, z0); +} + +function centroid(object) { + W0 = W1 = + X0 = Y0 = Z0 = + X1 = Y1 = Z1 = + X2 = Y2 = Z2 = 0; + geoStream(object, centroidStream); + + var x = X2, + y = Y2, + z = Z2, + m = x * x + y * y + z * z; + + // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid. + if (m < epsilon2$1) { + x = X1, y = Y1, z = Z1; + // If the feature has zero length, fall back to arithmetic mean of point vectors. + if (W1 < epsilon$2) x = X0, y = Y0, z = Z0; + m = x * x + y * y + z * z; + // If the feature still has an undefined ccentroid, then return. + if (m < epsilon2$1) return [NaN, NaN]; + } + + return [atan2$1(y, x) * degrees$1, asin$1(z / sqrt$2(m)) * degrees$1]; +} + +function compose(a, b) { + + function compose(x, y) { + return x = a(x, y), b(x[0], x[1]); + } + + if (a.invert && b.invert) compose.invert = function(x, y) { + return x = b.invert(x, y), x && a.invert(x[0], x[1]); + }; + + return compose; +} + +function rotationIdentity(lambda, phi) { + return [abs$1(lambda) > pi$2 ? lambda + Math.round(-lambda / tau$2) * tau$2 : lambda, phi]; +} + +rotationIdentity.invert = rotationIdentity; + +function rotateRadians(deltaLambda, deltaPhi, deltaGamma) { + return (deltaLambda %= tau$2) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma)) + : rotationLambda(deltaLambda)) + : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma) + : rotationIdentity); +} + +function forwardRotationLambda(deltaLambda) { + return function(lambda, phi) { + return lambda += deltaLambda, [lambda > pi$2 ? lambda - tau$2 : lambda < -pi$2 ? lambda + tau$2 : lambda, phi]; + }; +} + +function rotationLambda(deltaLambda) { + var rotation = forwardRotationLambda(deltaLambda); + rotation.invert = forwardRotationLambda(-deltaLambda); + return rotation; +} + +function rotationPhiGamma(deltaPhi, deltaGamma) { + var cosDeltaPhi = cos$1(deltaPhi), + sinDeltaPhi = sin$1(deltaPhi), + cosDeltaGamma = cos$1(deltaGamma), + sinDeltaGamma = sin$1(deltaGamma); + + function rotation(lambda, phi) { + var cosPhi = cos$1(phi), + x = cos$1(lambda) * cosPhi, + y = sin$1(lambda) * cosPhi, + z = sin$1(phi), + k = z * cosDeltaPhi + x * sinDeltaPhi; + return [ + atan2$1(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi), + asin$1(k * cosDeltaGamma + y * sinDeltaGamma) + ]; + } + + rotation.invert = function(lambda, phi) { + var cosPhi = cos$1(phi), + x = cos$1(lambda) * cosPhi, + y = sin$1(lambda) * cosPhi, + z = sin$1(phi), + k = z * cosDeltaGamma - y * sinDeltaGamma; + return [ + atan2$1(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi), + asin$1(k * cosDeltaPhi - x * sinDeltaPhi) + ]; + }; + + return rotation; +} + +function rotation(rotate) { + rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0); + + function forward(coordinates) { + coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians); + return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates; + } + + forward.invert = function(coordinates) { + coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians); + return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates; + }; + + return forward; +} + +// Generates a circle centered at [0°, 0°], with a given radius and precision. +function circleStream(stream, radius, delta, direction, t0, t1) { + if (!delta) return; + var cosRadius = cos$1(radius), + sinRadius = sin$1(radius), + step = direction * delta; + if (t0 == null) { + t0 = radius + direction * tau$2; + t1 = radius - step / 2; + } else { + t0 = circleRadius(cosRadius, t0); + t1 = circleRadius(cosRadius, t1); + if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau$2; + } + for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) { + point = spherical([cosRadius, -sinRadius * cos$1(t), -sinRadius * sin$1(t)]); + stream.point(point[0], point[1]); + } +} + +// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0]. +function circleRadius(cosRadius, point) { + point = cartesian(point), point[0] -= cosRadius; + cartesianNormalizeInPlace(point); + var radius = acos$1(-point[1]); + return ((-point[2] < 0 ? -radius : radius) + tau$2 - epsilon$2) % tau$2; +} + +function clipBuffer() { + var lines = [], + line; + return { + point: function(x, y) { + line.push([x, y]); + }, + lineStart: function() { + lines.push(line = []); + }, + lineEnd: noop$3, + rejoin: function() { + if (lines.length > 1) lines.push(lines.pop().concat(lines.shift())); + }, + result: function() { + var result = lines; + lines = []; + line = null; + return result; + } + }; +} + +function pointEqual(a, b) { + return abs$1(a[0] - b[0]) < epsilon$2 && abs$1(a[1] - b[1]) < epsilon$2; +} + +function Intersection(point, points, other, entry) { + this.x = point; + this.z = points; + this.o = other; // another intersection + this.e = entry; // is an entry? + this.v = false; // visited + this.n = this.p = null; // next & previous +} + +// A generalized polygon clipping algorithm: given a polygon that has been cut +// into its visible line segments, and rejoins the segments by interpolating +// along the clip edge. +function clipRejoin(segments, compareIntersection, startInside, interpolate, stream) { + var subject = [], + clip = [], + i, + n; + + segments.forEach(function(segment) { + if ((n = segment.length - 1) <= 0) return; + var n, p0 = segment[0], p1 = segment[n], x; + + // If the first and last points of a segment are coincident, then treat as a + // closed ring. TODO if all rings are closed, then the winding order of the + // exterior ring should be checked. + if (pointEqual(p0, p1)) { + stream.lineStart(); + for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]); + stream.lineEnd(); + return; + } + + subject.push(x = new Intersection(p0, segment, null, true)); + clip.push(x.o = new Intersection(p0, null, x, false)); + subject.push(x = new Intersection(p1, segment, null, false)); + clip.push(x.o = new Intersection(p1, null, x, true)); + }); + + if (!subject.length) return; + + clip.sort(compareIntersection); + link(subject); + link(clip); + + for (i = 0, n = clip.length; i < n; ++i) { + clip[i].e = startInside = !startInside; + } + + var start = subject[0], + points, + point; + + while (1) { + // Find first unvisited intersection. + var current = start, + isSubject = true; + while (current.v) if ((current = current.n) === start) return; + points = current.z; + stream.lineStart(); + do { + current.v = current.o.v = true; + if (current.e) { + if (isSubject) { + for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]); + } else { + interpolate(current.x, current.n.x, 1, stream); + } + current = current.n; + } else { + if (isSubject) { + points = current.p.z; + for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]); + } else { + interpolate(current.x, current.p.x, -1, stream); + } + current = current.p; + } + current = current.o; + points = current.z; + isSubject = !isSubject; + } while (!current.v); + stream.lineEnd(); + } +} + +function link(array) { + if (!(n = array.length)) return; + var n, + i = 0, + a = array[0], + b; + while (++i < n) { + a.n = b = array[i]; + b.p = a; + a = b; + } + a.n = b = array[0]; + b.p = a; +} + +var sum$1 = adder(); + +function polygonContains(polygon, point) { + var lambda = point[0], + phi = point[1], + sinPhi = sin$1(phi), + normal = [sin$1(lambda), -cos$1(lambda), 0], + angle = 0, + winding = 0; + + sum$1.reset(); + + if (sinPhi === 1) phi = halfPi$1 + epsilon$2; + else if (sinPhi === -1) phi = -halfPi$1 - epsilon$2; + + for (var i = 0, n = polygon.length; i < n; ++i) { + if (!(m = (ring = polygon[i]).length)) continue; + var ring, + m, + point0 = ring[m - 1], + lambda0 = point0[0], + phi0 = point0[1] / 2 + quarterPi, + sinPhi0 = sin$1(phi0), + cosPhi0 = cos$1(phi0); + + for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) { + var point1 = ring[j], + lambda1 = point1[0], + phi1 = point1[1] / 2 + quarterPi, + sinPhi1 = sin$1(phi1), + cosPhi1 = cos$1(phi1), + delta = lambda1 - lambda0, + sign = delta >= 0 ? 1 : -1, + absDelta = sign * delta, + antimeridian = absDelta > pi$2, + k = sinPhi0 * sinPhi1; + + sum$1.add(atan2$1(k * sign * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta))); + angle += antimeridian ? delta + sign * tau$2 : delta; + + // Are the longitudes either side of the point’s meridian (lambda), + // and are the latitudes smaller than the parallel (phi)? + if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) { + var arc = cartesianCross(cartesian(point0), cartesian(point1)); + cartesianNormalizeInPlace(arc); + var intersection = cartesianCross(normal, arc); + cartesianNormalizeInPlace(intersection); + var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin$1(intersection[2]); + if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) { + winding += antimeridian ^ delta >= 0 ? 1 : -1; + } + } + } + } + + // First, determine whether the South pole is inside or outside: + // + // It is inside if: + // * the polygon winds around it in a clockwise direction. + // * the polygon does not (cumulatively) wind around it, but has a negative + // (counter-clockwise) area. + // + // Second, count the (signed) number of times a segment crosses a lambda + // from the point to the South pole. If it is zero, then the point is the + // same side as the South pole. + + return (angle < -epsilon$2 || angle < epsilon$2 && sum$1 < -epsilon$2) ^ (winding & 1); +} + +function ascending$9(a, b) { + return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; +} + +function bisector$8(compare) { + if (compare.length === 1) compare = ascendingComparator$8(compare); + return { + left: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) < 0) lo = mid + 1; + else hi = mid; + } + return lo; + }, + right: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) > 0) hi = mid; + else lo = mid + 1; + } + return lo; + } + }; +} + +function ascendingComparator$8(f) { + return function(d, x) { + return ascending$9(f(d), x); + }; +} + +var ascendingBisect$8 = bisector$8(ascending$9); + +function range$3(start, stop, step) { + start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step; + + var i = -1, + n = Math.max(0, Math.ceil((stop - start) / step)) | 0, + range = new Array(n); + + while (++i < n) { + range[i] = start + i * step; + } + + return range; +} + +function merge$1(arrays) { + var n = arrays.length, + m, + i = -1, + j = 0, + merged, + array; + + while (++i < n) j += arrays[i].length; + merged = new Array(j); + + while (--n >= 0) { + array = arrays[n]; + m = array.length; + while (--m >= 0) { + merged[--j] = array[m]; + } + } + + return merged; +} + +function clip$2(pointVisible, clipLine, interpolate, start) { + return function(sink) { + var line = clipLine(sink), + ringBuffer = clipBuffer(), + ringSink = clipLine(ringBuffer), + polygonStarted = false, + polygon, + segments, + ring; + + var clip = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: function() { + clip.point = pointRing; + clip.lineStart = ringStart; + clip.lineEnd = ringEnd; + segments = []; + polygon = []; + }, + polygonEnd: function() { + clip.point = point; + clip.lineStart = lineStart; + clip.lineEnd = lineEnd; + segments = merge$1(segments); + var startInside = polygonContains(polygon, start); + if (segments.length) { + if (!polygonStarted) sink.polygonStart(), polygonStarted = true; + clipRejoin(segments, compareIntersection, startInside, interpolate, sink); + } else if (startInside) { + if (!polygonStarted) sink.polygonStart(), polygonStarted = true; + sink.lineStart(); + interpolate(null, null, 1, sink); + sink.lineEnd(); + } + if (polygonStarted) sink.polygonEnd(), polygonStarted = false; + segments = polygon = null; + }, + sphere: function() { + sink.polygonStart(); + sink.lineStart(); + interpolate(null, null, 1, sink); + sink.lineEnd(); + sink.polygonEnd(); + } + }; + + function point(lambda, phi) { + if (pointVisible(lambda, phi)) sink.point(lambda, phi); + } + + function pointLine(lambda, phi) { + line.point(lambda, phi); + } + + function lineStart() { + clip.point = pointLine; + line.lineStart(); + } + + function lineEnd() { + clip.point = point; + line.lineEnd(); + } + + function pointRing(lambda, phi) { + ring.push([lambda, phi]); + ringSink.point(lambda, phi); + } + + function ringStart() { + ringSink.lineStart(); + ring = []; + } + + function ringEnd() { + pointRing(ring[0][0], ring[0][1]); + ringSink.lineEnd(); + + var clean = ringSink.clean(), + ringSegments = ringBuffer.result(), + i, n = ringSegments.length, m, + segment, + point; + + ring.pop(); + polygon.push(ring); + ring = null; + + if (!n) return; + + // No intersections. + if (clean & 1) { + segment = ringSegments[0]; + if ((m = segment.length - 1) > 0) { + if (!polygonStarted) sink.polygonStart(), polygonStarted = true; + sink.lineStart(); + for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]); + sink.lineEnd(); + } + return; + } + + // Rejoin connected segments. + // TODO reuse ringBuffer.rejoin()? + if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift())); + + segments.push(ringSegments.filter(validSegment)); + } + + return clip; + }; +} + +function validSegment(segment) { + return segment.length > 1; +} + +// Intersections are sorted along the clip edge. For both antimeridian cutting +// and circle clipping, the same comparison is used. +function compareIntersection(a, b) { + return ((a = a.x)[0] < 0 ? a[1] - halfPi$1 - epsilon$2 : halfPi$1 - a[1]) + - ((b = b.x)[0] < 0 ? b[1] - halfPi$1 - epsilon$2 : halfPi$1 - b[1]); +} + +var clipAntimeridian = clip$2( + function() { return true; }, + clipAntimeridianLine, + clipAntimeridianInterpolate, + [-pi$2, -halfPi$1] +); + +// Takes a line and cuts into visible segments. Return values: 0 - there were +// intersections or the line was empty; 1 - no intersections; 2 - there were +// intersections, and the first and last segments should be rejoined. +function clipAntimeridianLine(stream) { + var lambda0 = NaN, + phi0 = NaN, + sign0 = NaN, + clean; // no intersections + + return { + lineStart: function() { + stream.lineStart(); + clean = 1; + }, + point: function(lambda1, phi1) { + var sign1 = lambda1 > 0 ? pi$2 : -pi$2, + delta = abs$1(lambda1 - lambda0); + if (abs$1(delta - pi$2) < epsilon$2) { // line crosses a pole + stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi$1 : -halfPi$1); + stream.point(sign0, phi0); + stream.lineEnd(); + stream.lineStart(); + stream.point(sign1, phi0); + stream.point(lambda1, phi0); + clean = 0; + } else if (sign0 !== sign1 && delta >= pi$2) { // line crosses antimeridian + if (abs$1(lambda0 - sign0) < epsilon$2) lambda0 -= sign0 * epsilon$2; // handle degeneracies + if (abs$1(lambda1 - sign1) < epsilon$2) lambda1 -= sign1 * epsilon$2; + phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1); + stream.point(sign0, phi0); + stream.lineEnd(); + stream.lineStart(); + stream.point(sign1, phi0); + clean = 0; + } + stream.point(lambda0 = lambda1, phi0 = phi1); + sign0 = sign1; + }, + lineEnd: function() { + stream.lineEnd(); + lambda0 = phi0 = NaN; + }, + clean: function() { + return 2 - clean; // if intersections, rejoin first and last segments + } + }; +} + +function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) { + var cosPhi0, + cosPhi1, + sinLambda0Lambda1 = sin$1(lambda0 - lambda1); + return abs$1(sinLambda0Lambda1) > epsilon$2 + ? atan((sin$1(phi0) * (cosPhi1 = cos$1(phi1)) * sin$1(lambda1) + - sin$1(phi1) * (cosPhi0 = cos$1(phi0)) * sin$1(lambda0)) + / (cosPhi0 * cosPhi1 * sinLambda0Lambda1)) + : (phi0 + phi1) / 2; +} + +function clipAntimeridianInterpolate(from, to, direction, stream) { + var phi; + if (from == null) { + phi = direction * halfPi$1; + stream.point(-pi$2, phi); + stream.point(0, phi); + stream.point(pi$2, phi); + stream.point(pi$2, 0); + stream.point(pi$2, -phi); + stream.point(0, -phi); + stream.point(-pi$2, -phi); + stream.point(-pi$2, 0); + stream.point(-pi$2, phi); + } else if (abs$1(from[0] - to[0]) > epsilon$2) { + var lambda = from[0] < to[0] ? pi$2 : -pi$2; + phi = direction * lambda / 2; + stream.point(-lambda, phi); + stream.point(0, phi); + stream.point(lambda, phi); + } else { + stream.point(to[0], to[1]); + } +} + +function clipCircle(radius) { + var cr = cos$1(radius), + delta = 6 * radians, + smallRadius = cr > 0, + notHemisphere = abs$1(cr) > epsilon$2; // TODO optimise for this common case + + function interpolate(from, to, direction, stream) { + circleStream(stream, radius, delta, direction, from, to); + } + + function visible(lambda, phi) { + return cos$1(lambda) * cos$1(phi) > cr; + } + + // Takes a line and cuts into visible segments. Return values used for polygon + // clipping: 0 - there were intersections or the line was empty; 1 - no + // intersections 2 - there were intersections, and the first and last segments + // should be rejoined. + function clipLine(stream) { + var point0, // previous point + c0, // code for previous point + v0, // visibility of previous point + v00, // visibility of first point + clean; // no intersections + return { + lineStart: function() { + v00 = v0 = false; + clean = 1; + }, + point: function(lambda, phi) { + var point1 = [lambda, phi], + point2, + v = visible(lambda, phi), + c = smallRadius + ? v ? 0 : code(lambda, phi) + : v ? code(lambda + (lambda < 0 ? pi$2 : -pi$2), phi) : 0; + if (!point0 && (v00 = v0 = v)) stream.lineStart(); + // Handle degeneracies. + // TODO ignore if not clipping polygons. + if (v !== v0) { + point2 = intersect(point0, point1); + if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) { + point1[0] += epsilon$2; + point1[1] += epsilon$2; + v = visible(point1[0], point1[1]); + } + } + if (v !== v0) { + clean = 0; + if (v) { + // outside going in + stream.lineStart(); + point2 = intersect(point1, point0); + stream.point(point2[0], point2[1]); + } else { + // inside going out + point2 = intersect(point0, point1); + stream.point(point2[0], point2[1]); + stream.lineEnd(); + } + point0 = point2; + } else if (notHemisphere && point0 && smallRadius ^ v) { + var t; + // If the codes for two points are different, or are both zero, + // and there this segment intersects with the small circle. + if (!(c & c0) && (t = intersect(point1, point0, true))) { + clean = 0; + if (smallRadius) { + stream.lineStart(); + stream.point(t[0][0], t[0][1]); + stream.point(t[1][0], t[1][1]); + stream.lineEnd(); + } else { + stream.point(t[1][0], t[1][1]); + stream.lineEnd(); + stream.lineStart(); + stream.point(t[0][0], t[0][1]); + } + } + } + if (v && (!point0 || !pointEqual(point0, point1))) { + stream.point(point1[0], point1[1]); + } + point0 = point1, v0 = v, c0 = c; + }, + lineEnd: function() { + if (v0) stream.lineEnd(); + point0 = null; + }, + // Rejoin first and last segments if there were intersections and the first + // and last points were visible. + clean: function() { + return clean | ((v00 && v0) << 1); + } + }; + } + + // Intersects the great circle between a and b with the clip circle. + function intersect(a, b, two) { + var pa = cartesian(a), + pb = cartesian(b); + + // We have two planes, n1.p = d1 and n2.p = d2. + // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2). + var n1 = [1, 0, 0], // normal + n2 = cartesianCross(pa, pb), + n2n2 = cartesianDot(n2, n2), + n1n2 = n2[0], // cartesianDot(n1, n2), + determinant = n2n2 - n1n2 * n1n2; + + // Two polar points. + if (!determinant) return !two && a; + + var c1 = cr * n2n2 / determinant, + c2 = -cr * n1n2 / determinant, + n1xn2 = cartesianCross(n1, n2), + A = cartesianScale(n1, c1), + B = cartesianScale(n2, c2); + cartesianAddInPlace(A, B); + + // Solve |p(t)|^2 = 1. + var u = n1xn2, + w = cartesianDot(A, u), + uu = cartesianDot(u, u), + t2 = w * w - uu * (cartesianDot(A, A) - 1); + + if (t2 < 0) return; + + var t = sqrt$2(t2), + q = cartesianScale(u, (-w - t) / uu); + cartesianAddInPlace(q, A); + q = spherical(q); + + if (!two) return q; + + // Two intersection points. + var lambda0 = a[0], + lambda1 = b[0], + phi0 = a[1], + phi1 = b[1], + z; + + if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z; + + var delta = lambda1 - lambda0, + polar = abs$1(delta - pi$2) < epsilon$2, + meridian = polar || delta < epsilon$2; + + if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z; + + // Check that the first point is between a and b. + if (meridian + ? polar + ? phi0 + phi1 > 0 ^ q[1] < (abs$1(q[0] - lambda0) < epsilon$2 ? phi0 : phi1) + : phi0 <= q[1] && q[1] <= phi1 + : delta > pi$2 ^ (lambda0 <= q[0] && q[0] <= lambda1)) { + var q1 = cartesianScale(u, (-w + t) / uu); + cartesianAddInPlace(q1, A); + return [q, spherical(q1)]; + } + } + + // Generates a 4-bit vector representing the location of a point relative to + // the small circle's bounding box. + function code(lambda, phi) { + var r = smallRadius ? radius : pi$2 - radius, + code = 0; + if (lambda < -r) code |= 1; // left + else if (lambda > r) code |= 2; // right + if (phi < -r) code |= 4; // below + else if (phi > r) code |= 8; // above + return code; + } + + return clip$2(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi$2, radius - pi$2]); +} + +function clipLine(a, b, x0, y0, x1, y1) { + var ax = a[0], + ay = a[1], + bx = b[0], + by = b[1], + t0 = 0, + t1 = 1, + dx = bx - ax, + dy = by - ay, + r; + + r = x0 - ax; + if (!dx && r > 0) return; + r /= dx; + if (dx < 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } else if (dx > 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } + + r = x1 - ax; + if (!dx && r < 0) return; + r /= dx; + if (dx < 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } else if (dx > 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } + + r = y0 - ay; + if (!dy && r > 0) return; + r /= dy; + if (dy < 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } else if (dy > 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } + + r = y1 - ay; + if (!dy && r < 0) return; + r /= dy; + if (dy < 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } else if (dy > 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } + + if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy; + if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy; + return true; +} + +var clipMax = 1e9, clipMin = -clipMax; + +// TODO Use d3-polygon’s polygonContains here for the ring check? +// TODO Eliminate duplicate buffering in clipBuffer and polygon.push? + +function clipRectangle(x0, y0, x1, y1) { + + function visible(x, y) { + return x0 <= x && x <= x1 && y0 <= y && y <= y1; + } + + function interpolate(from, to, direction, stream) { + var a = 0, a1 = 0; + if (from == null + || (a = corner(from, direction)) !== (a1 = corner(to, direction)) + || comparePoint(from, to) < 0 ^ direction > 0) { + do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0); + while ((a = (a + direction + 4) % 4) !== a1); + } else { + stream.point(to[0], to[1]); + } + } + + function corner(p, direction) { + return abs$1(p[0] - x0) < epsilon$2 ? direction > 0 ? 0 : 3 + : abs$1(p[0] - x1) < epsilon$2 ? direction > 0 ? 2 : 1 + : abs$1(p[1] - y0) < epsilon$2 ? direction > 0 ? 1 : 0 + : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon + } + + function compareIntersection(a, b) { + return comparePoint(a.x, b.x); + } + + function comparePoint(a, b) { + var ca = corner(a, 1), + cb = corner(b, 1); + return ca !== cb ? ca - cb + : ca === 0 ? b[1] - a[1] + : ca === 1 ? a[0] - b[0] + : ca === 2 ? a[1] - b[1] + : b[0] - a[0]; + } + + return function(stream) { + var activeStream = stream, + bufferStream = clipBuffer(), + segments, + polygon, + ring, + x__, y__, v__, // first point + x_, y_, v_, // previous point + first, + clean; + + var clipStream = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: polygonStart, + polygonEnd: polygonEnd + }; + + function point(x, y) { + if (visible(x, y)) activeStream.point(x, y); + } + + function polygonInside() { + var winding = 0; + + for (var i = 0, n = polygon.length; i < n; ++i) { + for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) { + a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1]; + if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; } + else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; } + } + } + + return winding; + } + + // Buffer geometry within a polygon and then clip it en masse. + function polygonStart() { + activeStream = bufferStream, segments = [], polygon = [], clean = true; + } + + function polygonEnd() { + var startInside = polygonInside(), + cleanInside = clean && startInside, + visible = (segments = merge$1(segments)).length; + if (cleanInside || visible) { + stream.polygonStart(); + if (cleanInside) { + stream.lineStart(); + interpolate(null, null, 1, stream); + stream.lineEnd(); + } + if (visible) { + clipRejoin(segments, compareIntersection, startInside, interpolate, stream); + } + stream.polygonEnd(); + } + activeStream = stream, segments = polygon = ring = null; + } + + function lineStart() { + clipStream.point = linePoint; + if (polygon) polygon.push(ring = []); + first = true; + v_ = false; + x_ = y_ = NaN; + } + + // TODO rather than special-case polygons, simply handle them separately. + // Ideally, coincident intersection points should be jittered to avoid + // clipping issues. + function lineEnd() { + if (segments) { + linePoint(x__, y__); + if (v__ && v_) bufferStream.rejoin(); + segments.push(bufferStream.result()); + } + clipStream.point = point; + if (v_) activeStream.lineEnd(); + } + + function linePoint(x, y) { + var v = visible(x, y); + if (polygon) ring.push([x, y]); + if (first) { + x__ = x, y__ = y, v__ = v; + first = false; + if (v) { + activeStream.lineStart(); + activeStream.point(x, y); + } + } else { + if (v && v_) activeStream.point(x, y); + else { + var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))], + b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))]; + if (clipLine(a, b, x0, y0, x1, y1)) { + if (!v_) { + activeStream.lineStart(); + activeStream.point(a[0], a[1]); + } + activeStream.point(b[0], b[1]); + if (!v) activeStream.lineEnd(); + clean = false; + } else if (v) { + activeStream.lineStart(); + activeStream.point(x, y); + clean = false; + } + } + } + x_ = x, y_ = y, v_ = v; + } + + return clipStream; + }; +} + +var lengthSum = adder(); + +function graticuleX(y0, y1, dy) { + var y = range$3(y0, y1 - epsilon$2, dy).concat(y1); + return function(x) { return y.map(function(y) { return [x, y]; }); }; +} + +function graticuleY(x0, x1, dx) { + var x = range$3(x0, x1 - epsilon$2, dx).concat(x1); + return function(y) { return x.map(function(x) { return [x, y]; }); }; +} + +function graticule() { + var x1, x0, X1, X0, + y1, y0, Y1, Y0, + dx = 10, dy = dx, DX = 90, DY = 360, + x, y, X, Y, + precision = 2.5; + + function graticule() { + return {type: "MultiLineString", coordinates: lines()}; + } + + function lines() { + return range$3(ceil(X0 / DX) * DX, X1, DX).map(X) + .concat(range$3(ceil(Y0 / DY) * DY, Y1, DY).map(Y)) + .concat(range$3(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs$1(x % DX) > epsilon$2; }).map(x)) + .concat(range$3(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs$1(y % DY) > epsilon$2; }).map(y)); + } + + graticule.lines = function() { + return lines().map(function(coordinates) { return {type: "LineString", coordinates: coordinates}; }); + }; + + graticule.outline = function() { + return { + type: "Polygon", + coordinates: [ + X(X0).concat( + Y(Y1).slice(1), + X(X1).reverse().slice(1), + Y(Y0).reverse().slice(1)) + ] + }; + }; + + graticule.extent = function(_) { + if (!arguments.length) return graticule.extentMinor(); + return graticule.extentMajor(_).extentMinor(_); + }; + + graticule.extentMajor = function(_) { + if (!arguments.length) return [[X0, Y0], [X1, Y1]]; + X0 = +_[0][0], X1 = +_[1][0]; + Y0 = +_[0][1], Y1 = +_[1][1]; + if (X0 > X1) _ = X0, X0 = X1, X1 = _; + if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _; + return graticule.precision(precision); + }; + + graticule.extentMinor = function(_) { + if (!arguments.length) return [[x0, y0], [x1, y1]]; + x0 = +_[0][0], x1 = +_[1][0]; + y0 = +_[0][1], y1 = +_[1][1]; + if (x0 > x1) _ = x0, x0 = x1, x1 = _; + if (y0 > y1) _ = y0, y0 = y1, y1 = _; + return graticule.precision(precision); + }; + + graticule.step = function(_) { + if (!arguments.length) return graticule.stepMinor(); + return graticule.stepMajor(_).stepMinor(_); + }; + + graticule.stepMajor = function(_) { + if (!arguments.length) return [DX, DY]; + DX = +_[0], DY = +_[1]; + return graticule; + }; + + graticule.stepMinor = function(_) { + if (!arguments.length) return [dx, dy]; + dx = +_[0], dy = +_[1]; + return graticule; + }; + + graticule.precision = function(_) { + if (!arguments.length) return precision; + precision = +_; + x = graticuleX(y0, y1, 90); + y = graticuleY(x0, x1, precision); + X = graticuleX(Y0, Y1, 90); + Y = graticuleY(X0, X1, precision); + return graticule; + }; + + return graticule + .extentMajor([[-180, -90 + epsilon$2], [180, 90 - epsilon$2]]) + .extentMinor([[-180, -80 - epsilon$2], [180, 80 + epsilon$2]]); +} + +function identity$6(x) { + return x; +} + +var areaSum$1 = adder(), + areaRingSum$1 = adder(), + x00, + y00, + x0$1, + y0$1; + +var areaStream$1 = { + point: noop$3, + lineStart: noop$3, + lineEnd: noop$3, + polygonStart: function() { + areaStream$1.lineStart = areaRingStart$1; + areaStream$1.lineEnd = areaRingEnd$1; + }, + polygonEnd: function() { + areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop$3; + areaSum$1.add(abs$1(areaRingSum$1)); + areaRingSum$1.reset(); + }, + result: function() { + var area = areaSum$1 / 2; + areaSum$1.reset(); + return area; + } +}; + +function areaRingStart$1() { + areaStream$1.point = areaPointFirst$1; +} + +function areaPointFirst$1(x, y) { + areaStream$1.point = areaPoint$1; + x00 = x0$1 = x, y00 = y0$1 = y; +} + +function areaPoint$1(x, y) { + areaRingSum$1.add(y0$1 * x - x0$1 * y); + x0$1 = x, y0$1 = y; +} + +function areaRingEnd$1() { + areaPoint$1(x00, y00); +} + +var x0$2 = Infinity, + y0$2 = x0$2, + x1 = -x0$2, + y1 = x1; + +var boundsStream$1 = { + point: boundsPoint$1, + lineStart: noop$3, + lineEnd: noop$3, + polygonStart: noop$3, + polygonEnd: noop$3, + result: function() { + var bounds = [[x0$2, y0$2], [x1, y1]]; + x1 = y1 = -(y0$2 = x0$2 = Infinity); + return bounds; + } +}; + +function boundsPoint$1(x, y) { + if (x < x0$2) x0$2 = x; + if (x > x1) x1 = x; + if (y < y0$2) y0$2 = y; + if (y > y1) y1 = y; +} + +// TODO Enforce positive area for exterior, negative area for interior? + +var X0$1 = 0, + Y0$1 = 0, + Z0$1 = 0, + X1$1 = 0, + Y1$1 = 0, + Z1$1 = 0, + X2$1 = 0, + Y2$1 = 0, + Z2$1 = 0, + x00$1, + y00$1, + x0$3, + y0$3; + +var centroidStream$1 = { + point: centroidPoint$1, + lineStart: centroidLineStart$1, + lineEnd: centroidLineEnd$1, + polygonStart: function() { + centroidStream$1.lineStart = centroidRingStart$1; + centroidStream$1.lineEnd = centroidRingEnd$1; + }, + polygonEnd: function() { + centroidStream$1.point = centroidPoint$1; + centroidStream$1.lineStart = centroidLineStart$1; + centroidStream$1.lineEnd = centroidLineEnd$1; + }, + result: function() { + var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1] + : Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1] + : Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1] + : [NaN, NaN]; + X0$1 = Y0$1 = Z0$1 = + X1$1 = Y1$1 = Z1$1 = + X2$1 = Y2$1 = Z2$1 = 0; + return centroid; + } +}; + +function centroidPoint$1(x, y) { + X0$1 += x; + Y0$1 += y; + ++Z0$1; +} + +function centroidLineStart$1() { + centroidStream$1.point = centroidPointFirstLine; +} + +function centroidPointFirstLine(x, y) { + centroidStream$1.point = centroidPointLine; + centroidPoint$1(x0$3 = x, y0$3 = y); +} + +function centroidPointLine(x, y) { + var dx = x - x0$3, dy = y - y0$3, z = sqrt$2(dx * dx + dy * dy); + X1$1 += z * (x0$3 + x) / 2; + Y1$1 += z * (y0$3 + y) / 2; + Z1$1 += z; + centroidPoint$1(x0$3 = x, y0$3 = y); +} + +function centroidLineEnd$1() { + centroidStream$1.point = centroidPoint$1; +} + +function centroidRingStart$1() { + centroidStream$1.point = centroidPointFirstRing; +} + +function centroidRingEnd$1() { + centroidPointRing(x00$1, y00$1); +} + +function centroidPointFirstRing(x, y) { + centroidStream$1.point = centroidPointRing; + centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y); +} + +function centroidPointRing(x, y) { + var dx = x - x0$3, + dy = y - y0$3, + z = sqrt$2(dx * dx + dy * dy); + + X1$1 += z * (x0$3 + x) / 2; + Y1$1 += z * (y0$3 + y) / 2; + Z1$1 += z; + + z = y0$3 * x - x0$3 * y; + X2$1 += z * (x0$3 + x); + Y2$1 += z * (y0$3 + y); + Z2$1 += z * 3; + centroidPoint$1(x0$3 = x, y0$3 = y); +} + +function PathContext(context) { + this._context = context; +} + +PathContext.prototype = { + _radius: 4.5, + pointRadius: function(_) { + return this._radius = _, this; + }, + polygonStart: function() { + this._line = 0; + }, + polygonEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._point = 0; + }, + lineEnd: function() { + if (this._line === 0) this._context.closePath(); + this._point = NaN; + }, + point: function(x, y) { + switch (this._point) { + case 0: { + this._context.moveTo(x, y); + this._point = 1; + break; + } + case 1: { + this._context.lineTo(x, y); + break; + } + default: { + this._context.moveTo(x + this._radius, y); + this._context.arc(x, y, this._radius, 0, tau$2); + break; + } + } + }, + result: noop$3 +}; + +var lengthSum$1 = adder(), + lengthRing, + x00$2, + y00$2, + x0$4, + y0$4; + +var lengthStream = { + point: noop$3, + lineStart: function() { + lengthStream.point = lengthPointFirst; + }, + lineEnd: function() { + if (lengthRing) lengthPoint(x00$2, y00$2); + lengthStream.point = noop$3; + }, + polygonStart: function() { + lengthRing = true; + }, + polygonEnd: function() { + lengthRing = null; + }, + result: function() { + var length = +lengthSum$1; + lengthSum$1.reset(); + return length; + } +}; + +function lengthPointFirst(x, y) { + lengthStream.point = lengthPoint; + x00$2 = x0$4 = x, y00$2 = y0$4 = y; +} + +function lengthPoint(x, y) { + x0$4 -= x, y0$4 -= y; + lengthSum$1.add(sqrt$2(x0$4 * x0$4 + y0$4 * y0$4)); + x0$4 = x, y0$4 = y; +} + +function PathString() { + this._string = []; +} + +PathString.prototype = { + _radius: 4.5, + _circle: circle$1(4.5), + pointRadius: function(_) { + if ((_ = +_) !== this._radius) this._radius = _, this._circle = null; + return this; + }, + polygonStart: function() { + this._line = 0; + }, + polygonEnd: function() { + this._line = NaN; + }, + lineStart: function() { + this._point = 0; + }, + lineEnd: function() { + if (this._line === 0) this._string.push("Z"); + this._point = NaN; + }, + point: function(x, y) { + switch (this._point) { + case 0: { + this._string.push("M", x, ",", y); + this._point = 1; + break; + } + case 1: { + this._string.push("L", x, ",", y); + break; + } + default: { + if (this._circle == null) this._circle = circle$1(this._radius); + this._string.push("M", x, ",", y, this._circle); + break; + } + } + }, + result: function() { + if (this._string.length) { + var result = this._string.join(""); + this._string = []; + return result; + } else { + return null; + } + } +}; + +function circle$1(radius) { + return "m0," + radius + + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius + + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius + + "z"; +} + +function geoPath(projection, context) { + var pointRadius = 4.5, + projectionStream, + contextStream; + + function path(object) { + if (object) { + if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments)); + geoStream(object, projectionStream(contextStream)); + } + return contextStream.result(); + } + + path.area = function(object) { + geoStream(object, projectionStream(areaStream$1)); + return areaStream$1.result(); + }; + + path.measure = function(object) { + geoStream(object, projectionStream(lengthStream)); + return lengthStream.result(); + }; + + path.bounds = function(object) { + geoStream(object, projectionStream(boundsStream$1)); + return boundsStream$1.result(); + }; + + path.centroid = function(object) { + geoStream(object, projectionStream(centroidStream$1)); + return centroidStream$1.result(); + }; + + path.projection = function(_) { + return arguments.length ? (projectionStream = _ == null ? (projection = null, identity$6) : (projection = _).stream, path) : projection; + }; + + path.context = function(_) { + if (!arguments.length) return context; + contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _); + if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius); + return path; + }; + + path.pointRadius = function(_) { + if (!arguments.length) return pointRadius; + pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_); + return path; + }; + + return path.projection(projection).context(context); +} + +function transformer$3(methods) { + return function(stream) { + var s = new TransformStream; + for (var key in methods) s[key] = methods[key]; + s.stream = stream; + return s; + }; +} + +function TransformStream() {} + +TransformStream.prototype = { + constructor: TransformStream, + point: function(x, y) { this.stream.point(x, y); }, + sphere: function() { this.stream.sphere(); }, + lineStart: function() { this.stream.lineStart(); }, + lineEnd: function() { this.stream.lineEnd(); }, + polygonStart: function() { this.stream.polygonStart(); }, + polygonEnd: function() { this.stream.polygonEnd(); } +}; + +function fit(projection, fitBounds, object) { + var clip = projection.clipExtent && projection.clipExtent(); + projection.scale(150).translate([0, 0]); + if (clip != null) projection.clipExtent(null); + geoStream(object, projection.stream(boundsStream$1)); + fitBounds(boundsStream$1.result()); + if (clip != null) projection.clipExtent(clip); + return projection; +} + +function fitExtent(projection, extent, object) { + return fit(projection, function(b) { + var w = extent[1][0] - extent[0][0], + h = extent[1][1] - extent[0][1], + k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])), + x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2, + y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2; + projection.scale(150 * k).translate([x, y]); + }, object); +} + +function fitSize(projection, size, object) { + return fitExtent(projection, [[0, 0], size], object); +} + +function fitWidth(projection, width, object) { + return fit(projection, function(b) { + var w = +width, + k = w / (b[1][0] - b[0][0]), + x = (w - k * (b[1][0] + b[0][0])) / 2, + y = -k * b[0][1]; + projection.scale(150 * k).translate([x, y]); + }, object); +} + +function fitHeight(projection, height, object) { + return fit(projection, function(b) { + var h = +height, + k = h / (b[1][1] - b[0][1]), + x = -k * b[0][0], + y = (h - k * (b[1][1] + b[0][1])) / 2; + projection.scale(150 * k).translate([x, y]); + }, object); +} + +var maxDepth = 16, // maximum depth of subdivision + cosMinDistance = cos$1(30 * radians); // cos(minimum angular distance) + +function resample(project, delta2) { + return +delta2 ? resample$1(project, delta2) : resampleNone(project); +} + +function resampleNone(project) { + return transformer$3({ + point: function(x, y) { + x = project(x, y); + this.stream.point(x[0], x[1]); + } + }); +} + +function resample$1(project, delta2) { + + function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) { + var dx = x1 - x0, + dy = y1 - y0, + d2 = dx * dx + dy * dy; + if (d2 > 4 * delta2 && depth--) { + var a = a0 + a1, + b = b0 + b1, + c = c0 + c1, + m = sqrt$2(a * a + b * b + c * c), + phi2 = asin$1(c /= m), + lambda2 = abs$1(abs$1(c) - 1) < epsilon$2 || abs$1(lambda0 - lambda1) < epsilon$2 ? (lambda0 + lambda1) / 2 : atan2$1(b, a), + p = project(lambda2, phi2), + x2 = p[0], + y2 = p[1], + dx2 = x2 - x0, + dy2 = y2 - y0, + dz = dy * dx2 - dx * dy2; + if (dz * dz / d2 > delta2 // perpendicular projected distance + || abs$1((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end + || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance + resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream); + stream.point(x2, y2); + resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream); + } + } + } + return function(stream) { + var lambda00, x00, y00, a00, b00, c00, // first point + lambda0, x0, y0, a0, b0, c0; // previous point + + var resampleStream = { + point: point, + lineStart: lineStart, + lineEnd: lineEnd, + polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; }, + polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; } + }; + + function point(x, y) { + x = project(x, y); + stream.point(x[0], x[1]); + } + + function lineStart() { + x0 = NaN; + resampleStream.point = linePoint; + stream.lineStart(); + } + + function linePoint(lambda, phi) { + var c = cartesian([lambda, phi]), p = project(lambda, phi); + resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream); + stream.point(x0, y0); + } + + function lineEnd() { + resampleStream.point = point; + stream.lineEnd(); + } + + function ringStart() { + lineStart(); + resampleStream.point = ringPoint; + resampleStream.lineEnd = ringEnd; + } + + function ringPoint(lambda, phi) { + linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0; + resampleStream.point = linePoint; + } + + function ringEnd() { + resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream); + resampleStream.lineEnd = lineEnd; + lineEnd(); + } + + return resampleStream; + }; +} + +var transformRadians = transformer$3({ + point: function(x, y) { + this.stream.point(x * radians, y * radians); + } +}); + +function transformRotate(rotate) { + return transformer$3({ + point: function(x, y) { + var r = rotate(x, y); + return this.stream.point(r[0], r[1]); + } + }); +} + +function scaleTranslate(k, dx, dy) { + function transform(x, y) { + return [dx + k * x, dy - k * y]; + } + transform.invert = function(x, y) { + return [(x - dx) / k, (dy - y) / k]; + }; + return transform; +} + +function scaleTranslateRotate(k, dx, dy, alpha) { + var cosAlpha = cos$1(alpha), + sinAlpha = sin$1(alpha), + a = cosAlpha * k, + b = sinAlpha * k, + ai = cosAlpha / k, + bi = sinAlpha / k, + ci = (sinAlpha * dy - cosAlpha * dx) / k, + fi = (sinAlpha * dx + cosAlpha * dy) / k; + function transform(x, y) { + return [a * x - b * y + dx, dy - b * x - a * y]; + } + transform.invert = function(x, y) { + return [ai * x - bi * y + ci, fi - bi * x - ai * y]; + }; + return transform; +} + +function projection(project) { + return projectionMutator(function() { return project; })(); +} + +function projectionMutator(projectAt) { + var project, + k = 150, // scale + x = 480, y = 250, // translate + lambda = 0, phi = 0, // center + deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate + alpha = 0, // post-rotate + theta = null, preclip = clipAntimeridian, // pre-clip angle + x0 = null, y0, x1, y1, postclip = identity$6, // post-clip extent + delta2 = 0.5, // precision + projectResample, + projectTransform, + projectRotateTransform, + cache, + cacheStream; + + function projection(point) { + return projectRotateTransform(point[0] * radians, point[1] * radians); + } + + function invert(point) { + point = projectRotateTransform.invert(point[0], point[1]); + return point && [point[0] * degrees$1, point[1] * degrees$1]; + } + + projection.stream = function(stream) { + return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream))))); + }; + + projection.preclip = function(_) { + return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip; + }; + + projection.postclip = function(_) { + return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip; + }; + + projection.clipAngle = function(_) { + return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees$1; + }; + + projection.clipExtent = function(_) { + return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$6) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]]; + }; + + projection.scale = function(_) { + return arguments.length ? (k = +_, recenter()) : k; + }; + + projection.translate = function(_) { + return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y]; + }; + + projection.center = function(_) { + return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees$1, phi * degrees$1]; + }; + + projection.rotate = function(_) { + return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees$1, deltaPhi * degrees$1, deltaGamma * degrees$1]; + }; + + projection.angle = function(_) { + return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees$1; + }; + + projection.precision = function(_) { + return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt$2(delta2); + }; + + projection.fitExtent = function(extent, object) { + return fitExtent(projection, extent, object); + }; + + projection.fitSize = function(size, object) { + return fitSize(projection, size, object); + }; + + projection.fitWidth = function(width, object) { + return fitWidth(projection, width, object); + }; + + projection.fitHeight = function(height, object) { + return fitHeight(projection, height, object); + }; + + function recenter() { + var center = scaleTranslateRotate(k, 0, 0, alpha).apply(null, project(lambda, phi)), + transform = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], alpha); + rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma); + projectTransform = compose(project, transform); + projectRotateTransform = compose(rotate, projectTransform); + projectResample = resample(projectTransform, delta2); + return reset(); + } + + function reset() { + cache = cacheStream = null; + return projection; + } + + return function() { + project = projectAt.apply(this, arguments); + projection.invert = project.invert && invert; + return recenter(); + }; +} + +function conicProjection(projectAt) { + var phi0 = 0, + phi1 = pi$2 / 3, + m = projectionMutator(projectAt), + p = m(phi0, phi1); + + p.parallels = function(_) { + return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees$1, phi1 * degrees$1]; + }; + + return p; +} + +function cylindricalEqualAreaRaw(phi0) { + var cosPhi0 = cos$1(phi0); + + function forward(lambda, phi) { + return [lambda * cosPhi0, sin$1(phi) / cosPhi0]; + } + + forward.invert = function(x, y) { + return [x / cosPhi0, asin$1(y * cosPhi0)]; + }; + + return forward; +} + +function conicEqualAreaRaw(y0, y1) { + var sy0 = sin$1(y0), n = (sy0 + sin$1(y1)) / 2; + + // Are the parallels symmetrical around the Equator? + if (abs$1(n) < epsilon$2) return cylindricalEqualAreaRaw(y0); + + var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt$2(c) / n; + + function project(x, y) { + var r = sqrt$2(c - 2 * n * sin$1(y)) / n; + return [r * sin$1(x *= n), r0 - r * cos$1(x)]; + } + + project.invert = function(x, y) { + var r0y = r0 - y; + return [atan2$1(x, abs$1(r0y)) / n * sign$1(r0y), asin$1((c - (x * x + r0y * r0y) * n * n) / (2 * n))]; + }; + + return project; +} + +function geoConicEqualArea() { + return conicProjection(conicEqualAreaRaw) + .scale(155.424) + .center([0, 33.6442]); +} + +function geoAlbers() { + return geoConicEqualArea() + .parallels([29.5, 45.5]) + .scale(1070) + .translate([480, 250]) + .rotate([96, 0]) + .center([-0.6, 38.7]); +} + +// The projections must have mutually exclusive clip regions on the sphere, +// as this will avoid emitting interleaving lines and polygons. +function multiplex(streams) { + var n = streams.length; + return { + point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); }, + sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); }, + lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); }, + lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); }, + polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); }, + polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); } + }; +} + +// A composite projection for the United States, configured by default for +// 960×500. The projection also works quite well at 960×600 if you change the +// scale to 1285 and adjust the translate accordingly. The set of standard +// parallels for each region comes from USGS, which is published here: +// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers +function geoAlbersUsa() { + var cache, + cacheStream, + lower48 = geoAlbers(), lower48Point, + alaska = geoConicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338 + hawaii = geoConicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007 + point, pointStream = {point: function(x, y) { point = [x, y]; }}; + + function albersUsa(coordinates) { + var x = coordinates[0], y = coordinates[1]; + return point = null, + (lower48Point.point(x, y), point) + || (alaskaPoint.point(x, y), point) + || (hawaiiPoint.point(x, y), point); + } + + albersUsa.invert = function(coordinates) { + var k = lower48.scale(), + t = lower48.translate(), + x = (coordinates[0] - t[0]) / k, + y = (coordinates[1] - t[1]) / k; + return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska + : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii + : lower48).invert(coordinates); + }; + + albersUsa.stream = function(stream) { + return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]); + }; + + albersUsa.precision = function(_) { + if (!arguments.length) return lower48.precision(); + lower48.precision(_), alaska.precision(_), hawaii.precision(_); + return reset(); + }; + + albersUsa.scale = function(_) { + if (!arguments.length) return lower48.scale(); + lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_); + return albersUsa.translate(lower48.translate()); + }; + + albersUsa.translate = function(_) { + if (!arguments.length) return lower48.translate(); + var k = lower48.scale(), x = +_[0], y = +_[1]; + + lower48Point = lower48 + .translate(_) + .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]]) + .stream(pointStream); + + alaskaPoint = alaska + .translate([x - 0.307 * k, y + 0.201 * k]) + .clipExtent([[x - 0.425 * k + epsilon$2, y + 0.120 * k + epsilon$2], [x - 0.214 * k - epsilon$2, y + 0.234 * k - epsilon$2]]) + .stream(pointStream); + + hawaiiPoint = hawaii + .translate([x - 0.205 * k, y + 0.212 * k]) + .clipExtent([[x - 0.214 * k + epsilon$2, y + 0.166 * k + epsilon$2], [x - 0.115 * k - epsilon$2, y + 0.234 * k - epsilon$2]]) + .stream(pointStream); + + return reset(); + }; + + albersUsa.fitExtent = function(extent, object) { + return fitExtent(albersUsa, extent, object); + }; + + albersUsa.fitSize = function(size, object) { + return fitSize(albersUsa, size, object); + }; + + albersUsa.fitWidth = function(width, object) { + return fitWidth(albersUsa, width, object); + }; + + albersUsa.fitHeight = function(height, object) { + return fitHeight(albersUsa, height, object); + }; + + function reset() { + cache = cacheStream = null; + return albersUsa; + } + + return albersUsa.scale(1070); +} + +function azimuthalRaw(scale) { + return function(x, y) { + var cx = cos$1(x), + cy = cos$1(y), + k = scale(cx * cy); + return [ + k * cy * sin$1(x), + k * sin$1(y) + ]; + } +} + +function azimuthalInvert(angle) { + return function(x, y) { + var z = sqrt$2(x * x + y * y), + c = angle(z), + sc = sin$1(c), + cc = cos$1(c); + return [ + atan2$1(x * sc, z * cc), + asin$1(z && y * sc / z) + ]; + } +} + +var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) { + return sqrt$2(2 / (1 + cxcy)); +}); + +azimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) { + return 2 * asin$1(z / 2); +}); + +function geoAzimuthalEqualArea() { + return projection(azimuthalEqualAreaRaw) + .scale(124.75) + .clipAngle(180 - 1e-3); +} + +var azimuthalEquidistantRaw = azimuthalRaw(function(c) { + return (c = acos$1(c)) && c / sin$1(c); +}); + +azimuthalEquidistantRaw.invert = azimuthalInvert(function(z) { + return z; +}); + +function geoAzimuthalEquidistant() { + return projection(azimuthalEquidistantRaw) + .scale(79.4188) + .clipAngle(180 - 1e-3); +} + +function mercatorRaw(lambda, phi) { + return [lambda, log$3(tan((halfPi$1 + phi) / 2))]; +} + +mercatorRaw.invert = function(x, y) { + return [x, 2 * atan(exp$1(y)) - halfPi$1]; +}; + +function geoMercator() { + return mercatorProjection(mercatorRaw) + .scale(961 / tau$2); +} + +function mercatorProjection(project) { + var m = projection(project), + center = m.center, + scale = m.scale, + translate = m.translate, + clipExtent = m.clipExtent, + x0 = null, y0, x1, y1; // clip extent + + m.scale = function(_) { + return arguments.length ? (scale(_), reclip()) : scale(); + }; + + m.translate = function(_) { + return arguments.length ? (translate(_), reclip()) : translate(); + }; + + m.center = function(_) { + return arguments.length ? (center(_), reclip()) : center(); + }; + + m.clipExtent = function(_) { + return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]]; + }; + + function reclip() { + var k = pi$2 * scale(), + t = m(rotation(m.rotate()).invert([0, 0])); + return clipExtent(x0 == null + ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw + ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]] + : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]); + } + + return reclip(); +} + +function tany(y) { + return tan((halfPi$1 + y) / 2); +} + +function conicConformalRaw(y0, y1) { + var cy0 = cos$1(y0), + n = y0 === y1 ? sin$1(y0) : log$3(cy0 / cos$1(y1)) / log$3(tany(y1) / tany(y0)), + f = cy0 * pow$2(tany(y0), n) / n; + + if (!n) return mercatorRaw; + + function project(x, y) { + if (f > 0) { if (y < -halfPi$1 + epsilon$2) y = -halfPi$1 + epsilon$2; } + else { if (y > halfPi$1 - epsilon$2) y = halfPi$1 - epsilon$2; } + var r = f / pow$2(tany(y), n); + return [r * sin$1(n * x), f - r * cos$1(n * x)]; + } + + project.invert = function(x, y) { + var fy = f - y, r = sign$1(n) * sqrt$2(x * x + fy * fy); + return [atan2$1(x, abs$1(fy)) / n * sign$1(fy), 2 * atan(pow$2(f / r, 1 / n)) - halfPi$1]; + }; + + return project; +} + +function geoConicConformal() { + return conicProjection(conicConformalRaw) + .scale(109.5) + .parallels([30, 30]); +} + +function equirectangularRaw(lambda, phi) { + return [lambda, phi]; +} + +equirectangularRaw.invert = equirectangularRaw; + +function geoEquirectangular() { + return projection(equirectangularRaw) + .scale(152.63); +} + +function conicEquidistantRaw(y0, y1) { + var cy0 = cos$1(y0), + n = y0 === y1 ? sin$1(y0) : (cy0 - cos$1(y1)) / (y1 - y0), + g = cy0 / n + y0; + + if (abs$1(n) < epsilon$2) return equirectangularRaw; + + function project(x, y) { + var gy = g - y, nx = n * x; + return [gy * sin$1(nx), g - gy * cos$1(nx)]; + } + + project.invert = function(x, y) { + var gy = g - y; + return [atan2$1(x, abs$1(gy)) / n * sign$1(gy), g - sign$1(n) * sqrt$2(x * x + gy * gy)]; + }; + + return project; +} + +function geoConicEquidistant() { + return conicProjection(conicEquidistantRaw) + .scale(131.154) + .center([0, 13.9389]); +} + +function gnomonicRaw(x, y) { + var cy = cos$1(y), k = cos$1(x) * cy; + return [cy * sin$1(x) / k, sin$1(y) / k]; +} + +gnomonicRaw.invert = azimuthalInvert(atan); + +function geoGnomonic() { + return projection(gnomonicRaw) + .scale(144.049) + .clipAngle(60); +} + +function scaleTranslate$1(kx, ky, tx, ty) { + return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? identity$6 : transformer$3({ + point: function(x, y) { + this.stream.point(x * kx + tx, y * ky + ty); + } + }); +} + +function geoIdentity() { + var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform = identity$6, // scale, translate and reflect + x0 = null, y0, x1, y1, // clip extent + postclip = identity$6, + cache, + cacheStream, + projection; + + function reset() { + cache = cacheStream = null; + return projection; + } + + return projection = { + stream: function(stream) { + return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream)); + }, + postclip: function(_) { + return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip; + }, + clipExtent: function(_) { + return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$6) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]]; + }, + scale: function(_) { + return arguments.length ? (transform = scaleTranslate$1((k = +_) * sx, k * sy, tx, ty), reset()) : k; + }, + translate: function(_) { + return arguments.length ? (transform = scaleTranslate$1(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty]; + }, + reflectX: function(_) { + return arguments.length ? (transform = scaleTranslate$1(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0; + }, + reflectY: function(_) { + return arguments.length ? (transform = scaleTranslate$1(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0; + }, + fitExtent: function(extent, object) { + return fitExtent(projection, extent, object); + }, + fitSize: function(size, object) { + return fitSize(projection, size, object); + }, + fitWidth: function(width, object) { + return fitWidth(projection, width, object); + }, + fitHeight: function(height, object) { + return fitHeight(projection, height, object); + } + }; +} + +function naturalEarth1Raw(lambda, phi) { + var phi2 = phi * phi, phi4 = phi2 * phi2; + return [ + lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))), + phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) + ]; +} + +naturalEarth1Raw.invert = function(x, y) { + var phi = y, i = 25, delta; + do { + var phi2 = phi * phi, phi4 = phi2 * phi2; + phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) / + (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4))); + } while (abs$1(delta) > epsilon$2 && --i > 0); + return [ + x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))), + phi + ]; +}; + +function geoNaturalEarth1() { + return projection(naturalEarth1Raw) + .scale(175.295); +} + +function orthographicRaw(x, y) { + return [cos$1(y) * sin$1(x), sin$1(y)]; +} + +orthographicRaw.invert = azimuthalInvert(asin$1); + +function geoOrthographic() { + return projection(orthographicRaw) + .scale(249.5) + .clipAngle(90 + epsilon$2); +} + +function stereographicRaw(x, y) { + var cy = cos$1(y), k = 1 + cos$1(x) * cy; + return [cy * sin$1(x) / k, sin$1(y) / k]; +} + +stereographicRaw.invert = azimuthalInvert(function(z) { + return 2 * atan(z); +}); + +function geoStereographic() { + return projection(stereographicRaw) + .scale(250) + .clipAngle(142); +} + +function transverseMercatorRaw(lambda, phi) { + return [log$3(tan((halfPi$1 + phi) / 2)), -lambda]; +} + +transverseMercatorRaw.invert = function(x, y) { + return [-y, 2 * atan(exp$1(x)) - halfPi$1]; +}; + +function geoTransverseMercator() { + var m = mercatorProjection(transverseMercatorRaw), + center = m.center, + rotate = m.rotate; + + m.center = function(_) { + return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]); + }; + + m.rotate = function(_) { + return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]); + }; + + return rotate([0, 0, 90]) + .scale(159.155); +} + +var defaultPath = geoPath(); + +var projectionProperties = [ + // standard properties in d3-geo + 'clipAngle', + 'clipExtent', + 'scale', + 'translate', + 'center', + 'rotate', + 'parallels', + 'precision', + 'reflectX', + 'reflectY', + + // extended properties in d3-geo-projections + 'coefficient', + 'distance', + 'fraction', + 'lobes', + 'parallel', + 'radius', + 'ratio', + 'spacing', + 'tilt' +]; + +/** + * Augment projections with their type and a copy method. + */ +function create$1(type, constructor) { + return function projection() { + var p = constructor(); + + p.type = type; + + p.path = geoPath().projection(p); + + p.copy = p.copy || function() { + var c = projection(); + projectionProperties.forEach(function(prop) { + if (p.hasOwnProperty(prop)) c[prop](p[prop]()); + }); + c.path.pointRadius(p.path.pointRadius()); + return c; + }; + + return p; + }; +} + +function projection$1(type, proj) { + if (!type || typeof type !== 'string') { + throw new Error('Projection type must be a name string.'); + } + type = type.toLowerCase(); + if (arguments.length > 1) { + projections[type] = create$1(type, proj); + return this; + } else { + return projections.hasOwnProperty(type) ? projections[type] : null; + } +} + +function getProjectionPath(proj) { + return (proj && proj.path) || defaultPath; +} + +var projections = { + // base d3-geo projection types + albers: geoAlbers, + albersusa: geoAlbersUsa, + azimuthalequalarea: geoAzimuthalEqualArea, + azimuthalequidistant: geoAzimuthalEquidistant, + conicconformal: geoConicConformal, + conicequalarea: geoConicEqualArea, + conicequidistant: geoConicEquidistant, + equirectangular: geoEquirectangular, + gnomonic: geoGnomonic, + identity: geoIdentity, + mercator: geoMercator, + naturalEarth1: geoNaturalEarth1, + orthographic: geoOrthographic, + stereographic: geoStereographic, + transversemercator: geoTransverseMercator +}; + +for (var key$2 in projections) { + projection$1(key$2, projections[key$2]); +} + +/** + * Map GeoJSON data to an SVG path string. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {function(number, number): *} params.projection - The cartographic + * projection to apply. + * @param {function(object): *} [params.field] - The field with GeoJSON data, + * or null if the tuple itself is a GeoJSON feature. + * @param {string} [params.as='path'] - The output field in which to store + * the generated path data (default 'path'). + */ +function GeoPath(params) { + Transform.call(this, null, params); +} + +GeoPath.Definition = { + "type": "GeoPath", + "metadata": {"modifies": true}, + "params": [ + { "name": "projection", "type": "projection" }, + { "name": "field", "type": "field" }, + { "name": "pointRadius", "type": "number", "expr": true }, + { "name": "as", "type": "string", "default": "path" } + ] +}; + +var prototype$12 = inherits(GeoPath, Transform); + +prototype$12.transform = function(_, pulse) { + var out = pulse.fork(pulse.ALL), + path = this.value, + field = _.field || identity, + as = _.as || 'path', + flag = out.SOURCE; + + function set(t) { t[as] = path(field(t)); } + + if (!path || _.modified()) { + // parameters updated, reset and reflow + this.value = path = getProjectionPath(_.projection); + out.materialize().reflow(); + } else { + flag = field === identity || pulse.modified(field.fields) + ? out.ADD_MOD + : out.ADD; + } + + var prev = initPath(path, _.pointRadius); + out.visit(flag, set); + path.pointRadius(prev); + + return out.modifies(as); +}; + +function initPath(path, pointRadius) { + var prev = path.pointRadius(); + path.context(null); + if (pointRadius != null) { + path.pointRadius(pointRadius); + } + return prev; +} + +/** + * Geo-code a longitude/latitude point to an x/y coordinate. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {function(number, number): *} params.projection - The cartographic + * projection to apply. + * @param {Array} params.fields - A two-element array of + * field accessors for the longitude and latitude values. + * @param {Array} [params.as] - A two-element array of field names + * under which to store the result. Defaults to ['x','y']. + */ +function GeoPoint(params) { + Transform.call(this, null, params); +} + +GeoPoint.Definition = { + "type": "GeoPoint", + "metadata": {"modifies": true}, + "params": [ + { "name": "projection", "type": "projection", "required": true }, + { "name": "fields", "type": "field", "array": true, "required": true, "length": 2 }, + { "name": "as", "type": "string", "array": true, "length": 2, "default": ["x", "y"] } + ] +}; + +var prototype$13 = inherits(GeoPoint, Transform); + +prototype$13.transform = function(_, pulse) { + var proj = _.projection, + lon = _.fields[0], + lat = _.fields[1], + as = _.as || ['x', 'y'], + x = as[0], + y = as[1], + mod; + + function set(t) { + var xy = proj([lon(t), lat(t)]); + if (xy) { + t[x] = xy[0]; + t[y] = xy[1]; + } else { + t[x] = undefined; + t[y] = undefined; + } + } + + if (_.modified()) { + // parameters updated, reflow + pulse = pulse.materialize().reflow(true).visit(pulse.SOURCE, set); + } else { + mod = pulse.modified(lon.fields) || pulse.modified(lat.fields); + pulse.visit(mod ? pulse.ADD_MOD : pulse.ADD, set); + } + + return pulse.modifies(as); +}; + +/** + * Annotate items with a geopath shape generator. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {function(number, number): *} params.projection - The cartographic + * projection to apply. + * @param {function(object): *} [params.field] - The field with GeoJSON data, + * or null if the tuple itself is a GeoJSON feature. + * @param {string} [params.as='shape'] - The output field in which to store + * the generated path data (default 'shape'). + */ +function GeoShape(params) { + Transform.call(this, null, params); +} + +GeoShape.Definition = { + "type": "GeoShape", + "metadata": {"modifies": true, "nomod": true}, + "params": [ + { "name": "projection", "type": "projection" }, + { "name": "field", "type": "field", "default": "datum" }, + { "name": "pointRadius", "type": "number", "expr": true }, + { "name": "as", "type": "string", "default": "shape" } + ] +}; + +var prototype$14 = inherits(GeoShape, Transform); + +prototype$14.transform = function(_, pulse) { + var out = pulse.fork(pulse.ALL), + shape = this.value, + as = _.as || 'shape', + flag = out.ADD; + + if (!shape || _.modified()) { + // parameters updated, reset and reflow + this.value = shape = shapeGenerator( + getProjectionPath(_.projection), + _.field || field('datum'), + _.pointRadius + ); + out.materialize().reflow(); + flag = out.SOURCE; + } + + out.visit(flag, function(t) { t[as] = shape; }); + + return out.modifies(as); +}; + +function shapeGenerator(path, field, pointRadius) { + var shape = pointRadius == null + ? function(_) { return path(field(_)); } + : function(_) { + var prev = path.pointRadius(), + value = path.pointRadius(pointRadius)(field(_)); + path.pointRadius(prev); + return value; + }; + shape.context = function(_) { + path.context(_); + return shape; + }; + + return shape; +} + +/** + * GeoJSON feature generator for creating graticules. + * @constructor + */ +function Graticule(params) { + Transform.call(this, [], params); + this.generator = graticule(); +} + +Graticule.Definition = { + "type": "Graticule", + "metadata": {"changes": true}, + "params": [ + { "name": "extent", "type": "array", "array": true, "length": 2, + "content": {"type": "number", "array": true, "length": 2} }, + { "name": "extentMajor", "type": "array", "array": true, "length": 2, + "content": {"type": "number", "array": true, "length": 2} }, + { "name": "extentMinor", "type": "array", "array": true, "length": 2, + "content": {"type": "number", "array": true, "length": 2} }, + { "name": "step", "type": "number", "array": true, "length": 2 }, + { "name": "stepMajor", "type": "number", "array": true, "length": 2, "default": [90, 360] }, + { "name": "stepMinor", "type": "number", "array": true, "length": 2, "default": [10, 10] }, + { "name": "precision", "type": "number", "default": 2.5 } + ] +}; + +var prototype$15 = inherits(Graticule, Transform); + +prototype$15.transform = function(_, pulse) { + var src = this.value, + gen = this.generator, t; + + if (!src.length || _.modified()) { + for (var prop in _) { + if (isFunction(gen[prop])) { + gen[prop](_[prop]); + } + } + } + + t = gen(); + if (src.length) { + pulse.mod.push(replace(src[0], t)); + } else { + pulse.add.push(ingest(t)); + } + src[0] = t; + + return pulse; +}; + +/** + * Maintains a cartographic projection. + * @constructor + * @param {object} params - The parameters for this operator. + */ +function Projection(params) { + Transform.call(this, null, params); + this.modified(true); // always treat as modified +} + +var prototype$16 = inherits(Projection, Transform); + +prototype$16.transform = function(_, pulse) { + var proj = this.value; + + if (!proj || _.modified('type')) { + this.value = (proj = create$2(_.type)); + projectionProperties.forEach(function(prop) { + if (_[prop] != null) set$1(proj, prop, _[prop]); + }); + } else { + projectionProperties.forEach(function(prop) { + if (_.modified(prop)) set$1(proj, prop, _[prop]); + }); + } + + if (_.pointRadius != null) proj.path.pointRadius(_.pointRadius); + if (_.fit) fit$1(proj, _); + + return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS); +}; + +function fit$1(proj, _) { + var data = collectGeoJSON(_.fit); + _.extent ? proj.fitExtent(_.extent, data) + : _.size ? proj.fitSize(_.size, data) : 0; +} + +function create$2(type) { + var constructor = projection$1((type || 'mercator').toLowerCase()); + if (!constructor) error('Unrecognized projection type: ' + type); + return constructor(); +} + +function set$1(proj, key, value) { + if (isFunction(proj[key])) proj[key](value); +} + +function collectGeoJSON(data) { + data = array(data); + return data.length === 1 ? data[0] + : { + type: FeatureCollection, + features: data.reduce((a, f) => a.concat(featurize(f)), []) + }; +} + +function featurize(f) { + return f.type === FeatureCollection + ? f.features + : array(f).filter(d => d != null).map( + d => d.type === Feature ? d : {type: Feature, geometry: d} + ); +} + + + +var geo = /*#__PURE__*/Object.freeze({ + contour: Contour, + geojson: GeoJSON, + geopath: GeoPath, + geopoint: GeoPoint, + geoshape: GeoShape, + graticule: Graticule, + projection: Projection +}); + +function forceCenter(x, y) { + var nodes; + + if (x == null) x = 0; + if (y == null) y = 0; + + function force() { + var i, + n = nodes.length, + node, + sx = 0, + sy = 0; + + for (i = 0; i < n; ++i) { + node = nodes[i], sx += node.x, sy += node.y; + } + + for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) { + node = nodes[i], node.x -= sx, node.y -= sy; + } + } + + force.initialize = function(_) { + nodes = _; + }; + + force.x = function(_) { + return arguments.length ? (x = +_, force) : x; + }; + + force.y = function(_) { + return arguments.length ? (y = +_, force) : y; + }; + + return force; +} + +function tree_add(d) { + var x = +this._x.call(null, d), + y = +this._y.call(null, d); + return add$3(this.cover(x, y), x, y, d); +} + +function add$3(tree, x, y, d) { + if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points + + var parent, + node = tree._root, + leaf = {data: d}, + x0 = tree._x0, + y0 = tree._y0, + x1 = tree._x1, + y1 = tree._y1, + xm, + ym, + xp, + yp, + right, + bottom, + i, + j; + + // If the tree is empty, initialize the root as a leaf. + if (!node) return tree._root = leaf, tree; + + // Find the existing leaf for the new point, or add it. + while (node.length) { + if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; + if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; + if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree; + } + + // Is the new point is exactly coincident with the existing point? + xp = +tree._x.call(null, node.data); + yp = +tree._y.call(null, node.data); + if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree; + + // Otherwise, split the leaf node until the old and new point are separated. + do { + parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4); + if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; + if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; + } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm))); + return parent[j] = node, parent[i] = leaf, tree; +} + +function addAll(data) { + var d, i, n = data.length, + x, + y, + xz = new Array(n), + yz = new Array(n), + x0 = Infinity, + y0 = Infinity, + x1 = -Infinity, + y1 = -Infinity; + + // Compute the points and their extent. + for (i = 0; i < n; ++i) { + if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue; + xz[i] = x; + yz[i] = y; + if (x < x0) x0 = x; + if (x > x1) x1 = x; + if (y < y0) y0 = y; + if (y > y1) y1 = y; + } + + // If there were no (valid) points, abort. + if (x0 > x1 || y0 > y1) return this; + + // Expand the tree to cover the new points. + this.cover(x0, y0).cover(x1, y1); + + // Add the new points. + for (i = 0; i < n; ++i) { + add$3(this, xz[i], yz[i], data[i]); + } + + return this; +} + +function tree_cover(x, y) { + if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points + + var x0 = this._x0, + y0 = this._y0, + x1 = this._x1, + y1 = this._y1; + + // If the quadtree has no extent, initialize them. + // Integer extent are necessary so that if we later double the extent, + // the existing quadrant boundaries don’t change due to floating point error! + if (isNaN(x0)) { + x1 = (x0 = Math.floor(x)) + 1; + y1 = (y0 = Math.floor(y)) + 1; + } + + // Otherwise, double repeatedly to cover. + else { + var z = x1 - x0, + node = this._root, + parent, + i; + + while (x0 > x || x >= x1 || y0 > y || y >= y1) { + i = (y < y0) << 1 | (x < x0); + parent = new Array(4), parent[i] = node, node = parent, z *= 2; + switch (i) { + case 0: x1 = x0 + z, y1 = y0 + z; break; + case 1: x0 = x1 - z, y1 = y0 + z; break; + case 2: x1 = x0 + z, y0 = y1 - z; break; + case 3: x0 = x1 - z, y0 = y1 - z; break; + } + } + + if (this._root && this._root.length) this._root = node; + } + + this._x0 = x0; + this._y0 = y0; + this._x1 = x1; + this._y1 = y1; + return this; +} + +function tree_data() { + var data = []; + this.visit(function(node) { + if (!node.length) do data.push(node.data); while (node = node.next) + }); + return data; +} + +function tree_extent(_) { + return arguments.length + ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1]) + : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]]; +} + +function Quad(node, x0, y0, x1, y1) { + this.node = node; + this.x0 = x0; + this.y0 = y0; + this.x1 = x1; + this.y1 = y1; +} + +function tree_find(x, y, radius) { + var data, + x0 = this._x0, + y0 = this._y0, + x1, + y1, + x2, + y2, + x3 = this._x1, + y3 = this._y1, + quads = [], + node = this._root, + q, + i; + + if (node) quads.push(new Quad(node, x0, y0, x3, y3)); + if (radius == null) radius = Infinity; + else { + x0 = x - radius, y0 = y - radius; + x3 = x + radius, y3 = y + radius; + radius *= radius; + } + + while (q = quads.pop()) { + + // Stop searching if this quadrant can’t contain a closer node. + if (!(node = q.node) + || (x1 = q.x0) > x3 + || (y1 = q.y0) > y3 + || (x2 = q.x1) < x0 + || (y2 = q.y1) < y0) continue; + + // Bisect the current quadrant. + if (node.length) { + var xm = (x1 + x2) / 2, + ym = (y1 + y2) / 2; + + quads.push( + new Quad(node[3], xm, ym, x2, y2), + new Quad(node[2], x1, ym, xm, y2), + new Quad(node[1], xm, y1, x2, ym), + new Quad(node[0], x1, y1, xm, ym) + ); + + // Visit the closest quadrant first. + if (i = (y >= ym) << 1 | (x >= xm)) { + q = quads[quads.length - 1]; + quads[quads.length - 1] = quads[quads.length - 1 - i]; + quads[quads.length - 1 - i] = q; + } + } + + // Visit this point. (Visiting coincident points isn’t necessary!) + else { + var dx = x - +this._x.call(null, node.data), + dy = y - +this._y.call(null, node.data), + d2 = dx * dx + dy * dy; + if (d2 < radius) { + var d = Math.sqrt(radius = d2); + x0 = x - d, y0 = y - d; + x3 = x + d, y3 = y + d; + data = node.data; + } + } + } + + return data; +} + +function tree_remove(d) { + if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points + + var parent, + node = this._root, + retainer, + previous, + next, + x0 = this._x0, + y0 = this._y0, + x1 = this._x1, + y1 = this._y1, + x, + y, + xm, + ym, + right, + bottom, + i, + j; + + // If the tree is empty, initialize the root as a leaf. + if (!node) return this; + + // Find the leaf node for the point. + // While descending, also retain the deepest parent with a non-removed sibling. + if (node.length) while (true) { + if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; + if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; + if (!(parent = node, node = node[i = bottom << 1 | right])) return this; + if (!node.length) break; + if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i; + } + + // Find the point to remove. + while (node.data !== d) if (!(previous = node, node = node.next)) return this; + if (next = node.next) delete node.next; + + // If there are multiple coincident points, remove just the point. + if (previous) return (next ? previous.next = next : delete previous.next), this; + + // If this is the root point, remove it. + if (!parent) return this._root = next, this; + + // Remove this leaf. + next ? parent[i] = next : delete parent[i]; + + // If the parent now contains exactly one leaf, collapse superfluous parents. + if ((node = parent[0] || parent[1] || parent[2] || parent[3]) + && node === (parent[3] || parent[2] || parent[1] || parent[0]) + && !node.length) { + if (retainer) retainer[j] = node; + else this._root = node; + } + + return this; +} + +function removeAll(data) { + for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]); + return this; +} + +function tree_root() { + return this._root; +} + +function tree_size() { + var size = 0; + this.visit(function(node) { + if (!node.length) do ++size; while (node = node.next) + }); + return size; +} + +function tree_visit(callback) { + var quads = [], q, node = this._root, child, x0, y0, x1, y1; + if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1)); + while (q = quads.pop()) { + if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) { + var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; + if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1)); + if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1)); + if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym)); + if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym)); + } + } + return this; +} + +function tree_visitAfter(callback) { + var quads = [], next = [], q; + if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1)); + while (q = quads.pop()) { + var node = q.node; + if (node.length) { + var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; + if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym)); + if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym)); + if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1)); + if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1)); + } + next.push(q); + } + while (q = next.pop()) { + callback(q.node, q.x0, q.y0, q.x1, q.y1); + } + return this; +} + +function defaultX$1(d) { + return d[0]; +} + +function tree_x(_) { + return arguments.length ? (this._x = _, this) : this._x; +} + +function defaultY$1(d) { + return d[1]; +} + +function tree_y(_) { + return arguments.length ? (this._y = _, this) : this._y; +} + +function quadtree(nodes, x, y) { + var tree = new Quadtree(x == null ? defaultX$1 : x, y == null ? defaultY$1 : y, NaN, NaN, NaN, NaN); + return nodes == null ? tree : tree.addAll(nodes); +} + +function Quadtree(x, y, x0, y0, x1, y1) { + this._x = x; + this._y = y; + this._x0 = x0; + this._y0 = y0; + this._x1 = x1; + this._y1 = y1; + this._root = undefined; +} + +function leaf_copy(leaf) { + var copy = {data: leaf.data}, next = copy; + while (leaf = leaf.next) next = next.next = {data: leaf.data}; + return copy; +} + +var treeProto = quadtree.prototype = Quadtree.prototype; + +treeProto.copy = function() { + var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1), + node = this._root, + nodes, + child; + + if (!node) return copy; + + if (!node.length) return copy._root = leaf_copy(node), copy; + + nodes = [{source: node, target: copy._root = new Array(4)}]; + while (node = nodes.pop()) { + for (var i = 0; i < 4; ++i) { + if (child = node.source[i]) { + if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)}); + else node.target[i] = leaf_copy(child); + } + } + } + + return copy; +}; + +treeProto.add = tree_add; +treeProto.addAll = addAll; +treeProto.cover = tree_cover; +treeProto.data = tree_data; +treeProto.extent = tree_extent; +treeProto.find = tree_find; +treeProto.remove = tree_remove; +treeProto.removeAll = removeAll; +treeProto.root = tree_root; +treeProto.size = tree_size; +treeProto.visit = tree_visit; +treeProto.visitAfter = tree_visitAfter; +treeProto.x = tree_x; +treeProto.y = tree_y; + +function constant$6(x) { + return function() { + return x; + }; +} + +function jiggle() { + return (Math.random() - 0.5) * 1e-6; +} + +function x$2(d) { + return d.x + d.vx; +} + +function y$2(d) { + return d.y + d.vy; +} + +function forceCollide(radius) { + var nodes, + radii, + strength = 1, + iterations = 1; + + if (typeof radius !== "function") radius = constant$6(radius == null ? 1 : +radius); + + function force() { + var i, n = nodes.length, + tree, + node, + xi, + yi, + ri, + ri2; + + for (var k = 0; k < iterations; ++k) { + tree = quadtree(nodes, x$2, y$2).visitAfter(prepare); + for (i = 0; i < n; ++i) { + node = nodes[i]; + ri = radii[node.index], ri2 = ri * ri; + xi = node.x + node.vx; + yi = node.y + node.vy; + tree.visit(apply); + } + } + + function apply(quad, x0, y0, x1, y1) { + var data = quad.data, rj = quad.r, r = ri + rj; + if (data) { + if (data.index > node.index) { + var x = xi - data.x - data.vx, + y = yi - data.y - data.vy, + l = x * x + y * y; + if (l < r * r) { + if (x === 0) x = jiggle(), l += x * x; + if (y === 0) y = jiggle(), l += y * y; + l = (r - (l = Math.sqrt(l))) / l * strength; + node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj)); + node.vy += (y *= l) * r; + data.vx -= x * (r = 1 - r); + data.vy -= y * r; + } + } + return; + } + return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r; + } + } + + function prepare(quad) { + if (quad.data) return quad.r = radii[quad.data.index]; + for (var i = quad.r = 0; i < 4; ++i) { + if (quad[i] && quad[i].r > quad.r) { + quad.r = quad[i].r; + } + } + } + + function initialize() { + if (!nodes) return; + var i, n = nodes.length, node; + radii = new Array(n); + for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes); + } + + force.initialize = function(_) { + nodes = _; + initialize(); + }; + + force.iterations = function(_) { + return arguments.length ? (iterations = +_, force) : iterations; + }; + + force.strength = function(_) { + return arguments.length ? (strength = +_, force) : strength; + }; + + force.radius = function(_) { + return arguments.length ? (radius = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : radius; + }; + + return force; +} + +function index(d) { + return d.index; +} + +function find$1(nodeById, nodeId) { + var node = nodeById.get(nodeId); + if (!node) throw new Error("missing: " + nodeId); + return node; +} + +function forceLink(links) { + var id = index, + strength = defaultStrength, + strengths, + distance = constant$6(30), + distances, + nodes, + count, + bias, + iterations = 1; + + if (links == null) links = []; + + function defaultStrength(link) { + return 1 / Math.min(count[link.source.index], count[link.target.index]); + } + + function force(alpha) { + for (var k = 0, n = links.length; k < iterations; ++k) { + for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) { + link = links[i], source = link.source, target = link.target; + x = target.x + target.vx - source.x - source.vx || jiggle(); + y = target.y + target.vy - source.y - source.vy || jiggle(); + l = Math.sqrt(x * x + y * y); + l = (l - distances[i]) / l * alpha * strengths[i]; + x *= l, y *= l; + target.vx -= x * (b = bias[i]); + target.vy -= y * b; + source.vx += x * (b = 1 - b); + source.vy += y * b; + } + } + } + + function initialize() { + if (!nodes) return; + + var i, + n = nodes.length, + m = links.length, + nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])), + link; + + for (i = 0, count = new Array(n); i < m; ++i) { + link = links[i], link.index = i; + if (typeof link.source !== "object") link.source = find$1(nodeById, link.source); + if (typeof link.target !== "object") link.target = find$1(nodeById, link.target); + count[link.source.index] = (count[link.source.index] || 0) + 1; + count[link.target.index] = (count[link.target.index] || 0) + 1; + } + + for (i = 0, bias = new Array(m); i < m; ++i) { + link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]); + } + + strengths = new Array(m), initializeStrength(); + distances = new Array(m), initializeDistance(); + } + + function initializeStrength() { + if (!nodes) return; + + for (var i = 0, n = links.length; i < n; ++i) { + strengths[i] = +strength(links[i], i, links); + } + } + + function initializeDistance() { + if (!nodes) return; + + for (var i = 0, n = links.length; i < n; ++i) { + distances[i] = +distance(links[i], i, links); + } + } + + force.initialize = function(_) { + nodes = _; + initialize(); + }; + + force.links = function(_) { + return arguments.length ? (links = _, initialize(), force) : links; + }; + + force.id = function(_) { + return arguments.length ? (id = _, force) : id; + }; + + force.iterations = function(_) { + return arguments.length ? (iterations = +_, force) : iterations; + }; + + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : constant$6(+_), initializeStrength(), force) : strength; + }; + + force.distance = function(_) { + return arguments.length ? (distance = typeof _ === "function" ? _ : constant$6(+_), initializeDistance(), force) : distance; + }; + + return force; +} + +var noop$4 = {value: function() {}}; + +function dispatch() { + for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) { + if (!(t = arguments[i] + "") || (t in _)) throw new Error("illegal type: " + t); + _[t] = []; + } + return new Dispatch(_); +} + +function Dispatch(_) { + this._ = _; +} + +function parseTypenames(typenames, types) { + return typenames.trim().split(/^|\s+/).map(function(t) { + var name = "", i = t.indexOf("."); + if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); + if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t); + return {type: t, name: name}; + }); +} + +Dispatch.prototype = dispatch.prototype = { + constructor: Dispatch, + on: function(typename, callback) { + var _ = this._, + T = parseTypenames(typename + "", _), + t, + i = -1, + n = T.length; + + // If no callback was specified, return the callback of the given type and name. + if (arguments.length < 2) { + while (++i < n) if ((t = (typename = T[i]).type) && (t = get$3(_[t], typename.name))) return t; + return; + } + + // If a type was specified, set the callback for the given type and name. + // Otherwise, if a null callback was specified, remove callbacks of the given name. + if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback); + while (++i < n) { + if (t = (typename = T[i]).type) _[t] = set$2(_[t], typename.name, callback); + else if (callback == null) for (t in _) _[t] = set$2(_[t], typename.name, null); + } + + return this; + }, + copy: function() { + var copy = {}, _ = this._; + for (var t in _) copy[t] = _[t].slice(); + return new Dispatch(copy); + }, + call: function(type, that) { + if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2]; + if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); + for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); + }, + apply: function(type, that, args) { + if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); + for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); + } +}; + +function get$3(type, name) { + for (var i = 0, n = type.length, c; i < n; ++i) { + if ((c = type[i]).name === name) { + return c.value; + } + } +} + +function set$2(type, name, callback) { + for (var i = 0, n = type.length; i < n; ++i) { + if (type[i].name === name) { + type[i] = noop$4, type = type.slice(0, i).concat(type.slice(i + 1)); + break; + } + } + if (callback != null) type.push({name: name, value: callback}); + return type; +} + +var frame = 0, // is an animation frame pending? + timeout = 0, // is a timeout pending? + interval = 0, // are any timers active? + pokeDelay = 1000, // how frequently we check for clock skew + taskHead, + taskTail, + clockLast = 0, + clockNow = 0, + clockSkew = 0, + clock = typeof performance === "object" && performance.now ? performance : Date, + setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); }; + +function now() { + return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew); +} + +function clearNow() { + clockNow = 0; +} + +function Timer() { + this._call = + this._time = + this._next = null; +} + +Timer.prototype = timer.prototype = { + constructor: Timer, + restart: function(callback, delay, time) { + if (typeof callback !== "function") throw new TypeError("callback is not a function"); + time = (time == null ? now() : +time) + (delay == null ? 0 : +delay); + if (!this._next && taskTail !== this) { + if (taskTail) taskTail._next = this; + else taskHead = this; + taskTail = this; + } + this._call = callback; + this._time = time; + sleep(); + }, + stop: function() { + if (this._call) { + this._call = null; + this._time = Infinity; + sleep(); + } + } +}; + +function timer(callback, delay, time) { + var t = new Timer; + t.restart(callback, delay, time); + return t; +} + +function timerFlush() { + now(); // Get the current time, if not already set. + ++frame; // Pretend we’ve set an alarm, if we haven’t already. + var t = taskHead, e; + while (t) { + if ((e = clockNow - t._time) >= 0) t._call.call(null, e); + t = t._next; + } + --frame; +} + +function wake() { + clockNow = (clockLast = clock.now()) + clockSkew; + frame = timeout = 0; + try { + timerFlush(); + } finally { + frame = 0; + nap(); + clockNow = 0; + } +} + +function poke() { + var now = clock.now(), delay = now - clockLast; + if (delay > pokeDelay) clockSkew -= delay, clockLast = now; +} + +function nap() { + var t0, t1 = taskHead, t2, time = Infinity; + while (t1) { + if (t1._call) { + if (time > t1._time) time = t1._time; + t0 = t1, t1 = t1._next; + } else { + t2 = t1._next, t1._next = null; + t1 = t0 ? t0._next = t2 : taskHead = t2; + } + } + taskTail = t0; + sleep(time); +} + +function sleep(time) { + if (frame) return; // Soonest alarm already set, or will be. + if (timeout) timeout = clearTimeout(timeout); + var delay = time - clockNow; // Strictly less than if we recomputed clockNow. + if (delay > 24) { + if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew); + if (interval) interval = clearInterval(interval); + } else { + if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay); + frame = 1, setFrame(wake); + } +} + +function interval$1(callback, delay, time) { + var t = new Timer, total = delay; + if (delay == null) return t.restart(callback, delay, time), t; + delay = +delay, time = time == null ? now() : +time; + t.restart(function tick(elapsed) { + elapsed += total; + t.restart(tick, total += delay, time); + callback(elapsed); + }, delay, time); + return t; +} + +function x$3(d) { + return d.x; +} + +function y$3(d) { + return d.y; +} + +var initialRadius = 10, + initialAngle = Math.PI * (3 - Math.sqrt(5)); + +function forceSimulation(nodes) { + var simulation, + alpha = 1, + alphaMin = 0.001, + alphaDecay = 1 - Math.pow(alphaMin, 1 / 300), + alphaTarget = 0, + velocityDecay = 0.6, + forces = new Map(), + stepper = timer(step), + event = dispatch("tick", "end"); + + if (nodes == null) nodes = []; + + function step() { + tick(); + event.call("tick", simulation); + if (alpha < alphaMin) { + stepper.stop(); + event.call("end", simulation); + } + } + + function tick(iterations) { + var i, n = nodes.length, node; + + if (iterations === undefined) iterations = 1; + + for (var k = 0; k < iterations; ++k) { + alpha += (alphaTarget - alpha) * alphaDecay; + + forces.forEach(function(force) { + force(alpha); + }); + + for (i = 0; i < n; ++i) { + node = nodes[i]; + if (node.fx == null) node.x += node.vx *= velocityDecay; + else node.x = node.fx, node.vx = 0; + if (node.fy == null) node.y += node.vy *= velocityDecay; + else node.y = node.fy, node.vy = 0; + } + } + + return simulation; + } + + function initializeNodes() { + for (var i = 0, n = nodes.length, node; i < n; ++i) { + node = nodes[i], node.index = i; + if (node.fx != null) node.x = node.fx; + if (node.fy != null) node.y = node.fy; + if (isNaN(node.x) || isNaN(node.y)) { + var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle; + node.x = radius * Math.cos(angle); + node.y = radius * Math.sin(angle); + } + if (isNaN(node.vx) || isNaN(node.vy)) { + node.vx = node.vy = 0; + } + } + } + + function initializeForce(force) { + if (force.initialize) force.initialize(nodes); + return force; + } + + initializeNodes(); + + return simulation = { + tick: tick, + + restart: function() { + return stepper.restart(step), simulation; + }, + + stop: function() { + return stepper.stop(), simulation; + }, + + nodes: function(_) { + return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes; + }, + + alpha: function(_) { + return arguments.length ? (alpha = +_, simulation) : alpha; + }, + + alphaMin: function(_) { + return arguments.length ? (alphaMin = +_, simulation) : alphaMin; + }, + + alphaDecay: function(_) { + return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay; + }, + + alphaTarget: function(_) { + return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget; + }, + + velocityDecay: function(_) { + return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay; + }, + + force: function(name, _) { + return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name); + }, + + find: function(x, y, radius) { + var i = 0, + n = nodes.length, + dx, + dy, + d2, + node, + closest; + + if (radius == null) radius = Infinity; + else radius *= radius; + + for (i = 0; i < n; ++i) { + node = nodes[i]; + dx = x - node.x; + dy = y - node.y; + d2 = dx * dx + dy * dy; + if (d2 < radius) closest = node, radius = d2; + } + + return closest; + }, + + on: function(name, _) { + return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name); + } + }; +} + +function forceManyBody() { + var nodes, + node, + alpha, + strength = constant$6(-30), + strengths, + distanceMin2 = 1, + distanceMax2 = Infinity, + theta2 = 0.81; + + function force(_) { + var i, n = nodes.length, tree = quadtree(nodes, x$3, y$3).visitAfter(accumulate); + for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply); + } + + function initialize() { + if (!nodes) return; + var i, n = nodes.length, node; + strengths = new Array(n); + for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes); + } + + function accumulate(quad) { + var strength = 0, q, c, weight = 0, x, y, i; + + // For internal nodes, accumulate forces from child quadrants. + if (quad.length) { + for (x = y = i = 0; i < 4; ++i) { + if ((q = quad[i]) && (c = Math.abs(q.value))) { + strength += q.value, weight += c, x += c * q.x, y += c * q.y; + } + } + quad.x = x / weight; + quad.y = y / weight; + } + + // For leaf nodes, accumulate forces from coincident quadrants. + else { + q = quad; + q.x = q.data.x; + q.y = q.data.y; + do strength += strengths[q.data.index]; + while (q = q.next); + } + + quad.value = strength; + } + + function apply(quad, x1, _, x2) { + if (!quad.value) return true; + + var x = quad.x - node.x, + y = quad.y - node.y, + w = x2 - x1, + l = x * x + y * y; + + // Apply the Barnes-Hut approximation if possible. + // Limit forces for very close nodes; randomize direction if coincident. + if (w * w / theta2 < l) { + if (l < distanceMax2) { + if (x === 0) x = jiggle(), l += x * x; + if (y === 0) y = jiggle(), l += y * y; + if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); + node.vx += x * quad.value * alpha / l; + node.vy += y * quad.value * alpha / l; + } + return true; + } + + // Otherwise, process points directly. + else if (quad.length || l >= distanceMax2) return; + + // Limit forces for very close nodes; randomize direction if coincident. + if (quad.data !== node || quad.next) { + if (x === 0) x = jiggle(), l += x * x; + if (y === 0) y = jiggle(), l += y * y; + if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); + } + + do if (quad.data !== node) { + w = strengths[quad.data.index] * alpha / l; + node.vx += x * w; + node.vy += y * w; + } while (quad = quad.next); + } + + force.initialize = function(_) { + nodes = _; + initialize(); + }; + + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : strength; + }; + + force.distanceMin = function(_) { + return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2); + }; + + force.distanceMax = function(_) { + return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2); + }; + + force.theta = function(_) { + return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2); + }; + + return force; +} + +function forceX(x) { + var strength = constant$6(0.1), + nodes, + strengths, + xz; + + if (typeof x !== "function") x = constant$6(x == null ? 0 : +x); + + function force(alpha) { + for (var i = 0, n = nodes.length, node; i < n; ++i) { + node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha; + } + } + + function initialize() { + if (!nodes) return; + var i, n = nodes.length; + strengths = new Array(n); + xz = new Array(n); + for (i = 0; i < n; ++i) { + strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes); + } + } + + force.initialize = function(_) { + nodes = _; + initialize(); + }; + + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : strength; + }; + + force.x = function(_) { + return arguments.length ? (x = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : x; + }; + + return force; +} + +function forceY(y) { + var strength = constant$6(0.1), + nodes, + strengths, + yz; + + if (typeof y !== "function") y = constant$6(y == null ? 0 : +y); + + function force(alpha) { + for (var i = 0, n = nodes.length, node; i < n; ++i) { + node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha; + } + } + + function initialize() { + if (!nodes) return; + var i, n = nodes.length; + strengths = new Array(n); + yz = new Array(n); + for (i = 0; i < n; ++i) { + strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes); + } + } + + force.initialize = function(_) { + nodes = _; + initialize(); + }; + + force.strength = function(_) { + return arguments.length ? (strength = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : strength; + }; + + force.y = function(_) { + return arguments.length ? (y = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : y; + }; + + return force; +} + +var ForceMap = { + center: forceCenter, + collide: forceCollide, + nbody: forceManyBody, + link: forceLink, + x: forceX, + y: forceY +}; + +var Forces = 'forces', + ForceParams = [ + 'alpha', 'alphaMin', 'alphaTarget', + 'velocityDecay', 'forces' + ], + ForceConfig = ['static', 'iterations'], + ForceOutput = ['x', 'y', 'vx', 'vy']; + +/** + * Force simulation layout. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {Array} params.forces - The forces to apply. + */ +function Force(params) { + Transform.call(this, null, params); +} + +Force.Definition = { + "type": "Force", + "metadata": {"modifies": true}, + "params": [ + { "name": "static", "type": "boolean", "default": false }, + { "name": "restart", "type": "boolean", "default": false }, + { "name": "iterations", "type": "number", "default": 300 }, + { "name": "alpha", "type": "number", "default": 1 }, + { "name": "alphaMin", "type": "number", "default": 0.001 }, + { "name": "alphaTarget", "type": "number", "default": 0 }, + { "name": "velocityDecay", "type": "number", "default": 0.4 }, + { "name": "forces", "type": "param", "array": true, + "params": [ + { + "key": {"force": "center"}, + "params": [ + { "name": "x", "type": "number", "default": 0 }, + { "name": "y", "type": "number", "default": 0 } + ] + }, + { + "key": {"force": "collide"}, + "params": [ + { "name": "radius", "type": "number", "expr": true }, + { "name": "strength", "type": "number", "default": 0.7 }, + { "name": "iterations", "type": "number", "default": 1 } + ] + }, + { + "key": {"force": "nbody"}, + "params": [ + { "name": "strength", "type": "number", "default": -30 }, + { "name": "theta", "type": "number", "default": 0.9 }, + { "name": "distanceMin", "type": "number", "default": 1 }, + { "name": "distanceMax", "type": "number" } + ] + }, + { + "key": {"force": "link"}, + "params": [ + { "name": "links", "type": "data" }, + { "name": "id", "type": "field" }, + { "name": "distance", "type": "number", "default": 30, "expr": true }, + { "name": "strength", "type": "number", "expr": true }, + { "name": "iterations", "type": "number", "default": 1 } + ] + }, + { + "key": {"force": "x"}, + "params": [ + { "name": "strength", "type": "number", "default": 0.1 }, + { "name": "x", "type": "field" } + ] + }, + { + "key": {"force": "y"}, + "params": [ + { "name": "strength", "type": "number", "default": 0.1 }, + { "name": "y", "type": "field" } + ] + } + ] }, + { + "name": "as", "type": "string", "array": true, "modify": false, + "default": ForceOutput + } + ] +}; + +var prototype$17 = inherits(Force, Transform); + +prototype$17.transform = function(_, pulse) { + var sim = this.value, + change = pulse.changed(pulse.ADD_REM), + params = _.modified(ForceParams), + iters = _.iterations || 300; + + // configure simulation + if (!sim) { + this.value = sim = simulation(pulse.source, _); + sim.on('tick', rerun(pulse.dataflow, this)); + if (!_.static) { + change = true; + sim.tick(); // ensure we run on init + } + pulse.modifies('index'); + } else { + if (change) { + pulse.modifies('index'); + sim.nodes(pulse.source); + } + if (params || pulse.changed(pulse.MOD)) { + setup(sim, _, 0, pulse); + } + } + + // run simulation + if (params || change || _.modified(ForceConfig) + || (pulse.changed() && _.restart)) + { + sim.alpha(Math.max(sim.alpha(), _.alpha || 1)) + .alphaDecay(1 - Math.pow(sim.alphaMin(), 1 / iters)); + + if (_.static) { + for (sim.stop(); --iters >= 0;) sim.tick(); + } else { + if (sim.stopped()) sim.restart(); + if (!change) return pulse.StopPropagation; // defer to sim ticks + } + } + + return this.finish(_, pulse); +}; + +prototype$17.finish = function(_, pulse) { + var dataflow = pulse.dataflow; + + // inspect dependencies, touch link source data + for (var args=this._argops, j=0, m=args.length, arg; j= 0) sum += children[i].value; + node.value = sum; +} + +function node_count() { + return this.eachAfter(count); +} + +function node_each(callback) { + var node = this, current, next = [node], children, i, n; + do { + current = next.reverse(), next = []; + while (node = current.pop()) { + callback(node), children = node.children; + if (children) for (i = 0, n = children.length; i < n; ++i) { + next.push(children[i]); + } + } + } while (next.length); + return this; +} + +function node_eachBefore(callback) { + var node = this, nodes = [node], children, i; + while (node = nodes.pop()) { + callback(node), children = node.children; + if (children) for (i = children.length - 1; i >= 0; --i) { + nodes.push(children[i]); + } + } + return this; +} + +function node_eachAfter(callback) { + var node = this, nodes = [node], next = [], children, i, n; + while (node = nodes.pop()) { + next.push(node), children = node.children; + if (children) for (i = 0, n = children.length; i < n; ++i) { + nodes.push(children[i]); + } + } + while (node = next.pop()) { + callback(node); + } + return this; +} + +function node_sum(value) { + return this.eachAfter(function(node) { + var sum = +value(node.data) || 0, + children = node.children, + i = children && children.length; + while (--i >= 0) sum += children[i].value; + node.value = sum; + }); +} + +function node_sort(compare) { + return this.eachBefore(function(node) { + if (node.children) { + node.children.sort(compare); + } + }); +} + +function node_path(end) { + var start = this, + ancestor = leastCommonAncestor(start, end), + nodes = [start]; + while (start !== ancestor) { + start = start.parent; + nodes.push(start); + } + var k = nodes.length; + while (end !== ancestor) { + nodes.splice(k, 0, end); + end = end.parent; + } + return nodes; +} + +function leastCommonAncestor(a, b) { + if (a === b) return a; + var aNodes = a.ancestors(), + bNodes = b.ancestors(), + c = null; + a = aNodes.pop(); + b = bNodes.pop(); + while (a === b) { + c = a; + a = aNodes.pop(); + b = bNodes.pop(); + } + return c; +} + +function node_ancestors() { + var node = this, nodes = [node]; + while (node = node.parent) { + nodes.push(node); + } + return nodes; +} + +function node_descendants() { + var nodes = []; + this.each(function(node) { + nodes.push(node); + }); + return nodes; +} + +function node_leaves() { + var leaves = []; + this.eachBefore(function(node) { + if (!node.children) { + leaves.push(node); + } + }); + return leaves; +} + +function node_links() { + var root = this, links = []; + root.each(function(node) { + if (node !== root) { // Don’t include the root’s parent, if any. + links.push({source: node.parent, target: node}); + } + }); + return links; +} + +function hierarchy(data, children) { + var root = new Node(data), + valued = +data.value && (root.value = data.value), + node, + nodes = [root], + child, + childs, + i, + n; + + if (children == null) children = defaultChildren; + + while (node = nodes.pop()) { + if (valued) node.value = +node.data.value; + if ((childs = children(node.data)) && (n = childs.length)) { + node.children = new Array(n); + for (i = n - 1; i >= 0; --i) { + nodes.push(child = node.children[i] = new Node(childs[i])); + child.parent = node; + child.depth = node.depth + 1; + } + } + } + + return root.eachBefore(computeHeight); +} + +function node_copy() { + return hierarchy(this).eachBefore(copyData); +} + +function defaultChildren(d) { + return d.children; +} + +function copyData(node) { + node.data = node.data.data; +} + +function computeHeight(node) { + var height = 0; + do node.height = height; + while ((node = node.parent) && (node.height < ++height)); +} + +function Node(data) { + this.data = data; + this.depth = + this.height = 0; + this.parent = null; +} + +Node.prototype = hierarchy.prototype = { + constructor: Node, + count: node_count, + each: node_each, + eachAfter: node_eachAfter, + eachBefore: node_eachBefore, + sum: node_sum, + sort: node_sort, + path: node_path, + ancestors: node_ancestors, + descendants: node_descendants, + leaves: node_leaves, + links: node_links, + copy: node_copy +}; + +var slice$2 = Array.prototype.slice; + +function shuffle(array) { + var m = array.length, + t, + i; + + while (m) { + i = Math.random() * m-- | 0; + t = array[m]; + array[m] = array[i]; + array[i] = t; + } + + return array; +} + +function enclose(circles) { + var i = 0, n = (circles = shuffle(slice$2.call(circles))).length, B = [], p, e; + + while (i < n) { + p = circles[i]; + if (e && enclosesWeak(e, p)) ++i; + else e = encloseBasis(B = extendBasis(B, p)), i = 0; + } + + return e; +} + +function extendBasis(B, p) { + var i, j; + + if (enclosesWeakAll(p, B)) return [p]; + + // If we get here then B must have at least one element. + for (i = 0; i < B.length; ++i) { + if (enclosesNot(p, B[i]) + && enclosesWeakAll(encloseBasis2(B[i], p), B)) { + return [B[i], p]; + } + } + + // If we get here then B must have at least two elements. + for (i = 0; i < B.length - 1; ++i) { + for (j = i + 1; j < B.length; ++j) { + if (enclosesNot(encloseBasis2(B[i], B[j]), p) + && enclosesNot(encloseBasis2(B[i], p), B[j]) + && enclosesNot(encloseBasis2(B[j], p), B[i]) + && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) { + return [B[i], B[j], p]; + } + } + } + + // If we get here then something is very wrong. + throw new Error; +} + +function enclosesNot(a, b) { + var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y; + return dr < 0 || dr * dr < dx * dx + dy * dy; +} + +function enclosesWeak(a, b) { + var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y; + return dr > 0 && dr * dr > dx * dx + dy * dy; +} + +function enclosesWeakAll(a, B) { + for (var i = 0; i < B.length; ++i) { + if (!enclosesWeak(a, B[i])) { + return false; + } + } + return true; +} + +function encloseBasis(B) { + switch (B.length) { + case 1: return encloseBasis1(B[0]); + case 2: return encloseBasis2(B[0], B[1]); + case 3: return encloseBasis3(B[0], B[1], B[2]); + } +} + +function encloseBasis1(a) { + return { + x: a.x, + y: a.y, + r: a.r + }; +} + +function encloseBasis2(a, b) { + var x1 = a.x, y1 = a.y, r1 = a.r, + x2 = b.x, y2 = b.y, r2 = b.r, + x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1, + l = Math.sqrt(x21 * x21 + y21 * y21); + return { + x: (x1 + x2 + x21 / l * r21) / 2, + y: (y1 + y2 + y21 / l * r21) / 2, + r: (l + r1 + r2) / 2 + }; +} + +function encloseBasis3(a, b, c) { + var x1 = a.x, y1 = a.y, r1 = a.r, + x2 = b.x, y2 = b.y, r2 = b.r, + x3 = c.x, y3 = c.y, r3 = c.r, + a2 = x1 - x2, + a3 = x1 - x3, + b2 = y1 - y2, + b3 = y1 - y3, + c2 = r2 - r1, + c3 = r3 - r1, + d1 = x1 * x1 + y1 * y1 - r1 * r1, + d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2, + d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3, + ab = a3 * b2 - a2 * b3, + xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1, + xb = (b3 * c2 - b2 * c3) / ab, + ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1, + yb = (a2 * c3 - a3 * c2) / ab, + A = xb * xb + yb * yb - 1, + B = 2 * (r1 + xa * xb + ya * yb), + C = xa * xa + ya * ya - r1 * r1, + r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B); + return { + x: x1 + xa + xb * r, + y: y1 + ya + yb * r, + r: r + }; +} + +function place(b, a, c) { + var dx = b.x - a.x, x, a2, + dy = b.y - a.y, y, b2, + d2 = dx * dx + dy * dy; + if (d2) { + a2 = a.r + c.r, a2 *= a2; + b2 = b.r + c.r, b2 *= b2; + if (a2 > b2) { + x = (d2 + b2 - a2) / (2 * d2); + y = Math.sqrt(Math.max(0, b2 / d2 - x * x)); + c.x = b.x - x * dx - y * dy; + c.y = b.y - x * dy + y * dx; + } else { + x = (d2 + a2 - b2) / (2 * d2); + y = Math.sqrt(Math.max(0, a2 / d2 - x * x)); + c.x = a.x + x * dx - y * dy; + c.y = a.y + x * dy + y * dx; + } + } else { + c.x = a.x + c.r; + c.y = a.y; + } +} + +function intersects(a, b) { + var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y; + return dr > 0 && dr * dr > dx * dx + dy * dy; +} + +function score(node) { + var a = node._, + b = node.next._, + ab = a.r + b.r, + dx = (a.x * b.r + b.x * a.r) / ab, + dy = (a.y * b.r + b.y * a.r) / ab; + return dx * dx + dy * dy; +} + +function Node$1(circle) { + this._ = circle; + this.next = null; + this.previous = null; +} + +function packEnclose(circles) { + if (!(n = circles.length)) return 0; + + var a, b, c, n, aa, ca, i, j, k, sj, sk; + + // Place the first circle. + a = circles[0], a.x = 0, a.y = 0; + if (!(n > 1)) return a.r; + + // Place the second circle. + b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0; + if (!(n > 2)) return a.r + b.r; + + // Place the third circle. + place(b, a, c = circles[2]); + + // Initialize the front-chain using the first three circles a, b and c. + a = new Node$1(a), b = new Node$1(b), c = new Node$1(c); + a.next = c.previous = b; + b.next = a.previous = c; + c.next = b.previous = a; + + // Attempt to place each remaining circle… + pack: for (i = 3; i < n; ++i) { + place(a._, b._, c = circles[i]), c = new Node$1(c); + + // Find the closest intersecting circle on the front-chain, if any. + // “Closeness” is determined by linear distance along the front-chain. + // “Ahead” or “behind” is likewise determined by linear distance. + j = b.next, k = a.previous, sj = b._.r, sk = a._.r; + do { + if (sj <= sk) { + if (intersects(j._, c._)) { + b = j, a.next = b, b.previous = a, --i; + continue pack; + } + sj += j._.r, j = j.next; + } else { + if (intersects(k._, c._)) { + a = k, a.next = b, b.previous = a, --i; + continue pack; + } + sk += k._.r, k = k.previous; + } + } while (j !== k.next); + + // Success! Insert the new circle c between a and b. + c.previous = a, c.next = b, a.next = b.previous = b = c; + + // Compute the new closest circle pair to the centroid. + aa = score(a); + while ((c = c.next) !== b) { + if ((ca = score(c)) < aa) { + a = c, aa = ca; + } + } + b = a.next; + } + + // Compute the enclosing circle of the front chain. + a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a); + + // Translate the circles to put the enclosing circle around the origin. + for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y; + + return c.r; +} + +function optional(f) { + return f == null ? null : required(f); +} + +function required(f) { + if (typeof f !== "function") throw new Error; + return f; +} + +function constantZero() { + return 0; +} + +function constant$7(x) { + return function() { + return x; + }; +} + +function defaultRadius(d) { + return Math.sqrt(d.value); +} + +function pack() { + var radius = null, + dx = 1, + dy = 1, + padding = constantZero; + + function pack(root) { + root.x = dx / 2, root.y = dy / 2; + if (radius) { + root.eachBefore(radiusLeaf(radius)) + .eachAfter(packChildren(padding, 0.5)) + .eachBefore(translateChild(1)); + } else { + root.eachBefore(radiusLeaf(defaultRadius)) + .eachAfter(packChildren(constantZero, 1)) + .eachAfter(packChildren(padding, root.r / Math.min(dx, dy))) + .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r))); + } + return root; + } + + pack.radius = function(x) { + return arguments.length ? (radius = optional(x), pack) : radius; + }; + + pack.size = function(x) { + return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy]; + }; + + pack.padding = function(x) { + return arguments.length ? (padding = typeof x === "function" ? x : constant$7(+x), pack) : padding; + }; + + return pack; +} + +function radiusLeaf(radius) { + return function(node) { + if (!node.children) { + node.r = Math.max(0, +radius(node) || 0); + } + }; +} + +function packChildren(padding, k) { + return function(node) { + if (children = node.children) { + var children, + i, + n = children.length, + r = padding(node) * k || 0, + e; + + if (r) for (i = 0; i < n; ++i) children[i].r += r; + e = packEnclose(children); + if (r) for (i = 0; i < n; ++i) children[i].r -= r; + node.r = e + r; + } + }; +} + +function translateChild(k) { + return function(node) { + var parent = node.parent; + node.r *= k; + if (parent) { + node.x = parent.x + k * node.x; + node.y = parent.y + k * node.y; + } + }; +} + +function roundNode(node) { + node.x0 = Math.round(node.x0); + node.y0 = Math.round(node.y0); + node.x1 = Math.round(node.x1); + node.y1 = Math.round(node.y1); +} + +function treemapDice(parent, x0, y0, x1, y1) { + var nodes = parent.children, + node, + i = -1, + n = nodes.length, + k = parent.value && (x1 - x0) / parent.value; + + while (++i < n) { + node = nodes[i], node.y0 = y0, node.y1 = y1; + node.x0 = x0, node.x1 = x0 += node.value * k; + } +} + +function partition$3() { + var dx = 1, + dy = 1, + padding = 0, + round = false; + + function partition(root) { + var n = root.height + 1; + root.x0 = + root.y0 = padding; + root.x1 = dx; + root.y1 = dy / n; + root.eachBefore(positionNode(dy, n)); + if (round) root.eachBefore(roundNode); + return root; + } + + function positionNode(dy, n) { + return function(node) { + if (node.children) { + treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n); + } + var x0 = node.x0, + y0 = node.y0, + x1 = node.x1 - padding, + y1 = node.y1 - padding; + if (x1 < x0) x0 = x1 = (x0 + x1) / 2; + if (y1 < y0) y0 = y1 = (y0 + y1) / 2; + node.x0 = x0; + node.y0 = y0; + node.x1 = x1; + node.y1 = y1; + }; + } + + partition.round = function(x) { + return arguments.length ? (round = !!x, partition) : round; + }; + + partition.size = function(x) { + return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy]; + }; + + partition.padding = function(x) { + return arguments.length ? (padding = +x, partition) : padding; + }; + + return partition; +} + +var keyPrefix = "$", // Protect against keys like “__proto__”. + preroot = {depth: -1}, + ambiguous = {}; + +function defaultId(d) { + return d.id; +} + +function defaultParentId(d) { + return d.parentId; +} + +function stratify() { + var id = defaultId, + parentId = defaultParentId; + + function stratify(data) { + var d, + i, + n = data.length, + root, + parent, + node, + nodes = new Array(n), + nodeId, + nodeKey, + nodeByKey = {}; + + for (i = 0; i < n; ++i) { + d = data[i], node = nodes[i] = new Node(d); + if ((nodeId = id(d, i, data)) != null && (nodeId += "")) { + nodeKey = keyPrefix + (node.id = nodeId); + nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node; + } + } + + for (i = 0; i < n; ++i) { + node = nodes[i], nodeId = parentId(data[i], i, data); + if (nodeId == null || !(nodeId += "")) { + if (root) throw new Error("multiple roots"); + root = node; + } else { + parent = nodeByKey[keyPrefix + nodeId]; + if (!parent) throw new Error("missing: " + nodeId); + if (parent === ambiguous) throw new Error("ambiguous: " + nodeId); + if (parent.children) parent.children.push(node); + else parent.children = [node]; + node.parent = parent; + } + } + + if (!root) throw new Error("no root"); + root.parent = preroot; + root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight); + root.parent = null; + if (n > 0) throw new Error("cycle"); + + return root; + } + + stratify.id = function(x) { + return arguments.length ? (id = required(x), stratify) : id; + }; + + stratify.parentId = function(x) { + return arguments.length ? (parentId = required(x), stratify) : parentId; + }; + + return stratify; +} + +function defaultSeparation$1(a, b) { + return a.parent === b.parent ? 1 : 2; +} + +// function radialSeparation(a, b) { +// return (a.parent === b.parent ? 1 : 2) / a.depth; +// } + +// This function is used to traverse the left contour of a subtree (or +// subforest). It returns the successor of v on this contour. This successor is +// either given by the leftmost child of v or by the thread of v. The function +// returns null if and only if v is on the highest level of its subtree. +function nextLeft(v) { + var children = v.children; + return children ? children[0] : v.t; +} + +// This function works analogously to nextLeft. +function nextRight(v) { + var children = v.children; + return children ? children[children.length - 1] : v.t; +} + +// Shifts the current subtree rooted at w+. This is done by increasing +// prelim(w+) and mod(w+) by shift. +function moveSubtree(wm, wp, shift) { + var change = shift / (wp.i - wm.i); + wp.c -= change; + wp.s += shift; + wm.c += change; + wp.z += shift; + wp.m += shift; +} + +// All other shifts, applied to the smaller subtrees between w- and w+, are +// performed by this function. To prepare the shifts, we have to adjust +// change(w+), shift(w+), and change(w-). +function executeShifts(v) { + var shift = 0, + change = 0, + children = v.children, + i = children.length, + w; + while (--i >= 0) { + w = children[i]; + w.z += shift; + w.m += shift; + shift += w.s + (change += w.c); + } +} + +// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise, +// returns the specified (default) ancestor. +function nextAncestor(vim, v, ancestor) { + return vim.a.parent === v.parent ? vim.a : ancestor; +} + +function TreeNode(node, i) { + this._ = node; + this.parent = null; + this.children = null; + this.A = null; // default ancestor + this.a = this; // ancestor + this.z = 0; // prelim + this.m = 0; // mod + this.c = 0; // change + this.s = 0; // shift + this.t = null; // thread + this.i = i; // number +} + +TreeNode.prototype = Object.create(Node.prototype); + +function treeRoot(root) { + var tree = new TreeNode(root, 0), + node, + nodes = [tree], + child, + children, + i, + n; + + while (node = nodes.pop()) { + if (children = node._.children) { + node.children = new Array(n = children.length); + for (i = n - 1; i >= 0; --i) { + nodes.push(child = node.children[i] = new TreeNode(children[i], i)); + child.parent = node; + } + } + } + + (tree.parent = new TreeNode(null, 0)).children = [tree]; + return tree; +} + +// Node-link tree diagram using the Reingold-Tilford "tidy" algorithm +function tree() { + var separation = defaultSeparation$1, + dx = 1, + dy = 1, + nodeSize = null; + + function tree(root) { + var t = treeRoot(root); + + // Compute the layout using Buchheim et al.’s algorithm. + t.eachAfter(firstWalk), t.parent.m = -t.z; + t.eachBefore(secondWalk); + + // If a fixed node size is specified, scale x and y. + if (nodeSize) root.eachBefore(sizeNode); + + // If a fixed tree size is specified, scale x and y based on the extent. + // Compute the left-most, right-most, and depth-most nodes for extents. + else { + var left = root, + right = root, + bottom = root; + root.eachBefore(function(node) { + if (node.x < left.x) left = node; + if (node.x > right.x) right = node; + if (node.depth > bottom.depth) bottom = node; + }); + var s = left === right ? 1 : separation(left, right) / 2, + tx = s - left.x, + kx = dx / (right.x + s + tx), + ky = dy / (bottom.depth || 1); + root.eachBefore(function(node) { + node.x = (node.x + tx) * kx; + node.y = node.depth * ky; + }); + } + + return root; + } + + // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is + // applied recursively to the children of v, as well as the function + // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the + // node v is placed to the midpoint of its outermost children. + function firstWalk(v) { + var children = v.children, + siblings = v.parent.children, + w = v.i ? siblings[v.i - 1] : null; + if (children) { + executeShifts(v); + var midpoint = (children[0].z + children[children.length - 1].z) / 2; + if (w) { + v.z = w.z + separation(v._, w._); + v.m = v.z - midpoint; + } else { + v.z = midpoint; + } + } else if (w) { + v.z = w.z + separation(v._, w._); + } + v.parent.A = apportion(v, w, v.parent.A || siblings[0]); + } + + // Computes all real x-coordinates by summing up the modifiers recursively. + function secondWalk(v) { + v._.x = v.z + v.parent.m; + v.m += v.parent.m; + } + + // The core of the algorithm. Here, a new subtree is combined with the + // previous subtrees. Threads are used to traverse the inside and outside + // contours of the left and right subtree up to the highest common level. The + // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the + // superscript o means outside and i means inside, the subscript - means left + // subtree and + means right subtree. For summing up the modifiers along the + // contour, we use respective variables si+, si-, so-, and so+. Whenever two + // nodes of the inside contours conflict, we compute the left one of the + // greatest uncommon ancestors using the function ANCESTOR and call MOVE + // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees. + // Finally, we add a new thread (if necessary). + function apportion(v, w, ancestor) { + if (w) { + var vip = v, + vop = v, + vim = w, + vom = vip.parent.children[0], + sip = vip.m, + sop = vop.m, + sim = vim.m, + som = vom.m, + shift; + while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) { + vom = nextLeft(vom); + vop = nextRight(vop); + vop.a = v; + shift = vim.z + sim - vip.z - sip + separation(vim._, vip._); + if (shift > 0) { + moveSubtree(nextAncestor(vim, v, ancestor), v, shift); + sip += shift; + sop += shift; + } + sim += vim.m; + sip += vip.m; + som += vom.m; + sop += vop.m; + } + if (vim && !nextRight(vop)) { + vop.t = vim; + vop.m += sim - sop; + } + if (vip && !nextLeft(vom)) { + vom.t = vip; + vom.m += sip - som; + ancestor = v; + } + } + return ancestor; + } + + function sizeNode(node) { + node.x *= dx; + node.y = node.depth * dy; + } + + tree.separation = function(x) { + return arguments.length ? (separation = x, tree) : separation; + }; + + tree.size = function(x) { + return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]); + }; + + tree.nodeSize = function(x) { + return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null); + }; + + return tree; +} + +function treemapSlice(parent, x0, y0, x1, y1) { + var nodes = parent.children, + node, + i = -1, + n = nodes.length, + k = parent.value && (y1 - y0) / parent.value; + + while (++i < n) { + node = nodes[i], node.x0 = x0, node.x1 = x1; + node.y0 = y0, node.y1 = y0 += node.value * k; + } +} + +var phi = (1 + Math.sqrt(5)) / 2; + +function squarifyRatio(ratio, parent, x0, y0, x1, y1) { + var rows = [], + nodes = parent.children, + row, + nodeValue, + i0 = 0, + i1 = 0, + n = nodes.length, + dx, dy, + value = parent.value, + sumValue, + minValue, + maxValue, + newRatio, + minRatio, + alpha, + beta; + + while (i0 < n) { + dx = x1 - x0, dy = y1 - y0; + + // Find the next non-empty node. + do sumValue = nodes[i1++].value; while (!sumValue && i1 < n); + minValue = maxValue = sumValue; + alpha = Math.max(dy / dx, dx / dy) / (value * ratio); + beta = sumValue * sumValue * alpha; + minRatio = Math.max(maxValue / beta, beta / minValue); + + // Keep adding nodes while the aspect ratio maintains or improves. + for (; i1 < n; ++i1) { + sumValue += nodeValue = nodes[i1].value; + if (nodeValue < minValue) minValue = nodeValue; + if (nodeValue > maxValue) maxValue = nodeValue; + beta = sumValue * sumValue * alpha; + newRatio = Math.max(maxValue / beta, beta / minValue); + if (newRatio > minRatio) { sumValue -= nodeValue; break; } + minRatio = newRatio; + } + + // Position and record the row orientation. + rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)}); + if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1); + else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1); + value -= sumValue, i0 = i1; + } + + return rows; +} + +var treemapSquarify = (function custom(ratio) { + + function squarify(parent, x0, y0, x1, y1) { + squarifyRatio(ratio, parent, x0, y0, x1, y1); + } + + squarify.ratio = function(x) { + return custom((x = +x) > 1 ? x : 1); + }; + + return squarify; +})(phi); + +function treemap() { + var tile = treemapSquarify, + round = false, + dx = 1, + dy = 1, + paddingStack = [0], + paddingInner = constantZero, + paddingTop = constantZero, + paddingRight = constantZero, + paddingBottom = constantZero, + paddingLeft = constantZero; + + function treemap(root) { + root.x0 = + root.y0 = 0; + root.x1 = dx; + root.y1 = dy; + root.eachBefore(positionNode); + paddingStack = [0]; + if (round) root.eachBefore(roundNode); + return root; + } + + function positionNode(node) { + var p = paddingStack[node.depth], + x0 = node.x0 + p, + y0 = node.y0 + p, + x1 = node.x1 - p, + y1 = node.y1 - p; + if (x1 < x0) x0 = x1 = (x0 + x1) / 2; + if (y1 < y0) y0 = y1 = (y0 + y1) / 2; + node.x0 = x0; + node.y0 = y0; + node.x1 = x1; + node.y1 = y1; + if (node.children) { + p = paddingStack[node.depth + 1] = paddingInner(node) / 2; + x0 += paddingLeft(node) - p; + y0 += paddingTop(node) - p; + x1 -= paddingRight(node) - p; + y1 -= paddingBottom(node) - p; + if (x1 < x0) x0 = x1 = (x0 + x1) / 2; + if (y1 < y0) y0 = y1 = (y0 + y1) / 2; + tile(node, x0, y0, x1, y1); + } + } + + treemap.round = function(x) { + return arguments.length ? (round = !!x, treemap) : round; + }; + + treemap.size = function(x) { + return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy]; + }; + + treemap.tile = function(x) { + return arguments.length ? (tile = required(x), treemap) : tile; + }; + + treemap.padding = function(x) { + return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner(); + }; + + treemap.paddingInner = function(x) { + return arguments.length ? (paddingInner = typeof x === "function" ? x : constant$7(+x), treemap) : paddingInner; + }; + + treemap.paddingOuter = function(x) { + return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop(); + }; + + treemap.paddingTop = function(x) { + return arguments.length ? (paddingTop = typeof x === "function" ? x : constant$7(+x), treemap) : paddingTop; + }; + + treemap.paddingRight = function(x) { + return arguments.length ? (paddingRight = typeof x === "function" ? x : constant$7(+x), treemap) : paddingRight; + }; + + treemap.paddingBottom = function(x) { + return arguments.length ? (paddingBottom = typeof x === "function" ? x : constant$7(+x), treemap) : paddingBottom; + }; + + treemap.paddingLeft = function(x) { + return arguments.length ? (paddingLeft = typeof x === "function" ? x : constant$7(+x), treemap) : paddingLeft; + }; + + return treemap; +} + +function treemapBinary(parent, x0, y0, x1, y1) { + var nodes = parent.children, + i, n = nodes.length, + sum, sums = new Array(n + 1); + + for (sums[0] = sum = i = 0; i < n; ++i) { + sums[i + 1] = sum += nodes[i].value; + } + + partition(0, n, parent.value, x0, y0, x1, y1); + + function partition(i, j, value, x0, y0, x1, y1) { + if (i >= j - 1) { + var node = nodes[i]; + node.x0 = x0, node.y0 = y0; + node.x1 = x1, node.y1 = y1; + return; + } + + var valueOffset = sums[i], + valueTarget = (value / 2) + valueOffset, + k = i + 1, + hi = j - 1; + + while (k < hi) { + var mid = k + hi >>> 1; + if (sums[mid] < valueTarget) k = mid + 1; + else hi = mid; + } + + if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k; + + var valueLeft = sums[k] - valueOffset, + valueRight = value - valueLeft; + + if ((x1 - x0) > (y1 - y0)) { + var xk = (x0 * valueRight + x1 * valueLeft) / value; + partition(i, k, valueLeft, x0, y0, xk, y1); + partition(k, j, valueRight, xk, y0, x1, y1); + } else { + var yk = (y0 * valueRight + y1 * valueLeft) / value; + partition(i, k, valueLeft, x0, y0, x1, yk); + partition(k, j, valueRight, x0, yk, x1, y1); + } + } +} + +function treemapSliceDice(parent, x0, y0, x1, y1) { + (parent.depth & 1 ? treemapSlice : treemapDice)(parent, x0, y0, x1, y1); +} + +var treemapResquarify = (function custom(ratio) { + + function resquarify(parent, x0, y0, x1, y1) { + if ((rows = parent._squarify) && (rows.ratio === ratio)) { + var rows, + row, + nodes, + i, + j = -1, + n, + m = rows.length, + value = parent.value; + + while (++j < m) { + row = rows[j], nodes = row.children; + for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value; + if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value); + else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1); + value -= row.value; + } + } else { + parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1); + rows.ratio = ratio; + } + } + + resquarify.ratio = function(x) { + return custom((x = +x) > 1 ? x : 1); + }; + + return resquarify; +})(phi); + +/** + * Nest tuples into a tree structure, grouped by key values. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {Array} params.keys - The key fields to nest by, in order. + * @param {boolean} [params.generate=false] - A boolean flag indicating if + * non-leaf nodes generated by this transform should be included in the + * output. The default (false) includes only the input data (leaf nodes) + * in the data stream. + */ +function Nest(params) { + Transform.call(this, null, params); +} + +Nest.Definition = { + "type": "Nest", + "metadata": {"treesource": true, "changes": true}, + "params": [ + { "name": "keys", "type": "field", "array": true }, + { "name": "generate", "type": "boolean" } + ] +}; + +var prototype$18 = inherits(Nest, Transform); + +function children(n) { + return n.values; +} + +prototype$18.transform = function(_, pulse) { + if (!pulse.source) { + error('Nest transform requires an upstream data source.'); + } + + var gen = _.generate, + mod = _.modified(), + out = pulse.clone(), + tree = this.value; + + if (!tree || mod || pulse.changed()) { + // collect nodes to remove + if (tree) { + tree.each(function(node) { + if (node.children && isTuple(node.data)) { + out.rem.push(node.data); + } + }); + } + + // generate new tree structure + this.value = tree = hierarchy({ + values: array(_.keys) + .reduce(function(n, k) { n.key(k); return n; }, nest()) + .entries(out.source) + }, children); + + // collect nodes to add + if (gen) { + tree.each(function(node) { + if (node.children) { + node = ingest(node.data); + out.add.push(node); + out.source.push(node); + } + }); + } + + // build lookup table + lookup$3(tree, tupleid, tupleid); + } + + out.source.root = tree; + return out; +}; + +function nest() { + var keys = [], + nest; + + function apply(array, depth) { + if (depth >= keys.length) { + return array; + } + + var i = -1, + n = array.length, + key = keys[depth++], + keyValue, + value, + valuesByKey = {}, + values, + result = {}; + + while (++i < n) { + keyValue = key(value = array[i]) + ''; + if (values = valuesByKey[keyValue]) { + values.push(value); + } else { + valuesByKey[keyValue] = [value]; + } + } + + for (keyValue in valuesByKey) { + result[keyValue] = apply(valuesByKey[keyValue], depth); + } + + return result; + } + + function entries(map, depth) { + if (++depth > keys.length) return map; + var array = [], k; + for (k in map) { + array.push({key: k, values: entries(map[k], depth)}); + } + return array; + } + + return nest = { + entries: function(array) { return entries(apply(array, 0), 0); }, + key: function(d) { keys.push(d); return nest; } + }; +} + +/** + * Abstract class for tree layout. + * @constructor + * @param {object} params - The parameters for this operator. + */ +function HierarchyLayout(params) { + Transform.call(this, null, params); +} + +var prototype$19 = inherits(HierarchyLayout, Transform); + +prototype$19.transform = function(_, pulse) { + if (!pulse.source || !pulse.source.root) { + error(this.constructor.name + + ' transform requires a backing tree data source.'); + } + + var layout = this.layout(_.method), + fields = this.fields, + root = pulse.source.root, + as = _.as || fields; + + if (_.field) root.sum(_.field); + if (_.sort) root.sort(_.sort); + + setParams(layout, this.params, _); + if (layout.separation) { + layout.separation(_.separation !== false ? defaultSeparation$2 : one); + } + + try { + this.value = layout(root); + } catch (err) { + error(err); + } + root.each(function(node) { setFields(node, fields, as); }); + + return pulse.reflow(_.modified()).modifies(as).modifies('leaf'); +}; + +function setParams(layout, params, _) { + for (var p, i=0, n=params.length; i 0) return; + r /= dx; + if (dx < 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } else if (dx > 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } + + r = x1 - ax; + if (!dx && r < 0) return; + r /= dx; + if (dx < 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } else if (dx > 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } + + r = y0 - ay; + if (!dy && r > 0) return; + r /= dy; + if (dy < 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } else if (dy > 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } + + r = y1 - ay; + if (!dy && r < 0) return; + r /= dy; + if (dy < 0) { + if (r > t1) return; + if (r > t0) t0 = r; + } else if (dy > 0) { + if (r < t0) return; + if (r < t1) t1 = r; + } + + if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check? + + if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy]; + if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy]; + return true; +} + +function connectEdge(edge, x0, y0, x1, y1) { + var v1 = edge[1]; + if (v1) return true; + + var v0 = edge[0], + left = edge.left, + right = edge.right, + lx = left[0], + ly = left[1], + rx = right[0], + ry = right[1], + fx = (lx + rx) / 2, + fy = (ly + ry) / 2, + fm, + fb; + + if (ry === ly) { + if (fx < x0 || fx >= x1) return; + if (lx > rx) { + if (!v0) v0 = [fx, y0]; + else if (v0[1] >= y1) return; + v1 = [fx, y1]; + } else { + if (!v0) v0 = [fx, y1]; + else if (v0[1] < y0) return; + v1 = [fx, y0]; + } + } else { + fm = (lx - rx) / (ry - ly); + fb = fy - fm * fx; + if (fm < -1 || fm > 1) { + if (lx > rx) { + if (!v0) v0 = [(y0 - fb) / fm, y0]; + else if (v0[1] >= y1) return; + v1 = [(y1 - fb) / fm, y1]; + } else { + if (!v0) v0 = [(y1 - fb) / fm, y1]; + else if (v0[1] < y0) return; + v1 = [(y0 - fb) / fm, y0]; + } + } else { + if (ly < ry) { + if (!v0) v0 = [x0, fm * x0 + fb]; + else if (v0[0] >= x1) return; + v1 = [x1, fm * x1 + fb]; + } else { + if (!v0) v0 = [x1, fm * x1 + fb]; + else if (v0[0] < x0) return; + v1 = [x0, fm * x0 + fb]; + } + } + } + + edge[0] = v0; + edge[1] = v1; + return true; +} + +function clipEdges(x0, y0, x1, y1) { + var i = edges.length, + edge; + + while (i--) { + if (!connectEdge(edge = edges[i], x0, y0, x1, y1) + || !clipEdge(edge, x0, y0, x1, y1) + || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon$3 + || Math.abs(edge[0][1] - edge[1][1]) > epsilon$3)) { + delete edges[i]; + } + } +} + +function createCell(site) { + return cells[site.index] = { + site: site, + halfedges: [] + }; +} + +function cellHalfedgeAngle(cell, edge) { + var site = cell.site, + va = edge.left, + vb = edge.right; + if (site === vb) vb = va, va = site; + if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]); + if (site === va) va = edge[1], vb = edge[0]; + else va = edge[0], vb = edge[1]; + return Math.atan2(va[0] - vb[0], vb[1] - va[1]); +} + +function cellHalfedgeStart(cell, edge) { + return edge[+(edge.left !== cell.site)]; +} + +function cellHalfedgeEnd(cell, edge) { + return edge[+(edge.left === cell.site)]; +} + +function sortCellHalfedges() { + for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) { + if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) { + var index = new Array(m), + array = new Array(m); + for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]); + index.sort(function(i, j) { return array[j] - array[i]; }); + for (j = 0; j < m; ++j) array[j] = halfedges[index[j]]; + for (j = 0; j < m; ++j) halfedges[j] = array[j]; + } + } +} + +function clipCells(x0, y0, x1, y1) { + var nCells = cells.length, + iCell, + cell, + site, + iHalfedge, + halfedges, + nHalfedges, + start, + startX, + startY, + end, + endX, + endY, + cover = true; + + for (iCell = 0; iCell < nCells; ++iCell) { + if (cell = cells[iCell]) { + site = cell.site; + halfedges = cell.halfedges; + iHalfedge = halfedges.length; + + // Remove any dangling clipped edges. + while (iHalfedge--) { + if (!edges[halfedges[iHalfedge]]) { + halfedges.splice(iHalfedge, 1); + } + } + + // Insert any border edges as necessary. + iHalfedge = 0, nHalfedges = halfedges.length; + while (iHalfedge < nHalfedges) { + end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1]; + start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1]; + if (Math.abs(endX - startX) > epsilon$3 || Math.abs(endY - startY) > epsilon$3) { + halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end, + Math.abs(endX - x0) < epsilon$3 && y1 - endY > epsilon$3 ? [x0, Math.abs(startX - x0) < epsilon$3 ? startY : y1] + : Math.abs(endY - y1) < epsilon$3 && x1 - endX > epsilon$3 ? [Math.abs(startY - y1) < epsilon$3 ? startX : x1, y1] + : Math.abs(endX - x1) < epsilon$3 && endY - y0 > epsilon$3 ? [x1, Math.abs(startX - x1) < epsilon$3 ? startY : y0] + : Math.abs(endY - y0) < epsilon$3 && endX - x0 > epsilon$3 ? [Math.abs(startY - y0) < epsilon$3 ? startX : x0, y0] + : null)) - 1); + ++nHalfedges; + } + } + + if (nHalfedges) cover = false; + } + } + + // If there weren’t any edges, have the closest site cover the extent. + // It doesn’t matter which corner of the extent we measure! + if (cover) { + var dx, dy, d2, dc = Infinity; + + for (iCell = 0, cover = null; iCell < nCells; ++iCell) { + if (cell = cells[iCell]) { + site = cell.site; + dx = site[0] - x0; + dy = site[1] - y0; + d2 = dx * dx + dy * dy; + if (d2 < dc) dc = d2, cover = cell; + } + } + + if (cover) { + var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0]; + cover.halfedges.push( + edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1, + edges.push(createBorderEdge(site, v01, v11)) - 1, + edges.push(createBorderEdge(site, v11, v10)) - 1, + edges.push(createBorderEdge(site, v10, v00)) - 1 + ); + } + } + + // Lastly delete any cells with no edges; these were entirely clipped. + for (iCell = 0; iCell < nCells; ++iCell) { + if (cell = cells[iCell]) { + if (!cell.halfedges.length) { + delete cells[iCell]; + } + } + } +} + +var circlePool = []; + +var firstCircle; + +function Circle() { + RedBlackNode(this); + this.x = + this.y = + this.arc = + this.site = + this.cy = null; +} + +function attachCircle(arc) { + var lArc = arc.P, + rArc = arc.N; + + if (!lArc || !rArc) return; + + var lSite = lArc.site, + cSite = arc.site, + rSite = rArc.site; + + if (lSite === rSite) return; + + var bx = cSite[0], + by = cSite[1], + ax = lSite[0] - bx, + ay = lSite[1] - by, + cx = rSite[0] - bx, + cy = rSite[1] - by; + + var d = 2 * (ax * cy - ay * cx); + if (d >= -epsilon2$2) return; + + var ha = ax * ax + ay * ay, + hc = cx * cx + cy * cy, + x = (cy * ha - ay * hc) / d, + y = (ax * hc - cx * ha) / d; + + var circle = circlePool.pop() || new Circle; + circle.arc = arc; + circle.site = cSite; + circle.x = x + bx; + circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom + + arc.circle = circle; + + var before = null, + node = circles._; + + while (node) { + if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) { + if (node.L) node = node.L; + else { before = node.P; break; } + } else { + if (node.R) node = node.R; + else { before = node; break; } + } + } + + circles.insert(before, circle); + if (!before) firstCircle = circle; +} + +function detachCircle(arc) { + var circle = arc.circle; + if (circle) { + if (!circle.P) firstCircle = circle.N; + circles.remove(circle); + circlePool.push(circle); + RedBlackNode(circle); + arc.circle = null; + } +} + +var beachPool = []; + +function Beach() { + RedBlackNode(this); + this.edge = + this.site = + this.circle = null; +} + +function createBeach(site) { + var beach = beachPool.pop() || new Beach; + beach.site = site; + return beach; +} + +function detachBeach(beach) { + detachCircle(beach); + beaches.remove(beach); + beachPool.push(beach); + RedBlackNode(beach); +} + +function removeBeach(beach) { + var circle = beach.circle, + x = circle.x, + y = circle.cy, + vertex = [x, y], + previous = beach.P, + next = beach.N, + disappearing = [beach]; + + detachBeach(beach); + + var lArc = previous; + while (lArc.circle + && Math.abs(x - lArc.circle.x) < epsilon$3 + && Math.abs(y - lArc.circle.cy) < epsilon$3) { + previous = lArc.P; + disappearing.unshift(lArc); + detachBeach(lArc); + lArc = previous; + } + + disappearing.unshift(lArc); + detachCircle(lArc); + + var rArc = next; + while (rArc.circle + && Math.abs(x - rArc.circle.x) < epsilon$3 + && Math.abs(y - rArc.circle.cy) < epsilon$3) { + next = rArc.N; + disappearing.push(rArc); + detachBeach(rArc); + rArc = next; + } + + disappearing.push(rArc); + detachCircle(rArc); + + var nArcs = disappearing.length, + iArc; + for (iArc = 1; iArc < nArcs; ++iArc) { + rArc = disappearing[iArc]; + lArc = disappearing[iArc - 1]; + setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex); + } + + lArc = disappearing[0]; + rArc = disappearing[nArcs - 1]; + rArc.edge = createEdge(lArc.site, rArc.site, null, vertex); + + attachCircle(lArc); + attachCircle(rArc); +} + +function addBeach(site) { + var x = site[0], + directrix = site[1], + lArc, + rArc, + dxl, + dxr, + node = beaches._; + + while (node) { + dxl = leftBreakPoint(node, directrix) - x; + if (dxl > epsilon$3) node = node.L; else { + dxr = x - rightBreakPoint(node, directrix); + if (dxr > epsilon$3) { + if (!node.R) { + lArc = node; + break; + } + node = node.R; + } else { + if (dxl > -epsilon$3) { + lArc = node.P; + rArc = node; + } else if (dxr > -epsilon$3) { + lArc = node; + rArc = node.N; + } else { + lArc = rArc = node; + } + break; + } + } + } + + createCell(site); + var newArc = createBeach(site); + beaches.insert(lArc, newArc); + + if (!lArc && !rArc) return; + + if (lArc === rArc) { + detachCircle(lArc); + rArc = createBeach(lArc.site); + beaches.insert(newArc, rArc); + newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site); + attachCircle(lArc); + attachCircle(rArc); + return; + } + + if (!rArc) { // && lArc + newArc.edge = createEdge(lArc.site, newArc.site); + return; + } + + // else lArc !== rArc + detachCircle(lArc); + detachCircle(rArc); + + var lSite = lArc.site, + ax = lSite[0], + ay = lSite[1], + bx = site[0] - ax, + by = site[1] - ay, + rSite = rArc.site, + cx = rSite[0] - ax, + cy = rSite[1] - ay, + d = 2 * (bx * cy - by * cx), + hb = bx * bx + by * by, + hc = cx * cx + cy * cy, + vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay]; + + setEdgeEnd(rArc.edge, lSite, rSite, vertex); + newArc.edge = createEdge(lSite, site, null, vertex); + rArc.edge = createEdge(site, rSite, null, vertex); + attachCircle(lArc); + attachCircle(rArc); +} + +function leftBreakPoint(arc, directrix) { + var site = arc.site, + rfocx = site[0], + rfocy = site[1], + pby2 = rfocy - directrix; + + if (!pby2) return rfocx; + + var lArc = arc.P; + if (!lArc) return -Infinity; + + site = lArc.site; + var lfocx = site[0], + lfocy = site[1], + plby2 = lfocy - directrix; + + if (!plby2) return lfocx; + + var hl = lfocx - rfocx, + aby2 = 1 / pby2 - 1 / plby2, + b = hl / plby2; + + if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx; + + return (rfocx + lfocx) / 2; +} + +function rightBreakPoint(arc, directrix) { + var rArc = arc.N; + if (rArc) return leftBreakPoint(rArc, directrix); + var site = arc.site; + return site[1] === directrix ? site[0] : Infinity; +} + +var epsilon$3 = 1e-6; +var epsilon2$2 = 1e-12; +var beaches; +var cells; +var circles; +var edges; + +function triangleArea(a, b, c) { + return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]); +} + +function lexicographic(a, b) { + return b[1] - a[1] + || b[0] - a[0]; +} + +function Diagram(sites, extent) { + var site = sites.sort(lexicographic).pop(), + x, + y, + circle; + + edges = []; + cells = new Array(sites.length); + beaches = new RedBlackTree; + circles = new RedBlackTree; + + while (true) { + circle = firstCircle; + if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) { + if (site[0] !== x || site[1] !== y) { + addBeach(site); + x = site[0], y = site[1]; + } + site = sites.pop(); + } else if (circle) { + removeBeach(circle.arc); + } else { + break; + } + } + + sortCellHalfedges(); + + if (extent) { + var x0 = +extent[0][0], + y0 = +extent[0][1], + x1 = +extent[1][0], + y1 = +extent[1][1]; + clipEdges(x0, y0, x1, y1); + clipCells(x0, y0, x1, y1); + } + + this.edges = edges; + this.cells = cells; + + beaches = + circles = + edges = + cells = null; +} + +Diagram.prototype = { + constructor: Diagram, + + polygons: function() { + var edges = this.edges; + + return this.cells.map(function(cell) { + var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); }); + polygon.data = cell.site.data; + return polygon; + }); + }, + + triangles: function() { + var triangles = [], + edges = this.edges; + + this.cells.forEach(function(cell, i) { + if (!(m = (halfedges = cell.halfedges).length)) return; + var site = cell.site, + halfedges, + j = -1, + m, + s0, + e1 = edges[halfedges[m - 1]], + s1 = e1.left === site ? e1.right : e1.left; + + while (++j < m) { + s0 = s1; + e1 = edges[halfedges[j]]; + s1 = e1.left === site ? e1.right : e1.left; + if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) { + triangles.push([site.data, s0.data, s1.data]); + } + } + }); + + return triangles; + }, + + links: function() { + return this.edges.filter(function(edge) { + return edge.right; + }).map(function(edge) { + return { + source: edge.left.data, + target: edge.right.data + }; + }); + }, + + find: function(x, y, radius) { + var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell; + + // Use the previously-found cell, or start with an arbitrary one. + while (!(cell = that.cells[i1])) if (++i1 >= n) return null; + var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy; + + // Traverse the half-edges to find a closer cell, if any. + do { + cell = that.cells[i0 = i1], i1 = null; + cell.halfedges.forEach(function(e) { + var edge = that.edges[e], v = edge.left; + if ((v === cell.site || !v) && !(v = edge.right)) return; + var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy; + if (v2 < d2) d2 = v2, i1 = v.index; + }); + } while (i1 !== null); + + that._found = i0; + + return radius == null || d2 <= radius * radius ? cell.site : null; + } +}; + +function voronoi() { + var x = x$4, + y = y$4, + extent = null; + + function voronoi(data) { + return new Diagram(data.map(function(d, i) { + var s = [Math.round(x(d, i, data) / epsilon$3) * epsilon$3, Math.round(y(d, i, data) / epsilon$3) * epsilon$3]; + s.index = i; + s.data = d; + return s; + }), extent); + } + + voronoi.polygons = function(data) { + return voronoi(data).polygons(); + }; + + voronoi.links = function(data) { + return voronoi(data).links(); + }; + + voronoi.triangles = function(data) { + return voronoi(data).triangles(); + }; + + voronoi.x = function(_) { + return arguments.length ? (x = typeof _ === "function" ? _ : constant$8(+_), voronoi) : x; + }; + + voronoi.y = function(_) { + return arguments.length ? (y = typeof _ === "function" ? _ : constant$8(+_), voronoi) : y; + }; + + voronoi.extent = function(_) { + return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]]; + }; + + voronoi.size = function(_) { + return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]]; + }; + + return voronoi; +} + +function Voronoi(params) { + Transform.call(this, null, params); +} + +Voronoi.Definition = { + "type": "Voronoi", + "metadata": {"modifies": true}, + "params": [ + { "name": "x", "type": "field", "required": true }, + { "name": "y", "type": "field", "required": true }, + { "name": "size", "type": "number", "array": true, "length": 2 }, + { "name": "extent", "type": "array", "array": true, "length": 2, + "default": [[-1e5, -1e5], [1e5, 1e5]], + "content": {"type": "number", "array": true, "length": 2} }, + { "name": "as", "type": "string", "default": "path" } + ] +}; + +var prototype$1g = inherits(Voronoi, Transform); + +var defaultExtent = [[-1e5, -1e5], [1e5, 1e5]]; + +prototype$1g.transform = function(_, pulse) { + var as = _.as || 'path', + data = pulse.source, + diagram, polygons, i, n; + + // configure and construct voronoi diagram + diagram = voronoi().x(_.x).y(_.y); + if (_.size) diagram.size(_.size); + else diagram.extent(_.extent || defaultExtent); + + this.value = (diagram = diagram(data)); + + // map polygons to paths + polygons = diagram.polygons(); + for (i=0, n=data.length; i> 5, + ch = 1 << 11; + +function cloud() { + var size = [256, 256], + text, + font, + fontSize, + fontStyle, + fontWeight, + rotate, + padding, + spiral = archimedeanSpiral, + words = [], + random = Math.random, + cloud = {}; + + cloud.layout = function() { + var contextAndRatio = getContext(canvas()), + board = zeroArray((size[0] >> 5) * size[1]), + bounds = null, + n = words.length, + i = -1, + tags = [], + data = words.map(function(d) { + return { + text: text(d), + font: font(d), + style: fontStyle(d), + weight: fontWeight(d), + rotate: rotate(d), + size: ~~fontSize(d), + padding: padding(d), + xoff: 0, + yoff: 0, + x1: 0, + y1: 0, + x0: 0, + y0: 0, + hasText: false, + sprite: null, + datum: d + }; + }).sort(function(a, b) { return b.size - a.size; }); + + while (++i < n) { + var d = data[i]; + d.x = (size[0] * (random() + .5)) >> 1; + d.y = (size[1] * (random() + .5)) >> 1; + cloudSprite(contextAndRatio, d, data, i); + if (d.hasText && place(board, d, bounds)) { + tags.push(d); + if (bounds) cloudBounds(bounds, d); + else bounds = [{x: d.x + d.x0, y: d.y + d.y0}, {x: d.x + d.x1, y: d.y + d.y1}]; + // Temporary hack + d.x -= size[0] >> 1; + d.y -= size[1] >> 1; + } + } + + return tags; + }; + + function getContext(canvas) { + canvas.width = canvas.height = 1; + var ratio = Math.sqrt(canvas.getContext("2d").getImageData(0, 0, 1, 1).data.length >> 2); + canvas.width = (cw << 5) / ratio; + canvas.height = ch / ratio; + + var context = canvas.getContext("2d"); + context.fillStyle = context.strokeStyle = "red"; + context.textAlign = "center"; + + return {context: context, ratio: ratio}; + } + + function place(board, tag, bounds) { + var startX = tag.x, + startY = tag.y, + maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]), + s = spiral(size), + dt = random() < .5 ? 1 : -1, + t = -dt, + dxdy, + dx, + dy; + + while (dxdy = s(t += dt)) { + dx = ~~dxdy[0]; + dy = ~~dxdy[1]; + + if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) break; + + tag.x = startX + dx; + tag.y = startY + dy; + + if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 || + tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue; + // TODO only check for collisions within current bounds. + if (!bounds || !cloudCollide(tag, board, size[0])) { + if (!bounds || collideRects(tag, bounds)) { + var sprite = tag.sprite, + w = tag.width >> 5, + sw = size[0] >> 5, + lx = tag.x - (w << 4), + sx = lx & 0x7f, + msx = 32 - sx, + h = tag.y1 - tag.y0, + x = (tag.y + tag.y0) * sw + (lx >> 5), + last; + for (var j = 0; j < h; j++) { + last = 0; + for (var i = 0; i <= w; i++) { + board[x + i] |= (last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0); + } + x += sw; + } + tag.sprite = null; + return true; + } + } + } + return false; + } + + cloud.words = function(_) { + if (arguments.length) { + words = _; + return cloud; + } else { + return words; + } + }; + + cloud.size = function(_) { + if (arguments.length) { + size = [+_[0], +_[1]]; + return cloud; + } else { + return size; + } + }; + + cloud.font = function(_) { + if (arguments.length) { + font = functor(_); + return cloud; + } else { + return font; + } + }; + + cloud.fontStyle = function(_) { + if (arguments.length) { + fontStyle = functor(_); + return cloud; + } else { + return fontStyle; + } + }; + + cloud.fontWeight = function(_) { + if (arguments.length) { + fontWeight = functor(_); + return cloud; + } else { + return fontWeight; + } + }; + + cloud.rotate = function(_) { + if (arguments.length) { + rotate = functor(_); + return cloud; + } else { + return rotate; + } + }; + + cloud.text = function(_) { + if (arguments.length) { + text = functor(_); + return cloud; + } else { + return text; + } + }; + + cloud.spiral = function(_) { + if (arguments.length) { + spiral = spirals[_] || _; + return cloud; + } else { + return spiral; + } + }; + + cloud.fontSize = function(_) { + if (arguments.length) { + fontSize = functor(_); + return cloud; + } else { + return fontSize; + } + }; + + cloud.padding = function(_) { + if (arguments.length) { + padding = functor(_); + return cloud; + } else { + return padding; + } + }; + + cloud.random = function(_) { + if (arguments.length) { + random = _; + return cloud; + } else { + return random; + } + }; + + return cloud; +} + +// Fetches a monochrome sprite bitmap for the specified text. +// Load in batches for speed. +function cloudSprite(contextAndRatio, d, data, di) { + if (d.sprite) return; + var c = contextAndRatio.context, + ratio = contextAndRatio.ratio; + + c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio); + var x = 0, + y = 0, + maxh = 0, + n = data.length, + w, w32, h, i, j; + --di; + while (++di < n) { + d = data[di]; + c.save(); + c.font = d.style + " " + d.weight + " " + ~~((d.size + 1) / ratio) + "px " + d.font; + w = c.measureText(d.text + "m").width * ratio; + h = d.size << 1; + if (d.rotate) { + var sr = Math.sin(d.rotate * cloudRadians), + cr = Math.cos(d.rotate * cloudRadians), + wcr = w * cr, + wsr = w * sr, + hcr = h * cr, + hsr = h * sr; + w = (Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f) >> 5 << 5; + h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr)); + } else { + w = (w + 0x1f) >> 5 << 5; + } + if (h > maxh) maxh = h; + if (x + w >= (cw << 5)) { + x = 0; + y += maxh; + maxh = 0; + } + if (y + h >= ch) break; + c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio); + if (d.rotate) c.rotate(d.rotate * cloudRadians); + c.fillText(d.text, 0, 0); + if (d.padding) { + c.lineWidth = 2 * d.padding; + c.strokeText(d.text, 0, 0); + } + c.restore(); + d.width = w; + d.height = h; + d.xoff = x; + d.yoff = y; + d.x1 = w >> 1; + d.y1 = h >> 1; + d.x0 = -d.x1; + d.y0 = -d.y1; + d.hasText = true; + x += w; + } + var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data, + sprite = []; + while (--di >= 0) { + d = data[di]; + if (!d.hasText) continue; + w = d.width; + w32 = w >> 5; + h = d.y1 - d.y0; + // Zero the buffer + for (i = 0; i < h * w32; i++) sprite[i] = 0; + x = d.xoff; + if (x == null) return; + y = d.yoff; + var seen = 0, + seenRow = -1; + for (j = 0; j < h; j++) { + for (i = 0; i < w; i++) { + var k = w32 * j + (i >> 5), + m = pixels[((y + j) * (cw << 5) + (x + i)) << 2] ? 1 << (31 - (i % 32)) : 0; + sprite[k] |= m; + seen |= m; + } + if (seen) seenRow = j; + else { + d.y0++; + h--; + j--; + y++; + } + } + d.y1 = d.y0 + seenRow; + d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32); + } +} + +// Use mask-based collision detection. +function cloudCollide(tag, board, sw) { + sw >>= 5; + var sprite = tag.sprite, + w = tag.width >> 5, + lx = tag.x - (w << 4), + sx = lx & 0x7f, + msx = 32 - sx, + h = tag.y1 - tag.y0, + x = (tag.y + tag.y0) * sw + (lx >> 5), + last; + for (var j = 0; j < h; j++) { + last = 0; + for (var i = 0; i <= w; i++) { + if (((last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0)) + & board[x + i]) return true; + } + x += sw; + } + return false; +} + +function cloudBounds(bounds, d) { + var b0 = bounds[0], + b1 = bounds[1]; + if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0; + if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0; + if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1; + if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1; +} + +function collideRects(a, b) { + return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y; +} + +function archimedeanSpiral(size) { + var e = size[0] / size[1]; + return function(t) { + return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)]; + }; +} + +function rectangularSpiral(size) { + var dy = 4, + dx = dy * size[0] / size[1], + x = 0, + y = 0; + return function(t) { + var sign = t < 0 ? -1 : 1; + // See triangular numbers: T_n = n * (n + 1) / 2. + switch ((Math.sqrt(1 + 4 * sign * t) - sign) & 3) { + case 0: x += dx; break; + case 1: y += dy; break; + case 2: x -= dx; break; + default: y -= dy; break; + } + return [x, y]; + }; +} + +// TODO reuse arrays? +function zeroArray(n) { + var a = [], + i = -1; + while (++i < n) a[i] = 0; + return a; +} + +function functor(d) { + return typeof d === "function" ? d : function() { return d; }; +} + +var spirals = { + archimedean: archimedeanSpiral, + rectangular: rectangularSpiral +}; + +var Output$4 = ['x', 'y', 'font', 'fontSize', 'fontStyle', 'fontWeight', 'angle']; + +var Params$1 = ['text', 'font', 'rotate', 'fontSize', 'fontStyle', 'fontWeight']; + +function Wordcloud(params) { + Transform.call(this, cloud(), params); +} + +Wordcloud.Definition = { + "type": "Wordcloud", + "metadata": {"modifies": true}, + "params": [ + { "name": "size", "type": "number", "array": true, "length": 2 }, + { "name": "font", "type": "string", "expr": true, "default": "sans-serif" }, + { "name": "fontStyle", "type": "string", "expr": true, "default": "normal" }, + { "name": "fontWeight", "type": "string", "expr": true, "default": "normal" }, + { "name": "fontSize", "type": "number", "expr": true, "default": 14 }, + { "name": "fontSizeRange", "type": "number", "array": "nullable", "default": [10, 50] }, + { "name": "rotate", "type": "number", "expr": true, "default": 0 }, + { "name": "text", "type": "field" }, + { "name": "spiral", "type": "string", "values": ["archimedean", "rectangular"] }, + { "name": "padding", "type": "number", "expr": true }, + { "name": "as", "type": "string", "array": true, "length": 7, "default": Output$4 } + ] +}; + +var prototype$1h = inherits(Wordcloud, Transform); + +prototype$1h.transform = function(_, pulse) { + if (_.size && !(_.size[0] && _.size[1])) { + error('Wordcloud size dimensions must be non-zero.'); + } + + function modp(param) { + var p = _[param]; + return isFunction(p) && pulse.modified(p.fields); + } + + var mod = _.modified(); + if (!(mod || pulse.changed(pulse.ADD_REM) || Params$1.some(modp))) return; + + var data = pulse.materialize(pulse.SOURCE).source, + layout = this.value, + as = _.as || Output$4, + fontSize = _.fontSize || 14, + range; + + isFunction(fontSize) + ? (range = _.fontSizeRange) + : (fontSize = constant(fontSize)); + + // create font size scaling function as needed + if (range) { + var fsize = fontSize, + sizeScale = scale$1('sqrt')() + .domain(extent$5(fsize, data)) + .range(range); + fontSize = function(x) { return sizeScale(fsize(x)); }; + } + + data.forEach(function(t) { + t[as[0]] = NaN; + t[as[1]] = NaN; + t[as[3]] = 0; + }); + + // configure layout + var words = layout + .words(data) + .text(_.text) + .size(_.size || [500, 500]) + .padding(_.padding || 1) + .spiral(_.spiral || 'archimedean') + .rotate(_.rotate || 0) + .font(_.font || 'sans-serif') + .fontStyle(_.fontStyle || 'normal') + .fontWeight(_.fontWeight || 'normal') + .fontSize(fontSize) + .random(random) + .layout(); + + var size = layout.size(), + dx = size[0] >> 1, + dy = size[1] >> 1, + i = 0, + n = words.length, + w, t; + + for (; i max) max = v; + } + + return [min, max]; +} + + + +var wordcloud = /*#__PURE__*/Object.freeze({ + wordcloud: Wordcloud +}); + +function array8(n) { return new Uint8Array(n); } + +function array16(n) { return new Uint16Array(n); } + +function array32(n) { return new Uint32Array(n); } + +/** + * Maintains CrossFilter state. + */ +function Bitmaps() { + + var width = 8, + data = [], + seen = array32(0), + curr = array$3(0, width), + prev = array$3(0, width); + + return { + + data: function() { return data; }, + + seen: function() { + return (seen = lengthen(seen, data.length)); + }, + + add: function(array) { + for (var i=0, j=data.length, n=array.length, t; i boolean (true => remove) + var n = data.length, + copy = Array(n - num), + reindex = data, // reuse old data array for index map + t, i, j; + + // seek forward to first removal + for (i=0; !map[i] && i k || m > width) { + width = Math.max(m, width); + curr = array$3(n, width, curr); + prev = array$3(n, width); + } + } + }; +} + +function lengthen(array, length, copy) { + if (array.length >= length) return array; + copy = copy || new array.constructor(length); + copy.set(array); + return copy; +} + +function array$3(n, m, array) { + var copy = (m < 0x101 ? array8 : m < 0x10001 ? array16 : array32)(n); + if (array) copy.set(array); + return copy; +} + +function Dimension(index, i, query) { + var bit = (1 << i); + + return { + one: bit, + zero: ~bit, + range: query.slice(), + bisect: index.bisect, + index: index.index, + size: index.size, + + onAdd: function(added, curr) { + var dim = this, + range = dim.bisect(dim.range, added.value), + idx = added.index, + lo = range[0], + hi = range[1], + n1 = idx.length, i; + + for (i=0; i b ? 1 : a >= b ? 0 : NaN; +} + +function bisector$9(compare) { + if (compare.length === 1) compare = ascendingComparator$9(compare); + return { + left: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) < 0) lo = mid + 1; + else hi = mid; + } + return lo; + }, + right: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) > 0) hi = mid; + else lo = mid + 1; + } + return lo; + } + }; +} + +function ascendingComparator$9(f) { + return function(d, x) { + return ascending$a(f(d), x); + }; +} + +var ascendingBisect$9 = bisector$9(ascending$a); +var bisectRight$2 = ascendingBisect$9.right; +var bisectLeft = ascendingBisect$9.left; + +function permute(source, keys) { + return Array.from(keys, key => source[key]); +} + +/** + * Maintains a list of values, sorted by key. + */ +function SortedIndex() { + var index = array32(0), + value = [], + size = 0; + + function insert(key, data, base) { + if (!data.length) return []; + + var n0 = size, + n1 = data.length, + addv = Array(n1), + addi = array32(n1), + oldv, oldi, i; + + for (i=0; i 0) for (i=0; i remove + var n = size, + idx, i, j; + + // seek forward to first removal + for (i=0; !map[index[i]] && i y ? 1 : 0; + }); + return permute(values, index); +} + +function merge$2(base, value0, index0, n0, value1, index1, n1, value, index) { + var i0 = 0, i1 = 0, i; + + for (i=0; i0 < n0 && i1 < n1; ++i) { + if (value0[i0] < value1[i1]) { + value[i] = value0[i0]; + index[i] = index0[i0++]; + } else { + value[i] = value1[i1]; + index[i] = index1[i1++] + base; + } + } + + for (; i0 < n0; ++i0, ++i) { + value[i] = value0[i0]; + index[i] = index0[i0]; + } + + for (; i1 < n1; ++i1, ++i) { + value[i] = value1[i1]; + index[i] = index1[i1] + base; + } +} + +/** + * An indexed multi-dimensional filter. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {Array} params.fields - An array of dimension accessors to filter. + * @param {Array} params.query - An array of per-dimension range queries. + */ +function CrossFilter(params) { + Transform.call(this, Bitmaps(), params); + this._indices = null; + this._dims = null; +} + +CrossFilter.Definition = { + "type": "CrossFilter", + "metadata": {}, + "params": [ + { "name": "fields", "type": "field", "array": true, "required": true }, + { "name": "query", "type": "array", "array": true, "required": true, + "content": {"type": "number", "array": true, "length": 2} } + ] +}; + +var prototype$1i = inherits(CrossFilter, Transform); + +prototype$1i.transform = function(_, pulse) { + if (!this._dims) { + return this.init(_, pulse); + } else { + var init = _.modified('fields') + || _.fields.some(function(f) { return pulse.modified(f.fields); }); + + return init + ? this.reinit(_, pulse) + : this.eval(_, pulse); + } +}; + +prototype$1i.init = function(_, pulse) { + var fields = _.fields, + query = _.query, + indices = this._indices = {}, + dims = this._dims = [], + m = query.length, + i = 0, key, index; + + // instantiate indices and dimensions + for (; i lo0) { + for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) { + k = index[i]; + if (seen[k] !== stamp) { + prev[k] = curr[k]; + seen[k] = stamp; + out.push(k); + } + curr[k] ^= one; + } + } + + // Fast incremental update based on previous hi index. + if (hi1 > hi0) { + for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) { + k = index[i]; + if (seen[k] !== stamp) { + prev[k] = curr[k]; + seen[k] = stamp; + out.push(k); + } + curr[k] ^= one; + } + } else if (hi1 < hi0) { + for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) { + k = index[i]; + if (seen[k] !== stamp) { + prev[k] = curr[k]; + seen[k] = stamp; + out.push(k); + } + curr[k] ^= one; + } + } + + dim.range = query.slice(); +}; + +prototype$1i.incrementOne = function(dim, query, add, rem) { + var bits = this.value, + curr = bits.curr(), + index = dim.index(), + old = dim.bisect(dim.range), + range = dim.bisect(query), + lo1 = range[0], + hi1 = range[1], + lo0 = old[0], + hi0 = old[1], + one = dim.one, + i, j, k; + + // Fast incremental update based on previous lo index. + if (lo1 < lo0) { + for (i = lo1, j = Math.min(lo0, hi1); i < j; ++i) { + k = index[i]; + curr[k] ^= one; + add.push(k); + } + } else if (lo1 > lo0) { + for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) { + k = index[i]; + curr[k] ^= one; + rem.push(k); + } + } + + // Fast incremental update based on previous hi index. + if (hi1 > hi0) { + for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) { + k = index[i]; + curr[k] ^= one; + add.push(k); + } + } else if (hi1 < hi0) { + for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) { + k = index[i]; + curr[k] ^= one; + rem.push(k); + } + } + + dim.range = query.slice(); +}; + +/** + * Selectively filters tuples by resolving against a filter bitmap. + * Useful for processing the output of a cross-filter transform. + * @constructor + * @param {object} params - The parameters for this operator. + * @param {object} params.ignore - A bit mask indicating which filters to ignore. + * @param {object} params.filter - The per-tuple filter bitmaps. Typically this + * parameter value is a reference to a {@link CrossFilter} transform. + */ +function ResolveFilter(params) { + Transform.call(this, null, params); +} + +ResolveFilter.Definition = { + "type": "ResolveFilter", + "metadata": {}, + "params": [ + { "name": "ignore", "type": "number", "required": true, + "description": "A bit mask indicating which filters to ignore." }, + { "name": "filter", "type": "object", "required": true, + "description": "Per-tuple filter bitmaps from a CrossFilter transform." } + ] +}; + +var prototype$1j = inherits(ResolveFilter, Transform); + +prototype$1j.transform = function(_, pulse) { + var ignore = ~(_.ignore || 0), // bit mask where zeros -> dims to ignore + bitmap = _.filter, + mask = bitmap.mask; + + // exit early if no relevant filter changes + if ((mask & ignore) === 0) return pulse.StopPropagation; + + var output = pulse.fork(pulse.ALL), + data = bitmap.data(), + curr = bitmap.curr(), + prev = bitmap.prev(), + pass = function(k) { + return !(curr[k] & ignore) ? data[k] : null; + }; + + // propagate all mod tuples that pass the filter + output.filter(output.MOD, pass); + + // determine add & rem tuples via filter functions + // for efficiency, we do *not* populate new arrays, + // instead we add filter functions applied downstream + + if (!(mask & (mask-1))) { // only one filter changed + output.filter(output.ADD, pass); + output.filter(output.REM, function(k) { + return (curr[k] & ignore) === mask ? data[k] : null; + }); + + } else { // multiple filters changed + output.filter(output.ADD, function(k) { + var c = curr[k] & ignore, + f = !c && (c ^ (prev[k] & ignore)); + return f ? data[k] : null; + }); + output.filter(output.REM, function(k) { + var c = curr[k] & ignore, + f = c && !(c ^ (c ^ (prev[k] & ignore))); + return f ? data[k] : null; + }); + } + + // add filter to source data in case of reflow... + return output.filter(output.SOURCE, function(t) { return pass(t._index); }); +}; + + + +var xf = /*#__PURE__*/Object.freeze({ + crossfilter: CrossFilter, + resolvefilter: ResolveFilter +}); + +var Default = 'default'; + +function cursor(view) { + var cursor = view._signals.cursor; + + // add cursor signal to dataflow, if needed + if (!cursor) { + view._signals.cursor = (cursor = view.add({user: Default, item: null})); + } + + // evaluate cursor on each mousemove event + view.on(view.events('view', 'mousemove'), cursor, + function(_, event) { + var value = cursor.value, + user = value ? (isString(value) ? value : value.user) : Default, + item = event.item && event.item.cursor || null; + + return (value && user === value.user && item == value.item) ? value + : {user: user, item: item}; + } + ); + + // when cursor signal updates, set visible cursor + view.add(null, function(_) { + var user = _.cursor, + item = this.value; + + if (!isString(user)) { + item = user.item; + user = user.user; + } + + setCursor(user && user !== Default ? user : (item || user)); + + return item; + }, {cursor: cursor}); +} + +function setCursor(cursor) { + // set cursor on document body + // this ensures cursor applies even if dragging out of view + if (typeof document !== 'undefined' && document.body) { + document.body.style.cursor = cursor; + } +} + +function dataref(view, name) { + var data = view._runtime.data; + if (!data.hasOwnProperty(name)) { + error('Unrecognized data set: ' + name); + } + return data[name]; +} + +function data(name) { + return dataref(this, name).values.value; +} + +function change(name, changes) { + if (!isChangeSet(changes)) { + error('Second argument to changes must be a changeset.'); + } + var dataset = dataref(this, name); + dataset.modified = true; + return this.pulse(dataset.input, changes); +} + +function insert(name, _) { + return change.call(this, name, changeset().insert(_)); +} + +function remove(name, _) { + return change.call(this, name, changeset().remove(_)); +} + +function width(view) { + var padding = view.padding(); + return Math.max(0, view._viewWidth + padding.left + padding.right); +} + +function height(view) { + var padding = view.padding(); + return Math.max(0, view._viewHeight + padding.top + padding.bottom); +} + +function offset$1(view) { + var padding = view.padding(), + origin = view._origin; + return [ + padding.left + origin[0], + padding.top + origin[1] + ]; +} + +function resizeRenderer(view) { + var origin = offset$1(view), + w = width(view), + h = height(view); + + view._renderer.background(view._background); + view._renderer.resize(w, h, origin); + view._handler.origin(origin); + + view._resizeListeners.forEach(function(handler) { + try { + handler(w, h); + } catch (error) { + view.error(error); + } + }); +} + +/** + * Extend an event with additional view-specific methods. + * Adds a new property ('vega') to an event that provides a number + * of methods for querying information about the current interaction. + * The vega object provides the following methods: + * view - Returns the backing View instance. + * item - Returns the currently active scenegraph item (if any). + * group - Returns the currently active scenegraph group (if any). + * This method accepts a single string-typed argument indicating the name + * of the desired parent group. The scenegraph will be traversed from + * the item up towards the root to search for a matching group. If no + * argument is provided the enclosing group for the active item is + * returned, unless the item it itself a group, in which case it is + * returned directly. + * xy - Returns a two-element array containing the x and y coordinates for + * mouse or touch events. For touch events, this is based on the first + * elements in the changedTouches array. This method accepts a single + * argument: either an item instance or mark name that should serve as + * the reference coordinate system. If no argument is provided the + * top-level view coordinate system is assumed. + * x - Returns the current x-coordinate, accepts the same arguments as xy. + * y - Returns the current y-coordinate, accepts the same arguments as xy. + * @param {Event} event - The input event to extend. + * @param {Item} item - The currently active scenegraph item (if any). + * @return {Event} - The extended input event. + */ +function eventExtend(view, event, item) { + var r = view._renderer, + el = r && r.canvas(), + p, e, translate; + + if (el) { + translate = offset$1(view); + e = event.changedTouches ? event.changedTouches[0] : event; + p = point$4(e, el); + p[0] -= translate[0]; + p[1] -= translate[1]; + } + + event.dataflow = view; + event.item = item; + event.vega = extension(view, item, p); + return event; +} + +function extension(view, item, point) { + var itemGroup = item + ? item.mark.marktype === 'group' ? item : item.mark.group + : null; + + function group(name) { + var g = itemGroup, i; + if (name) for (i = item; i; i = i.mark.group) { + if (i.mark.name === name) { g = i; break; } + } + return g && g.mark && g.mark.interactive ? g : {}; + } + + function xy(item) { + if (!item) return point; + if (isString(item)) item = group(item); + + var p = point.slice(); + while (item) { + p[0] -= item.x || 0; + p[1] -= item.y || 0; + item = item.mark && item.mark.group; + } + return p; + } + + return { + view: constant(view), + item: constant(item || {}), + group: group, + xy: xy, + x: function(item) { return xy(item)[0]; }, + y: function(item) { return xy(item)[1]; } + }; +} + +var VIEW = 'view', + TIMER = 'timer', + WINDOW = 'window', + NO_TRAP = {trap: false}; + +/** + * Initialize event handling configuration. + * @param {object} config - The configuration settings. + * @return {object} + */ +function initializeEventConfig(config) { + config = extend({}, config); + + var def = config.defaults; + if (def) { + if (isArray(def.prevent)) { + def.prevent = toSet(def.prevent); + } + if (isArray(def.allow)) { + def.allow = toSet(def.allow); + } + } + + return config; +} + +function prevent(view, type) { + var def = view._eventConfig.defaults, + prevent = def && def.prevent, + allow = def && def.allow; + + return prevent === false || allow === true ? false + : prevent === true || allow === false ? true + : prevent ? prevent[type] + : allow ? !allow[type] + : view.preventDefault(); +} + +/** + * Create a new event stream from an event source. + * @param {object} source - The event source to monitor. + * @param {string} type - The event type. + * @param {function(object): boolean} [filter] - Event filter function. + * @return {EventStream} + */ +function events$1(source, type, filter) { + var view = this, + s = new EventStream(filter), + send = function(e, item) { + view.runAsync(null, () => { + if (source === VIEW && prevent(view, type)) { + e.preventDefault(); + } + s.receive(eventExtend(view, e, item)); + }); + }, + sources; + + if (source === TIMER) { + view.timer(send, type); + } + + else if (source === VIEW) { + // send traps errors, so use {trap: false} option + view.addEventListener(type, send, NO_TRAP); + } + + else { + if (source === WINDOW) { + if (typeof window !== 'undefined') sources = [window]; + } else if (typeof document !== 'undefined') { + sources = document.querySelectorAll(source); + } + + if (!sources) { + view.warn('Can not resolve event source: ' + source); + } else { + for (var i=0, n=sources.length; i= 0) { + timers[n].stop(); + } + + n = listeners.length; + while (--n >= 0) { + e = listeners[n]; + m = e.sources.length; + while (--m >= 0) { + e.sources[m].removeEventListener(e.type, e.handler); + } + } + + if (tooltip) { + tooltip.call(this, this._handler, null, null, null); + } + + return this; +} + +function element$1(tag, attr, text) { + var el = document.createElement(tag); + for (var key in attr) el.setAttribute(key, attr[key]); + if (text != null) el.textContent = text; + return el; +} + +function ascending$b(a, b) { + return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; +} + +function bisector$a(compare) { + if (compare.length === 1) compare = ascendingComparator$a(compare); + return { + left: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) < 0) lo = mid + 1; + else hi = mid; + } + return lo; + }, + right: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) > 0) hi = mid; + else lo = mid + 1; + } + return lo; + } + }; +} + +function ascendingComparator$a(f) { + return function(d, x) { + return ascending$b(f(d), x); + }; +} + +var ascendingBisect$a = bisector$a(ascending$b); + +var e10$2 = Math.sqrt(50), + e5$2 = Math.sqrt(10), + e2$2 = Math.sqrt(2); + +function tickStep$2(start, stop, count) { + var step0 = Math.abs(stop - start) / Math.max(0, count), + step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)), + error = step0 / step1; + if (error >= e10$2) step1 *= 10; + else if (error >= e5$2) step1 *= 5; + else if (error >= e2$2) step1 *= 2; + return stop < start ? -step1 : step1; +} + +var BindClass = 'vega-bind', + NameClass = 'vega-bind-name', + RadioClass = 'vega-bind-radio', + OptionClass = 'vega-option-'; + +/** + * Bind a signal to an external HTML input element. The resulting two-way + * binding will propagate input changes to signals, and propagate signal + * changes to the input element state. If this view instance has no parent + * element, we assume the view is headless and no bindings are created. + * @param {Element|string} el - The parent DOM element to which the input + * element should be appended as a child. If string-valued, this argument + * will be treated as a CSS selector. If null or undefined, the parent + * element of this view will be used as the element. + * @param {object} param - The binding parameters which specify the signal + * to bind to, the input element type, and type-specific configuration. + * @return {View} - This view instance. + */ +function bind$1(view, el, binding) { + if (!el) return; + + var param = binding.param, + bind = binding.state; + + if (!bind) { + bind = binding.state = { + elements: null, + active: false, + set: null, + update: function(value) { + if (value !== view.signal(param.signal)) { + view.runAsync(null, function() { + bind.source = true; + view.signal(param.signal, value); + }); + } + } + }; + if (param.debounce) { + bind.update = debounce(param.debounce, bind.update); + } + } + + generate(bind, el, param, view.signal(param.signal)); + + if (!bind.active) { + view.on(view._signals[param.signal], null, function() { + bind.source + ? (bind.source = false) + : bind.set(view.signal(param.signal)); + }); + bind.active = true; + } + + return bind; +} + +/** + * Generate an HTML input form element and bind it to a signal. + */ +function generate(bind, el, param, value) { + var div = element$1('div', {'class': BindClass}); + + div.appendChild(element$1('span', + {'class': NameClass}, + (param.name || param.signal) + )); + + el.appendChild(div); + + var input = form; + switch (param.input) { + case 'checkbox': input = checkbox; break; + case 'select': input = select; break; + case 'radio': input = radio; break; + case 'range': input = range$4; break; + } + + input(bind, div, param, value); +} + +/** + * Generates an arbitrary input form element. + * The input type is controlled via user-provided parameters. + */ +function form(bind, el, param, value) { + var node = element$1('input'); + + for (var key in param) { + if (key !== 'signal' && key !== 'element') { + node.setAttribute(key === 'input' ? 'type' : key, param[key]); + } + } + node.setAttribute('name', param.signal); + node.value = value; + + el.appendChild(node); + + node.addEventListener('input', function() { + bind.update(node.value); + }); + + bind.elements = [node]; + bind.set = function(value) { node.value = value; }; +} + +/** + * Generates a checkbox input element. + */ +function checkbox(bind, el, param, value) { + var attr = {type: 'checkbox', name: param.signal}; + if (value) attr.checked = true; + var node = element$1('input', attr); + + el.appendChild(node); + + node.addEventListener('change', function() { + bind.update(node.checked); + }); + + bind.elements = [node]; + bind.set = function(value) { node.checked = !!value || null; }; +} + +/** + * Generates a selection list input element. + */ +function select(bind, el, param, value) { + var node = element$1('select', {name: param.signal}); + + param.options.forEach(function(option) { + var attr = {value: option}; + if (valuesEqual(option, value)) attr.selected = true; + node.appendChild(element$1('option', attr, option+'')); + }); + + el.appendChild(node); + + node.addEventListener('change', function() { + bind.update(param.options[node.selectedIndex]); + }); + + bind.elements = [node]; + bind.set = function(value) { + for (var i=0, n=param.options.length; i + Copyright (C) 2013 Thaddee Tyl + Copyright (C) 2013 Mathias Bynens + Copyright (C) 2012 Ariya Hidayat + Copyright (C) 2012 Mathias Bynens + Copyright (C) 2012 Joost-Wim Boekesteijn + Copyright (C) 2012 Kris Kowal + Copyright (C) 2012 Yusuke Suzuki + Copyright (C) 2012 Arpad Borsos + Copyright (C) 2011 Ariya Hidayat + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +var TokenName, + source$1, + index$1, + length, + lookahead; + +var TokenBooleanLiteral = 1, + TokenEOF = 2, + TokenIdentifier = 3, + TokenKeyword = 4, + TokenNullLiteral = 5, + TokenNumericLiteral = 6, + TokenPunctuator = 7, + TokenStringLiteral = 8, + TokenRegularExpression = 9; + +TokenName = {}; +TokenName[TokenBooleanLiteral] = 'Boolean'; +TokenName[TokenEOF] = ''; +TokenName[TokenIdentifier] = 'Identifier'; +TokenName[TokenKeyword] = 'Keyword'; +TokenName[TokenNullLiteral] = 'Null'; +TokenName[TokenNumericLiteral] = 'Numeric'; +TokenName[TokenPunctuator] = 'Punctuator'; +TokenName[TokenStringLiteral] = 'String'; +TokenName[TokenRegularExpression] = 'RegularExpression'; + +var SyntaxArrayExpression = 'ArrayExpression', + SyntaxBinaryExpression = 'BinaryExpression', + SyntaxCallExpression = 'CallExpression', + SyntaxConditionalExpression = 'ConditionalExpression', + SyntaxIdentifier = 'Identifier', + SyntaxLiteral = 'Literal', + SyntaxLogicalExpression = 'LogicalExpression', + SyntaxMemberExpression = 'MemberExpression', + SyntaxObjectExpression = 'ObjectExpression', + SyntaxProperty = 'Property', + SyntaxUnaryExpression = 'UnaryExpression'; + +// Error messages should be identical to V8. +var MessageUnexpectedToken = 'Unexpected token %0', + MessageUnexpectedNumber = 'Unexpected number', + MessageUnexpectedString = 'Unexpected string', + MessageUnexpectedIdentifier = 'Unexpected identifier', + MessageUnexpectedReserved = 'Unexpected reserved word', + MessageUnexpectedEOS = 'Unexpected end of input', + MessageInvalidRegExp = 'Invalid regular expression', + MessageUnterminatedRegExp = 'Invalid regular expression: missing /', + MessageStrictOctalLiteral = 'Octal literals are not allowed in strict mode.', + MessageStrictDuplicateProperty = 'Duplicate data property in object literal not allowed in strict mode'; + +var ILLEGAL = 'ILLEGAL', + DISABLED = 'Disabled.'; + +// See also tools/generate-unicode-regex.py. + var RegexNonAsciiIdentifierStart = new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"), + RegexNonAsciiIdentifierPart = new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"); + +// Ensure the condition is true, otherwise throw an error. +// This is only to have a better contract semantic, i.e. another safety net +// to catch a logic error. The condition shall be fulfilled in normal case. +// Do NOT use this to enforce a certain condition on any user input. + +function assert(condition, message) { + /* istanbul ignore next */ + if (!condition) { + throw new Error('ASSERT: ' + message); + } +} + +function isDecimalDigit(ch) { + return (ch >= 0x30 && ch <= 0x39); // 0..9 +} + +function isHexDigit(ch) { + return '0123456789abcdefABCDEF'.indexOf(ch) >= 0; +} + +function isOctalDigit(ch) { + return '01234567'.indexOf(ch) >= 0; +} + +// 7.2 White Space + +function isWhiteSpace(ch) { + return (ch === 0x20) || (ch === 0x09) || (ch === 0x0B) || (ch === 0x0C) || (ch === 0xA0) || + (ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0); +} + +// 7.3 Line Terminators + +function isLineTerminator(ch) { + return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029); +} + +// 7.6 Identifier Names and Identifiers + +function isIdentifierStart(ch) { + return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore) + (ch >= 0x41 && ch <= 0x5A) || // A..Z + (ch >= 0x61 && ch <= 0x7A) || // a..z + (ch === 0x5C) || // \ (backslash) + ((ch >= 0x80) && RegexNonAsciiIdentifierStart.test(String.fromCharCode(ch))); +} + +function isIdentifierPart(ch) { + return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore) + (ch >= 0x41 && ch <= 0x5A) || // A..Z + (ch >= 0x61 && ch <= 0x7A) || // a..z + (ch >= 0x30 && ch <= 0x39) || // 0..9 + (ch === 0x5C) || // \ (backslash) + ((ch >= 0x80) && RegexNonAsciiIdentifierPart.test(String.fromCharCode(ch))); +} + +// 7.6.1.1 Keywords + +var keywords = { + 'if':1, 'in':1, 'do':1, + 'var':1, 'for':1, 'new':1, 'try':1, 'let':1, + 'this':1, 'else':1, 'case':1, 'void':1, 'with':1, 'enum':1, + 'while':1, 'break':1, 'catch':1, 'throw':1, 'const':1, 'yield':1, 'class':1, 'super':1, + 'return':1, 'typeof':1, 'delete':1, 'switch':1, 'export':1, 'import':1, 'public':1, 'static':1, + 'default':1, 'finally':1, 'extends':1, 'package':1, 'private':1, + 'function':1, 'continue':1, 'debugger':1, + 'interface':1, 'protected':1, + 'instanceof':1, 'implements':1 +}; + +function skipComment() { + var ch; + + while (index$1 < length) { + ch = source$1.charCodeAt(index$1); + + if (isWhiteSpace(ch) || isLineTerminator(ch)) { + ++index$1; + } else { + break; + } + } +} + +function scanHexEscape(prefix) { + var i, len, ch, code = 0; + + len = (prefix === 'u') ? 4 : 2; + for (i = 0; i < len; ++i) { + if (index$1 < length && isHexDigit(source$1[index$1])) { + ch = source$1[index$1++]; + code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase()); + } else { + throwError({}, MessageUnexpectedToken, ILLEGAL); + } + } + return String.fromCharCode(code); +} + +function scanUnicodeCodePointEscape() { + var ch, code, cu1, cu2; + + ch = source$1[index$1]; + code = 0; + + // At least, one hex digit is required. + if (ch === '}') { + throwError({}, MessageUnexpectedToken, ILLEGAL); + } + + while (index$1 < length) { + ch = source$1[index$1++]; + if (!isHexDigit(ch)) { + break; + } + code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase()); + } + + if (code > 0x10FFFF || ch !== '}') { + throwError({}, MessageUnexpectedToken, ILLEGAL); + } + + // UTF-16 Encoding + if (code <= 0xFFFF) { + return String.fromCharCode(code); + } + cu1 = ((code - 0x10000) >> 10) + 0xD800; + cu2 = ((code - 0x10000) & 1023) + 0xDC00; + return String.fromCharCode(cu1, cu2); +} + +function getEscapedIdentifier() { + var ch, id; + + ch = source$1.charCodeAt(index$1++); + id = String.fromCharCode(ch); + + // '\u' (U+005C, U+0075) denotes an escaped character. + if (ch === 0x5C) { + if (source$1.charCodeAt(index$1) !== 0x75) { + throwError({}, MessageUnexpectedToken, ILLEGAL); + } + ++index$1; + ch = scanHexEscape('u'); + if (!ch || ch === '\\' || !isIdentifierStart(ch.charCodeAt(0))) { + throwError({}, MessageUnexpectedToken, ILLEGAL); + } + id = ch; + } + + while (index$1 < length) { + ch = source$1.charCodeAt(index$1); + if (!isIdentifierPart(ch)) { + break; + } + ++index$1; + id += String.fromCharCode(ch); + + // '\u' (U+005C, U+0075) denotes an escaped character. + if (ch === 0x5C) { + id = id.substr(0, id.length - 1); + if (source$1.charCodeAt(index$1) !== 0x75) { + throwError({}, MessageUnexpectedToken, ILLEGAL); + } + ++index$1; + ch = scanHexEscape('u'); + if (!ch || ch === '\\' || !isIdentifierPart(ch.charCodeAt(0))) { + throwError({}, MessageUnexpectedToken, ILLEGAL); + } + id += ch; + } + } + + return id; +} + +function getIdentifier() { + var start, ch; + + start = index$1++; + while (index$1 < length) { + ch = source$1.charCodeAt(index$1); + if (ch === 0x5C) { + // Blackslash (U+005C) marks Unicode escape sequence. + index$1 = start; + return getEscapedIdentifier(); + } + if (isIdentifierPart(ch)) { + ++index$1; + } else { + break; + } + } + + return source$1.slice(start, index$1); +} + +function scanIdentifier() { + var start, id, type; + + start = index$1; + + // Backslash (U+005C) starts an escaped character. + id = (source$1.charCodeAt(index$1) === 0x5C) ? getEscapedIdentifier() : getIdentifier(); + + // There is no keyword or literal with only one character. + // Thus, it must be an identifier. + if (id.length === 1) { + type = TokenIdentifier; + } else if (keywords.hasOwnProperty(id)) { + type = TokenKeyword; + } else if (id === 'null') { + type = TokenNullLiteral; + } else if (id === 'true' || id === 'false') { + type = TokenBooleanLiteral; + } else { + type = TokenIdentifier; + } + + return { + type: type, + value: id, + start: start, + end: index$1 + }; +} + +// 7.7 Punctuators + +function scanPunctuator() { + var start = index$1, + code = source$1.charCodeAt(index$1), + code2, + ch1 = source$1[index$1], + ch2, + ch3, + ch4; + + switch (code) { + + // Check for most common single-character punctuators. + case 0x2E: // . dot + case 0x28: // ( open bracket + case 0x29: // ) close bracket + case 0x3B: // ; semicolon + case 0x2C: // , comma + case 0x7B: // { open curly brace + case 0x7D: // } close curly brace + case 0x5B: // [ + case 0x5D: // ] + case 0x3A: // : + case 0x3F: // ? + case 0x7E: // ~ + ++index$1; + return { + type: TokenPunctuator, + value: String.fromCharCode(code), + start: start, + end: index$1 + }; + + default: + code2 = source$1.charCodeAt(index$1 + 1); + + // '=' (U+003D) marks an assignment or comparison operator. + if (code2 === 0x3D) { + switch (code) { + case 0x2B: // + + case 0x2D: // - + case 0x2F: // / + case 0x3C: // < + case 0x3E: // > + case 0x5E: // ^ + case 0x7C: // | + case 0x25: // % + case 0x26: // & + case 0x2A: // * + index$1 += 2; + return { + type: TokenPunctuator, + value: String.fromCharCode(code) + String.fromCharCode(code2), + start: start, + end: index$1 + }; + + case 0x21: // ! + case 0x3D: // = + index$1 += 2; + + // !== and === + if (source$1.charCodeAt(index$1) === 0x3D) { + ++index$1; + } + return { + type: TokenPunctuator, + value: source$1.slice(start, index$1), + start: start, + end: index$1 + }; + } + } + } + + // 4-character punctuator: >>>= + + ch4 = source$1.substr(index$1, 4); + + if (ch4 === '>>>=') { + index$1 += 4; + return { + type: TokenPunctuator, + value: ch4, + start: start, + end: index$1 + }; + } + + // 3-character punctuators: === !== >>> <<= >>= + + ch3 = ch4.substr(0, 3); + + if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') { + index$1 += 3; + return { + type: TokenPunctuator, + value: ch3, + start: start, + end: index$1 + }; + } + + // Other 2-character punctuators: ++ -- << >> && || + ch2 = ch3.substr(0, 2); + + if ((ch1 === ch2[1] && ('+-<>&|'.indexOf(ch1) >= 0)) || ch2 === '=>') { + index$1 += 2; + return { + type: TokenPunctuator, + value: ch2, + start: start, + end: index$1 + }; + } + + // 1-character punctuators: < > = ! + - * % & | ^ / + + if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) { + ++index$1; + return { + type: TokenPunctuator, + value: ch1, + start: start, + end: index$1 + }; + } + + throwError({}, MessageUnexpectedToken, ILLEGAL); +} + +// 7.8.3 Numeric Literals + +function scanHexLiteral(start) { + var number = ''; + + while (index$1 < length) { + if (!isHexDigit(source$1[index$1])) { + break; + } + number += source$1[index$1++]; + } + + if (number.length === 0) { + throwError({}, MessageUnexpectedToken, ILLEGAL); + } + + if (isIdentifierStart(source$1.charCodeAt(index$1))) { + throwError({}, MessageUnexpectedToken, ILLEGAL); + } + + return { + type: TokenNumericLiteral, + value: parseInt('0x' + number, 16), + start: start, + end: index$1 + }; +} + +function scanOctalLiteral(start) { + var number = '0' + source$1[index$1++]; + while (index$1 < length) { + if (!isOctalDigit(source$1[index$1])) { + break; + } + number += source$1[index$1++]; + } + + if (isIdentifierStart(source$1.charCodeAt(index$1)) || isDecimalDigit(source$1.charCodeAt(index$1))) { + throwError({}, MessageUnexpectedToken, ILLEGAL); + } + + return { + type: TokenNumericLiteral, + value: parseInt(number, 8), + octal: true, + start: start, + end: index$1 + }; +} + +function scanNumericLiteral() { + var number, start, ch; + + ch = source$1[index$1]; + assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'), + 'Numeric literal must start with a decimal digit or a decimal point'); + + start = index$1; + number = ''; + if (ch !== '.') { + number = source$1[index$1++]; + ch = source$1[index$1]; + + // Hex number starts with '0x'. + // Octal number starts with '0'. + if (number === '0') { + if (ch === 'x' || ch === 'X') { + ++index$1; + return scanHexLiteral(start); + } + if (isOctalDigit(ch)) { + return scanOctalLiteral(start); + } + + // decimal number starts with '0' such as '09' is illegal. + if (ch && isDecimalDigit(ch.charCodeAt(0))) { + throwError({}, MessageUnexpectedToken, ILLEGAL); + } + } + + while (isDecimalDigit(source$1.charCodeAt(index$1))) { + number += source$1[index$1++]; + } + ch = source$1[index$1]; + } + + if (ch === '.') { + number += source$1[index$1++]; + while (isDecimalDigit(source$1.charCodeAt(index$1))) { + number += source$1[index$1++]; + } + ch = source$1[index$1]; + } + + if (ch === 'e' || ch === 'E') { + number += source$1[index$1++]; + + ch = source$1[index$1]; + if (ch === '+' || ch === '-') { + number += source$1[index$1++]; + } + if (isDecimalDigit(source$1.charCodeAt(index$1))) { + while (isDecimalDigit(source$1.charCodeAt(index$1))) { + number += source$1[index$1++]; + } + } else { + throwError({}, MessageUnexpectedToken, ILLEGAL); + } + } + + if (isIdentifierStart(source$1.charCodeAt(index$1))) { + throwError({}, MessageUnexpectedToken, ILLEGAL); + } + + return { + type: TokenNumericLiteral, + value: parseFloat(number), + start: start, + end: index$1 + }; +} + +// 7.8.4 String Literals + +function scanStringLiteral() { + var str = '', + quote, start, ch, code, octal = false; + + quote = source$1[index$1]; + assert((quote === '\'' || quote === '"'), + 'String literal must starts with a quote'); + + start = index$1; + ++index$1; + + while (index$1 < length) { + ch = source$1[index$1++]; + + if (ch === quote) { + quote = ''; + break; + } else if (ch === '\\') { + ch = source$1[index$1++]; + if (!ch || !isLineTerminator(ch.charCodeAt(0))) { + switch (ch) { + case 'u': + case 'x': + if (source$1[index$1] === '{') { + ++index$1; + str += scanUnicodeCodePointEscape(); + } else { + str += scanHexEscape(ch); + } + break; + case 'n': + str += '\n'; + break; + case 'r': + str += '\r'; + break; + case 't': + str += '\t'; + break; + case 'b': + str += '\b'; + break; + case 'f': + str += '\f'; + break; + case 'v': + str += '\x0B'; + break; + + default: + if (isOctalDigit(ch)) { + code = '01234567'.indexOf(ch); + + // \0 is not octal escape sequence + if (code !== 0) { + octal = true; + } + + if (index$1 < length && isOctalDigit(source$1[index$1])) { + octal = true; + code = code * 8 + '01234567'.indexOf(source$1[index$1++]); + + // 3 digits are only allowed when string starts + // with 0, 1, 2, 3 + if ('0123'.indexOf(ch) >= 0 && + index$1 < length && + isOctalDigit(source$1[index$1])) { + code = code * 8 + '01234567'.indexOf(source$1[index$1++]); + } + } + str += String.fromCharCode(code); + } else { + str += ch; + } + break; + } + } else { + if (ch === '\r' && source$1[index$1] === '\n') { + ++index$1; + } + } + } else if (isLineTerminator(ch.charCodeAt(0))) { + break; + } else { + str += ch; + } + } + + if (quote !== '') { + throwError({}, MessageUnexpectedToken, ILLEGAL); + } + + return { + type: TokenStringLiteral, + value: str, + octal: octal, + start: start, + end: index$1 + }; +} + +function testRegExp(pattern, flags) { + var tmp = pattern; + + if (flags.indexOf('u') >= 0) { + // Replace each astral symbol and every Unicode code point + // escape sequence with a single ASCII symbol to avoid throwing on + // regular expressions that are only valid in combination with the + // `/u` flag. + // Note: replacing with the ASCII symbol `x` might cause false + // negatives in unlikely scenarios. For example, `[\u{61}-b]` is a + // perfectly valid pattern that is equivalent to `[a-b]`, but it + // would be replaced by `[x-b]` which throws an error. + tmp = tmp + .replace(/\\u\{([0-9a-fA-F]+)\}/g, function($0, $1) { + if (parseInt($1, 16) <= 0x10FFFF) { + return 'x'; + } + throwError({}, MessageInvalidRegExp); + }) + .replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, 'x'); + } + + // First, detect invalid regular expressions. + try { + } catch (e) { + throwError({}, MessageInvalidRegExp); + } + + // Return a regular expression object for this pattern-flag pair, or + // `null` in case the current environment doesn't support the flags it + // uses. + try { + return new RegExp(pattern, flags); + } catch (exception) { + return null; + } +} + +function scanRegExpBody() { + var ch, str, classMarker, terminated, body; + + ch = source$1[index$1]; + assert(ch === '/', 'Regular expression literal must start with a slash'); + str = source$1[index$1++]; + + classMarker = false; + terminated = false; + while (index$1 < length) { + ch = source$1[index$1++]; + str += ch; + if (ch === '\\') { + ch = source$1[index$1++]; + // ECMA-262 7.8.5 + if (isLineTerminator(ch.charCodeAt(0))) { + throwError({}, MessageUnterminatedRegExp); + } + str += ch; + } else if (isLineTerminator(ch.charCodeAt(0))) { + throwError({}, MessageUnterminatedRegExp); + } else if (classMarker) { + if (ch === ']') { + classMarker = false; + } + } else { + if (ch === '/') { + terminated = true; + break; + } else if (ch === '[') { + classMarker = true; + } + } + } + + if (!terminated) { + throwError({}, MessageUnterminatedRegExp); + } + + // Exclude leading and trailing slash. + body = str.substr(1, str.length - 2); + return { + value: body, + literal: str + }; +} + +function scanRegExpFlags() { + var ch, str, flags; + + str = ''; + flags = ''; + while (index$1 < length) { + ch = source$1[index$1]; + if (!isIdentifierPart(ch.charCodeAt(0))) { + break; + } + + ++index$1; + if (ch === '\\' && index$1 < length) { + throwError({}, MessageUnexpectedToken, ILLEGAL); + } else { + flags += ch; + str += ch; + } + } + + if (flags.search(/[^gimuy]/g) >= 0) { + throwError({}, MessageInvalidRegExp, flags); + } + + return { + value: flags, + literal: str + }; +} + +function scanRegExp() { + var start, body, flags, value; + + lookahead = null; + skipComment(); + start = index$1; + + body = scanRegExpBody(); + flags = scanRegExpFlags(); + value = testRegExp(body.value, flags.value); + + return { + literal: body.literal + flags.literal, + value: value, + regex: { + pattern: body.value, + flags: flags.value + }, + start: start, + end: index$1 + }; +} + +function isIdentifierName(token) { + return token.type === TokenIdentifier || + token.type === TokenKeyword || + token.type === TokenBooleanLiteral || + token.type === TokenNullLiteral; +} + +function advance() { + var ch; + + skipComment(); + + if (index$1 >= length) { + return { + type: TokenEOF, + start: index$1, + end: index$1 + }; + } + + ch = source$1.charCodeAt(index$1); + + if (isIdentifierStart(ch)) { + return scanIdentifier(); + } + + // Very common: ( and ) and ; + if (ch === 0x28 || ch === 0x29 || ch === 0x3B) { + return scanPunctuator(); + } + + // String literal starts with single quote (U+0027) or double quote (U+0022). + if (ch === 0x27 || ch === 0x22) { + return scanStringLiteral(); + } + + + // Dot (.) U+002E can also start a floating-point number, hence the need + // to check the next character. + if (ch === 0x2E) { + if (isDecimalDigit(source$1.charCodeAt(index$1 + 1))) { + return scanNumericLiteral(); + } + return scanPunctuator(); + } + + if (isDecimalDigit(ch)) { + return scanNumericLiteral(); + } + + return scanPunctuator(); +} + +function lex() { + var token; + + token = lookahead; + index$1 = token.end; + + lookahead = advance(); + + index$1 = token.end; + + return token; +} + +function peek$1() { + var pos; + + pos = index$1; + + lookahead = advance(); + index$1 = pos; +} + +function finishArrayExpression(elements) { + var node = new ASTNode(SyntaxArrayExpression); + node.elements = elements; + return node; +} + +function finishBinaryExpression(operator, left, right) { + var node = new ASTNode((operator === '||' || operator === '&&') ? SyntaxLogicalExpression : SyntaxBinaryExpression); + node.operator = operator; + node.left = left; + node.right = right; + return node; +} + +function finishCallExpression(callee, args) { + var node = new ASTNode(SyntaxCallExpression); + node.callee = callee; + node.arguments = args; + return node; +} + +function finishConditionalExpression(test, consequent, alternate) { + var node = new ASTNode(SyntaxConditionalExpression); + node.test = test; + node.consequent = consequent; + node.alternate = alternate; + return node; +} + +function finishIdentifier(name) { + var node = new ASTNode(SyntaxIdentifier); + node.name = name; + return node; +} + +function finishLiteral(token) { + var node = new ASTNode(SyntaxLiteral); + node.value = token.value; + node.raw = source$1.slice(token.start, token.end); + if (token.regex) { + if (node.raw === '//') { + node.raw = '/(?:)/'; + } + node.regex = token.regex; + } + return node; +} + +function finishMemberExpression(accessor, object, property) { + var node = new ASTNode(SyntaxMemberExpression); + node.computed = accessor === '['; + node.object = object; + node.property = property; + if (!node.computed) property.member = true; + return node; +} + +function finishObjectExpression(properties) { + var node = new ASTNode(SyntaxObjectExpression); + node.properties = properties; + return node; +} + +function finishProperty(kind, key, value) { + var node = new ASTNode(SyntaxProperty); + node.key = key; + node.value = value; + node.kind = kind; + return node; +} + +function finishUnaryExpression(operator, argument) { + var node = new ASTNode(SyntaxUnaryExpression); + node.operator = operator; + node.argument = argument; + node.prefix = true; + return node; +} + +// Throw an exception + +function throwError(token, messageFormat) { + var error, + args = Array.prototype.slice.call(arguments, 2), + msg = messageFormat.replace( + /%(\d)/g, + function(whole, index) { + assert(index < args.length, 'Message reference must be in range'); + return args[index]; + } + ); + + + error = new Error(msg); + error.index = index$1; + error.description = msg; + throw error; +} + +// Throw an exception because of the token. + +function throwUnexpected(token) { + if (token.type === TokenEOF) { + throwError(token, MessageUnexpectedEOS); + } + + if (token.type === TokenNumericLiteral) { + throwError(token, MessageUnexpectedNumber); + } + + if (token.type === TokenStringLiteral) { + throwError(token, MessageUnexpectedString); + } + + if (token.type === TokenIdentifier) { + throwError(token, MessageUnexpectedIdentifier); + } + + if (token.type === TokenKeyword) { + throwError(token, MessageUnexpectedReserved); + } + + // BooleanLiteral, NullLiteral, or Punctuator. + throwError(token, MessageUnexpectedToken, token.value); +} + +// Expect the next token to match the specified punctuator. +// If not, an exception will be thrown. + +function expect(value) { + var token = lex(); + if (token.type !== TokenPunctuator || token.value !== value) { + throwUnexpected(token); + } +} + +// Return true if the next token matches the specified punctuator. + +function match(value) { + return lookahead.type === TokenPunctuator && lookahead.value === value; +} + +// Return true if the next token matches the specified keyword + +function matchKeyword(keyword) { + return lookahead.type === TokenKeyword && lookahead.value === keyword; +} + +// 11.1.4 Array Initialiser + +function parseArrayInitialiser() { + var elements = []; + + index$1 = lookahead.start; + expect('['); + + while (!match(']')) { + if (match(',')) { + lex(); + elements.push(null); + } else { + elements.push(parseConditionalExpression()); + + if (!match(']')) { + expect(','); + } + } + } + + lex(); + + return finishArrayExpression(elements); +} + +// 11.1.5 Object Initialiser + +function parseObjectPropertyKey() { + var token; + + index$1 = lookahead.start; + token = lex(); + + // Note: This function is called only from parseObjectProperty(), where + // EOF and Punctuator tokens are already filtered out. + + if (token.type === TokenStringLiteral || token.type === TokenNumericLiteral) { + if (token.octal) { + throwError(token, MessageStrictOctalLiteral); + } + return finishLiteral(token); + } + + return finishIdentifier(token.value); +} + +function parseObjectProperty() { + var token, key, id, value; + + index$1 = lookahead.start; + token = lookahead; + + if (token.type === TokenIdentifier) { + id = parseObjectPropertyKey(); + expect(':'); + value = parseConditionalExpression(); + return finishProperty('init', id, value); + } + if (token.type === TokenEOF || token.type === TokenPunctuator) { + throwUnexpected(token); + } else { + key = parseObjectPropertyKey(); + expect(':'); + value = parseConditionalExpression(); + return finishProperty('init', key, value); + } +} + +function parseObjectInitialiser() { + var properties = [], + property, name, key, map = {}, + toString = String; + + index$1 = lookahead.start; + expect('{'); + + while (!match('}')) { + property = parseObjectProperty(); + + if (property.key.type === SyntaxIdentifier) { + name = property.key.name; + } else { + name = toString(property.key.value); + } + + key = '$' + name; + if (Object.prototype.hasOwnProperty.call(map, key)) { + throwError({}, MessageStrictDuplicateProperty); + } else { + map[key] = true; + } + + properties.push(property); + + if (!match('}')) { + expect(','); + } + } + + expect('}'); + + return finishObjectExpression(properties); +} + +// 11.1.6 The Grouping Operator + +function parseGroupExpression() { + var expr; + + expect('('); + + expr = parseExpression(); + + expect(')'); + + return expr; +} + + +// 11.1 Primary Expressions + +var legalKeywords = { + "if": 1, + "this": 1 +}; + +function parsePrimaryExpression() { + var type, token, expr; + + if (match('(')) { + return parseGroupExpression(); + } + + if (match('[')) { + return parseArrayInitialiser(); + } + + if (match('{')) { + return parseObjectInitialiser(); + } + + type = lookahead.type; + index$1 = lookahead.start; + + + if (type === TokenIdentifier || legalKeywords[lookahead.value]) { + expr = finishIdentifier(lex().value); + } else if (type === TokenStringLiteral || type === TokenNumericLiteral) { + if (lookahead.octal) { + throwError(lookahead, MessageStrictOctalLiteral); + } + expr = finishLiteral(lex()); + } else if (type === TokenKeyword) { + throw new Error(DISABLED); + } else if (type === TokenBooleanLiteral) { + token = lex(); + token.value = (token.value === 'true'); + expr = finishLiteral(token); + } else if (type === TokenNullLiteral) { + token = lex(); + token.value = null; + expr = finishLiteral(token); + } else if (match('/') || match('/=')) { + expr = finishLiteral(scanRegExp()); + peek$1(); + } else { + throwUnexpected(lex()); + } + + return expr; +} + +// 11.2 Left-Hand-Side Expressions + +function parseArguments() { + var args = []; + + expect('('); + + if (!match(')')) { + while (index$1 < length) { + args.push(parseConditionalExpression()); + if (match(')')) { + break; + } + expect(','); + } + } + + expect(')'); + + return args; +} + +function parseNonComputedProperty() { + var token; + index$1 = lookahead.start; + token = lex(); + + if (!isIdentifierName(token)) { + throwUnexpected(token); + } + + return finishIdentifier(token.value); +} + +function parseNonComputedMember() { + expect('.'); + + return parseNonComputedProperty(); +} + +function parseComputedMember() { + var expr; + + expect('['); + + expr = parseExpression(); + + expect(']'); + + return expr; +} + +function parseLeftHandSideExpressionAllowCall() { + var expr, args, property; + + expr = parsePrimaryExpression(); + + for (;;) { + if (match('.')) { + property = parseNonComputedMember(); + expr = finishMemberExpression('.', expr, property); + } else if (match('(')) { + args = parseArguments(); + expr = finishCallExpression(expr, args); + } else if (match('[')) { + property = parseComputedMember(); + expr = finishMemberExpression('[', expr, property); + } else { + break; + } + } + + return expr; +} + +// 11.3 Postfix Expressions + +function parsePostfixExpression() { + var expr = parseLeftHandSideExpressionAllowCall(); + + if (lookahead.type === TokenPunctuator) { + if ((match('++') || match('--'))) { + throw new Error(DISABLED); + } + } + + return expr; +} + +// 11.4 Unary Operators + +function parseUnaryExpression() { + var token, expr; + + if (lookahead.type !== TokenPunctuator && lookahead.type !== TokenKeyword) { + expr = parsePostfixExpression(); + } else if (match('++') || match('--')) { + throw new Error(DISABLED); + } else if (match('+') || match('-') || match('~') || match('!')) { + token = lex(); + expr = parseUnaryExpression(); + expr = finishUnaryExpression(token.value, expr); + } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) { + throw new Error(DISABLED); + } else { + expr = parsePostfixExpression(); + } + + return expr; +} + +function binaryPrecedence(token) { + var prec = 0; + + if (token.type !== TokenPunctuator && token.type !== TokenKeyword) { + return 0; + } + + switch (token.value) { + case '||': + prec = 1; + break; + + case '&&': + prec = 2; + break; + + case '|': + prec = 3; + break; + + case '^': + prec = 4; + break; + + case '&': + prec = 5; + break; + + case '==': + case '!=': + case '===': + case '!==': + prec = 6; + break; + + case '<': + case '>': + case '<=': + case '>=': + case 'instanceof': + case 'in': + prec = 7; + break; + + case '<<': + case '>>': + case '>>>': + prec = 8; + break; + + case '+': + case '-': + prec = 9; + break; + + case '*': + case '/': + case '%': + prec = 11; + break; + + default: + break; + } + + return prec; +} + +// 11.5 Multiplicative Operators +// 11.6 Additive Operators +// 11.7 Bitwise Shift Operators +// 11.8 Relational Operators +// 11.9 Equality Operators +// 11.10 Binary Bitwise Operators +// 11.11 Binary Logical Operators + +function parseBinaryExpression() { + var marker, markers, expr, token, prec, stack, right, operator, left, i; + + marker = lookahead; + left = parseUnaryExpression(); + + token = lookahead; + prec = binaryPrecedence(token); + if (prec === 0) { + return left; + } + token.prec = prec; + lex(); + + markers = [marker, lookahead]; + right = parseUnaryExpression(); + + stack = [left, token, right]; + + while ((prec = binaryPrecedence(lookahead)) > 0) { + + // Reduce: make a binary expression from the three topmost entries. + while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) { + right = stack.pop(); + operator = stack.pop().value; + left = stack.pop(); + markers.pop(); + expr = finishBinaryExpression(operator, left, right); + stack.push(expr); + } + + // Shift. + token = lex(); + token.prec = prec; + stack.push(token); + markers.push(lookahead); + expr = parseUnaryExpression(); + stack.push(expr); + } + + // Final reduce to clean-up the stack. + i = stack.length - 1; + expr = stack[i]; + markers.pop(); + while (i > 1) { + markers.pop(); + expr = finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr); + i -= 2; + } + + return expr; +} + +// 11.12 Conditional Operator + +function parseConditionalExpression() { + var expr, consequent, alternate; + + expr = parseBinaryExpression(); + + if (match('?')) { + lex(); + consequent = parseConditionalExpression(); + expect(':'); + alternate = parseConditionalExpression(); + + expr = finishConditionalExpression(expr, consequent, alternate); + } + + return expr; +} + +// 11.14 Comma Operator + +function parseExpression() { + var expr = parseConditionalExpression(); + + if (match(',')) { + throw new Error(DISABLED); // no sequence expressions + } + + return expr; +} + +function parse$3(code) { + source$1 = code; + index$1 = 0; + length = source$1.length; + lookahead = null; + + peek$1(); + + var expr = parseExpression(); + + if (lookahead.type !== TokenEOF) { + throw new Error("Unexpect token after expression."); + } + return expr; +} + +var constants = { + NaN: 'NaN', + E: 'Math.E', + LN2: 'Math.LN2', + LN10: 'Math.LN10', + LOG2E: 'Math.LOG2E', + LOG10E: 'Math.LOG10E', + PI: 'Math.PI', + SQRT1_2: 'Math.SQRT1_2', + SQRT2: 'Math.SQRT2', + MIN_VALUE: 'Number.MIN_VALUE', + MAX_VALUE: 'Number.MAX_VALUE' +}; + +function functions(codegen) { + + function fncall(name, args, cast, type) { + var obj = codegen(args[0]); + if (cast) { + obj = cast + '(' + obj + ')'; + if (cast.lastIndexOf('new ', 0) === 0) obj = '(' + obj + ')'; + } + return obj + '.' + name + (type < 0 ? '' : type === 0 ? + '()' : + '(' + args.slice(1).map(codegen).join(',') + ')'); + } + + function fn(name, cast, type) { + return function(args) { + return fncall(name, args, cast, type); + }; + } + + var DATE = 'new Date', + STRING = 'String', + REGEXP = 'RegExp'; + + return { + // MATH functions + isNaN: 'isNaN', + isFinite: 'isFinite', + abs: 'Math.abs', + acos: 'Math.acos', + asin: 'Math.asin', + atan: 'Math.atan', + atan2: 'Math.atan2', + ceil: 'Math.ceil', + cos: 'Math.cos', + exp: 'Math.exp', + floor: 'Math.floor', + log: 'Math.log', + max: 'Math.max', + min: 'Math.min', + pow: 'Math.pow', + random: 'Math.random', + round: 'Math.round', + sin: 'Math.sin', + sqrt: 'Math.sqrt', + tan: 'Math.tan', + + clamp: function(args) { + if (args.length < 3) error('Missing arguments to clamp function.'); + if (args.length > 3) error('Too many arguments to clamp function.'); + var a = args.map(codegen); + return 'Math.max('+a[1]+', Math.min('+a[2]+','+a[0]+'))'; + }, + + // DATE functions + now: 'Date.now', + utc: 'Date.UTC', + datetime: DATE, + date: fn('getDate', DATE, 0), + day: fn('getDay', DATE, 0), + year: fn('getFullYear', DATE, 0), + month: fn('getMonth', DATE, 0), + hours: fn('getHours', DATE, 0), + minutes: fn('getMinutes', DATE, 0), + seconds: fn('getSeconds', DATE, 0), + milliseconds: fn('getMilliseconds', DATE, 0), + time: fn('getTime', DATE, 0), + timezoneoffset: fn('getTimezoneOffset', DATE, 0), + utcdate: fn('getUTCDate', DATE, 0), + utcday: fn('getUTCDay', DATE, 0), + utcyear: fn('getUTCFullYear', DATE, 0), + utcmonth: fn('getUTCMonth', DATE, 0), + utchours: fn('getUTCHours', DATE, 0), + utcminutes: fn('getUTCMinutes', DATE, 0), + utcseconds: fn('getUTCSeconds', DATE, 0), + utcmilliseconds: fn('getUTCMilliseconds', DATE, 0), + + // sequence functions + length: fn('length', null, -1), + join: fn('join', null), + indexof: fn('indexOf', null), + lastindexof: fn('lastIndexOf', null), + slice: fn('slice', null), + + reverse: function(args) { + return '('+codegen(args[0])+').slice().reverse()'; + }, + + // STRING functions + parseFloat: 'parseFloat', + parseInt: 'parseInt', + upper: fn('toUpperCase', STRING, 0), + lower: fn('toLowerCase', STRING, 0), + substring: fn('substring', STRING), + split: fn('split', STRING), + replace: fn('replace', STRING), + trim: fn('trim', STRING, 0), + + // REGEXP functions + regexp: REGEXP, + test: fn('test', REGEXP), + + // Control Flow functions + if: function(args) { + if (args.length < 3) error('Missing arguments to if function.'); + if (args.length > 3) error('Too many arguments to if function.'); + var a = args.map(codegen); + return '('+a[0]+'?'+a[1]+':'+a[2]+')'; + } + }; +} + +function stripQuotes(s) { + var n = s && s.length - 1; + return n && ( + (s[0]==='"' && s[n]==='"') || + (s[0]==='\'' && s[n]==='\'') + ) ? s.slice(1, -1) : s; +} + +function codegen(opt) { + opt = opt || {}; + + var whitelist = opt.whitelist ? toSet(opt.whitelist) : {}, + blacklist = opt.blacklist ? toSet(opt.blacklist) : {}, + constants$1 = opt.constants || constants, + functions$1 = (opt.functions || functions)(visit), + globalvar = opt.globalvar, + fieldvar = opt.fieldvar, + globals = {}, + fields = {}, + memberDepth = 0; + + var outputGlobal = isFunction(globalvar) + ? globalvar + : function (id) { return globalvar + '["' + id + '"]'; }; + + function visit(ast) { + if (isString(ast)) return ast; + var generator = Generators[ast.type]; + if (generator == null) error('Unsupported type: ' + ast.type); + return generator(ast); + } + + var Generators = { + Literal: function(n) { + return n.raw; + }, + + Identifier: function(n) { + var id = n.name; + if (memberDepth > 0) { + return id; + } else if (blacklist.hasOwnProperty(id)) { + return error('Illegal identifier: ' + id); + } else if (constants$1.hasOwnProperty(id)) { + return constants$1[id]; + } else if (whitelist.hasOwnProperty(id)) { + return id; + } else { + globals[id] = 1; + return outputGlobal(id); + } + }, + + MemberExpression: function(n) { + var d = !n.computed; + var o = visit(n.object); + if (d) memberDepth += 1; + var p = visit(n.property); + if (o === fieldvar) { + // strip quotes to sanitize field name (#1653) + fields[stripQuotes(p)] = 1; + } + if (d) memberDepth -= 1; + return o + (d ? '.'+p : '['+p+']'); + }, + + CallExpression: function(n) { + if (n.callee.type !== 'Identifier') { + error('Illegal callee type: ' + n.callee.type); + } + var callee = n.callee.name; + var args = n.arguments; + var fn = functions$1.hasOwnProperty(callee) && functions$1[callee]; + if (!fn) error('Unrecognized function: ' + callee); + return isFunction(fn) + ? fn(args) + : fn + '(' + args.map(visit).join(',') + ')'; + }, + + ArrayExpression: function(n) { + return '[' + n.elements.map(visit).join(',') + ']'; + }, + + BinaryExpression: function(n) { + return '(' + visit(n.left) + n.operator + visit(n.right) + ')'; + }, + + UnaryExpression: function(n) { + return '(' + n.operator + visit(n.argument) + ')'; + }, + + ConditionalExpression: function(n) { + return '(' + visit(n.test) + + '?' + visit(n.consequent) + + ':' + visit(n.alternate) + + ')'; + }, + + LogicalExpression: function(n) { + return '(' + visit(n.left) + n.operator + visit(n.right) + ')'; + }, + + ObjectExpression: function(n) { + return '{' + n.properties.map(visit).join(',') + '}'; + }, + + Property: function(n) { + memberDepth += 1; + var k = visit(n.key); + memberDepth -= 1; + return k + ':' + visit(n.value); + } + }; + + function codegen(ast) { + var result = { + code: visit(ast), + globals: Object.keys(globals), + fields: Object.keys(fields) + }; + globals = {}; + fields = {}; + return result; + } + + codegen.functions = functions$1; + codegen.constants = constants$1; + + return codegen; +} + +const Intersect = 'intersect'; +const Union = 'union'; + +var TYPE_ENUM = 'E', + TYPE_RANGE_INC = 'R', + TYPE_RANGE_EXC = 'R-E', + TYPE_RANGE_LE = 'R-LE', + TYPE_RANGE_RE = 'R-RE', + UNIT_INDEX = 'index:unit'; + +// TODO: revisit date coercion? +function testPoint(datum, entry) { + var fields = entry.fields, + values = entry.values, + n = fields.length, + i = 0, dval, f; + + for (; i, values: array<*>}. + * Fielddef is of the form + * {field: string, channel: string, type: 'E' | 'R'} where + * 'type' identifies whether tuples in the dataset enumerate + * values for the field, or specify a continuous range. + * @param {object} datum - The tuple to test for inclusion. + * @param {string} op - The set operation for combining selections. + * One of 'intersect' or 'union' (default). + * @return {boolean} - True if the datum is in the selection, false otherwise. + */ +function selectionTest(name, datum, op) { + var data = this.context.data[name], + entries = data ? data.values.value : [], + unitIdx = data ? data[UNIT_INDEX] && data[UNIT_INDEX].value : undefined, + intersect = op === Intersect, + n = entries.length, + i = 0, + entry, miss, count, unit, b; + + for (; i= 0; }); + }, + + R_union: function(base, value) { + var lo = toNumber(value[0]), hi = toNumber(value[1]); + if (lo > hi) { + lo = value[1]; + hi = value[0]; + } + + if (!base.length) return [lo, hi]; + if (base[0] > lo) base[0] = lo; + if (base[1] < hi) base[1] = hi; + return base; + }, + + R_intersect: function(base, value) { + var lo = toNumber(value[0]), hi = toNumber(value[1]); + if (lo > hi) { + lo = value[1]; + hi = value[0]; + } + + if (!base.length) return [lo, hi]; + if (hi < base[0] || base[1] < lo) { + return []; + } else { + if (base[0] < lo) base[0] = lo; + if (base[1] > hi) base[1] = hi; + } + return base; + } +}; + +const DataPrefix = ':', + IndexPrefix = '@'; + +function selectionVisitor(name, args, scope, params) { + if (args[0].type !== Literal) error('First argument to selection functions must be a string literal.'); + + const data = args[0].value, + op = args.length >= 2 && peek(args).value, + field = 'unit', + indexName = IndexPrefix + field, + dataName = DataPrefix + data; + + if (op === Intersect && !params.hasOwnProperty(indexName)) { + params[indexName] = scope.getData(data).indataRef(scope, field); + } + + if (!params.hasOwnProperty(dataName)) { + params[dataName] = scope.getData(data).tuplesRef(); + } +} + +function ascending$c(a, b) { + return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; +} + +function bisector$b(compare) { + if (compare.length === 1) compare = ascendingComparator$b(compare); + return { + left: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) < 0) lo = mid + 1; + else hi = mid; + } + return lo; + }, + right: function(a, x, lo, hi) { + if (lo == null) lo = 0; + if (hi == null) hi = a.length; + while (lo < hi) { + var mid = lo + hi >>> 1; + if (compare(a[mid], x) > 0) hi = mid; + else lo = mid + 1; + } + return lo; + } + }; +} + +function ascendingComparator$b(f) { + return function(d, x) { + return ascending$c(f(d), x); + }; +} + +var ascendingBisect$b = bisector$b(ascending$c); + +function sequence$2(start, stop, step) { + start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step; + + var i = -1, + n = Math.max(0, Math.ceil((stop - start) / step)) | 0, + range = new Array(n); + + while (++i < n) { + range[i] = start + i * step; + } + + return range; +} + +function data$1(name) { + const data = this.context.data[name]; + return data ? data.values.value : []; +} + +function indata(name, field, value) { + const index = this.context.data[name]['index:' + field], + entry = index ? index.value.get(value) : undefined; + return entry ? entry.count : entry; +} + +function setdata(name, tuples) { + const df = this.context.dataflow, + data = this.context.data[name], + input = data.input; + + df.pulse(input, df.changeset().remove(truthy).insert(tuples)); + return 1; +} + +function encode$1(item, name, retval) { + if (item) { + const df = this.context.dataflow, + target = item.mark.source; + df.pulse(target, df.changeset().encode(item, name)); + } + return retval !== undefined ? retval : item; +} + +const formatCache = {}; + +function formatter(type, method, specifier) { + let k = type + ':' + specifier, + e = formatCache[k]; + if (!e || e[0] !== method) { + formatCache[k] = (e = [method, method(specifier)]); + } + return e[1]; +} + +function format$2(_, specifier) { + return formatter('format', format$1, specifier)(_); +} + +function timeFormat$1(_, specifier) { + return formatter('timeFormat', timeFormat, specifier)(_); +} + +function utcFormat$1(_, specifier) { + return formatter('utcFormat', utcFormat, specifier)(_); +} + +function timeParse$1(_, specifier) { + return formatter('timeParse', timeParse, specifier)(_); +} + +function utcParse$1(_, specifier) { + return formatter('utcParse', utcParse, specifier)(_); +} + +var dateObj = new Date(2000, 0, 1); + +function time$2(month, day, specifier) { + dateObj.setMonth(month); + dateObj.setDate(day); + return timeFormat$1(dateObj, specifier); +} + +function monthFormat(month) { + return time$2(month, 1, '%B'); +} + +function monthAbbrevFormat(month) { + return time$2(month, 1, '%b'); +} + +function dayFormat(day) { + return time$2(0, 2 + day, '%A'); +} + +function dayAbbrevFormat(day) { + return time$2(0, 2 + day, '%a'); +} + +function getScale(name, ctx) { + let s; + return isFunction(name) ? name + : isString(name) ? (s = ctx.scales[name]) && s.value + : undefined; +} + +function range$5(name, group) { + const s = getScale(name, (group || this).context); + return s && s.range ? s.range() : []; +} + +function domain(name, group) { + const s = getScale(name, (group || this).context); + return s ? s.domain() : []; +} + +function bandwidth(name, group) { + const s = getScale(name, (group || this).context); + return s && s.bandwidth ? s.bandwidth() : 0; +} + +function bandspace(count, paddingInner, paddingOuter) { + return bandSpace(count || 0, paddingInner || 0, paddingOuter || 0); +} + +function copy$2(name, group) { + const s = getScale(name, (group || this).context); + return s ? s.copy() : undefined; +} + +function scale$2(name, value, group) { + const s = getScale(name, (group || this).context); + return s && value !== undefined ? s(value) : undefined; +} + +function invert(name, range, group) { + const s = getScale(name, (group || this).context); + return !s ? undefined + : isArray(range) ? (s.invertRange || s.invert)(range) + : (s.invert || s.invertExtent)(range); +} + +function geoMethod(methodName, globalMethod) { + return function(projection, geojson, group) { + if (projection) { + // projection defined, use it + const p = getScale(projection, (group || this).context); + return p && p.path[methodName](geojson); + } else { + // projection undefined, use global method + return globalMethod(geojson); + } + }; +} + +const geoArea = geoMethod('area', area$3); +const geoBounds = geoMethod('bounds', bounds$1); +const geoCentroid = geoMethod('centroid', centroid); + +function inScope(item) { + let group = this.context.group, + value = false; + + if (group) while (item) { + if (item === group) { value = true; break; } + item = item.mark.group; + } + return value; +} + +function intersect$3(b, opt, group) { + if (!b) return []; + + const [u, v] = b, + box = new Bounds().set(u[0], u[1], v[0], v[1]), + scene = group || this.context.dataflow.scenegraph().root; + + return intersect$1(scene, box, filter$2(opt)); +} + +function filter$2(opt) { + let p = null; + + if (opt) { + const types = array(opt.marktype), + names = array(opt.markname); + p = _ => (!types.length || types.some(t => _.marktype === t)) + && (!names.length || names.some(s => _.name === s)); + } + + return p; +} + +function log$4(df, method, args) { + try { + df[method].apply(df, ['EXPRESSION'].concat([].slice.call(args))); + } catch (err) { + df.warn(err); + } + return args[args.length-1]; +} + +function warn() { + return log$4(this.context.dataflow, 'warn', arguments); +} + +function info() { + return log$4(this.context.dataflow, 'info', arguments); +} + +function debug() { + return log$4(this.context.dataflow, 'debug', arguments); +} + +function merge$3() { + var args = [].slice.call(arguments); + args.unshift({}); + return extend.apply(null, args); +} + +function equal(a, b) { + return a === b || a !== a && b !== b ? true + : isArray(a) && isArray(b) && a.length === b.length ? equalArray(a, b) + : false; +} + +function equalArray(a, b) { + for (let i=0, n=a.length; i gradient.stop(fraction(_), scale(_))); + + return gradient; +} + +function geoShape(projection, geojson, group) { + const p = getScale(projection, (group || this).context); + return function(context) { + return p ? p.path.context(context)(geojson) : ''; + } +} + +function pathShape(path) { + let p = null; + return function(context) { + return context + ? pathRender(context, (p = p || pathParse(path))) + : path; + }; +} + +const EMPTY = {}; + +function datum(d) { return d.data; } + +function treeNodes(name, context) { + const tree = data$1.call(context, name); + return tree.root && tree.root.lookup || EMPTY; +} + +function treePath(name, source, target) { + const nodes = treeNodes(name, this), + s = nodes[source], + t = nodes[target]; + return s && t ? s.path(t).map(datum) : undefined; +} + +function treeAncestors(name, node) { + const n = treeNodes(name, this)[node]; + return n ? n.ancestors().map(datum) : undefined; +} + +const _window = (typeof window !== 'undefined' && window) || null; + +function screen() { + return _window ? _window.screen : {}; +} + +function windowSize() { + return _window + ? [_window.innerWidth, _window.innerHeight] + : [undefined, undefined]; +} + +function containerSize() { + const view = this.context.dataflow, + el = view.container && view.container(); + return el + ? [el.clientWidth, el.clientHeight] + : [undefined, undefined]; +} + +const DataPrefix$1 = ':'; +const IndexPrefix$1 = '@'; +const ScalePrefix = '%'; +const SignalPrefix = '$'; + +function dataVisitor(name, args, scope, params) { + if (args[0].type !== Literal) { + error('First argument to data functions must be a string literal.'); + } + + const data = args[0].value, + dataName = DataPrefix$1 + data; + + if (!params.hasOwnProperty(dataName)) { + params[dataName] = scope.getData(data).tuplesRef(); + } +} + +function indataVisitor(name, args, scope, params) { + if (args[0].type !== Literal) error('First argument to indata must be a string literal.'); + if (args[1].type !== Literal) error('Second argument to indata must be a string literal.'); + + const data = args[0].value, + field = args[1].value, + indexName = IndexPrefix$1 + field; + + if (!params.hasOwnProperty(indexName)) { + params[indexName] = scope.getData(data).indataRef(scope, field); + } +} + +function scaleVisitor(name, args, scope, params) { + if (args[0].type === Literal) { + // add scale dependency + addScaleDependency(scope, params, args[0].value); + } + else if (args[0].type === Identifier$1) { + // indirect scale lookup; add all scales as parameters + for (name in scope.scales) { + addScaleDependency(scope, params, name); + } + } +} + +function addScaleDependency(scope, params, name) { + const scaleName = ScalePrefix + name; + if (!params.hasOwnProperty(scaleName)) { + try { + params[scaleName] = scope.scaleRef(name); + } catch (err) { + // TODO: error handling? warning? + } + } +} + +// Expression function context object +const functionContext = { + random: function() { return random(); }, // override default + isArray, + isBoolean, + isDate, + isDefined: function(_) { return _ !== undefined; }, + isNumber, + isObject, + isRegExp, + isString, + isTuple, + isValid: function(_) { return _ != null && _ === _; }, + toBoolean, + toDate, + toNumber, + toString, + flush, + lerp, + merge: merge$3, + pad, + peek, + span, + inrange, + truncate, + rgb, + lab, + hcl, + hsl, + sequence: sequence$2, + format: format$2, + utcFormat: utcFormat$1, + utcParse: utcParse$1, + timeFormat: timeFormat$1, + timeParse: timeParse$1, + monthFormat, + monthAbbrevFormat, + dayFormat, + dayAbbrevFormat, + quarter, + utcquarter, + warn, + info, + debug, + extent: extent$1, + inScope, + intersect: intersect$3, + clampRange, + pinchDistance, + pinchAngle, + screen, + containerSize, + windowSize, + bandspace, + setdata, + pathShape, + panLinear, + panLog, + panPow, + panSymlog, + zoomLinear, + zoomLog, + zoomPow, + zoomSymlog, + encode: encode$1, + modify +}; + +const eventFunctions = ['view', 'item', 'group', 'xy', 'x', 'y'], // event functions + eventPrefix = 'event.vega.', // event function prefix + thisPrefix = 'this.', // function context prefix + astVisitors = {}; // AST visitors for dependency analysis + +// Build expression function registry +function buildFunctions(codegen) { + const fn = functions(codegen); + eventFunctions.forEach(name => fn[name] = eventPrefix + name); + for (let name in functionContext) { fn[name] = thisPrefix + name; } + return fn; +} + +// Register an expression function +function expressionFunction(name, fn, visitor) { + if (arguments.length === 1) { + return functionContext[name]; + } + + // register with the functionContext + functionContext[name] = fn; + + // if there is an astVisitor register that, too + if (visitor) astVisitors[name] = visitor; + + // if the code generator has already been initialized, + // we need to also register the function with it + if (codeGenerator) codeGenerator.functions[name] = thisPrefix + name; + return this; +} + +// register expression functions with ast visitors +expressionFunction('bandwidth', bandwidth, scaleVisitor); +expressionFunction('copy', copy$2, scaleVisitor); +expressionFunction('domain', domain, scaleVisitor); +expressionFunction('range', range$5, scaleVisitor); +expressionFunction('invert', invert, scaleVisitor); +expressionFunction('scale', scale$2, scaleVisitor); +expressionFunction('gradient', scaleGradient, scaleVisitor); +expressionFunction('geoArea', geoArea, scaleVisitor); +expressionFunction('geoBounds', geoBounds, scaleVisitor); +expressionFunction('geoCentroid', geoCentroid, scaleVisitor); +expressionFunction('geoShape', geoShape, scaleVisitor); +expressionFunction('indata', indata, indataVisitor); +expressionFunction('data', data$1, dataVisitor); +expressionFunction('treePath', treePath, dataVisitor); +expressionFunction('treeAncestors', treeAncestors, dataVisitor); + +// register Vega-Lite selection functions +expressionFunction('vlSelectionTest', selectionTest, selectionVisitor); +expressionFunction('vlSelectionResolve', selectionResolve, selectionVisitor); + +// Export code generator and parameters +const codegenParams = { + blacklist: ['_'], + whitelist: ['datum', 'event', 'item'], + fieldvar: 'datum', + globalvar: function(id) { return '_[' + $(SignalPrefix + id) + ']'; }, + functions: buildFunctions, + constants: constants, + visitors: astVisitors +}; + +var codeGenerator = codegen(codegenParams); + +/** + * Parse an expression given the argument signature and body code. + */ +function expression(args, code, ctx) { + // wrap code in return statement if expression does not terminate + if (code[code.length-1] !== ';') { + code = 'return(' + code + ');'; + } + var fn = Function.apply(null, args.concat(code)); + return ctx && ctx.functions ? fn.bind(ctx.functions) : fn; +} + +/** + * Parse an expression used to update an operator value. + */ +function operatorExpression(code, ctx) { + return expression(['_'], code, ctx); +} + +/** + * Parse an expression provided as an operator parameter value. + */ +function parameterExpression(code, ctx) { + return expression(['datum', '_'], code, ctx); +} + +/** + * Parse an expression applied to an event stream. + */ +function eventExpression(code, ctx) { + return expression(['event'], code, ctx); +} + +/** + * Parse an expression used to handle an event-driven operator update. + */ +function handlerExpression(code, ctx) { + return expression(['_', 'event'], code, ctx); +} + +/** + * Parse an expression that performs visual encoding. + */ +function encodeExpression(code, ctx) { + return expression(['item', '_'], code, ctx); +} + +/** + * Parse a set of operator parameters. + */ +function parseParameters(spec, ctx, params) { + params = params || {}; + var key, value; + + for (key in spec) { + value = spec[key]; + + params[key] = isArray(value) + ? value.map(function(v) { return parseParameter(v, ctx, params); }) + : parseParameter(value, ctx, params); + } + return params; +} + +/** + * Parse a single parameter. + */ +function parseParameter(spec, ctx, params) { + if (!spec || !isObject(spec)) return spec; + + for (var i=0, n=PARSERS.length, p; i v.resize()); + }, false, 1); +} + +/** + * Get the current view state, consisting of signal values and/or data sets. + * @param {object} [options] - Options flags indicating which state to export. + * If unspecified, all signals and data sets will be exported. + * @param {function(string, Operator):boolean} [options.signals] - Optional + * predicate function for testing if a signal should be included in the + * exported state. If unspecified, all signals will be included, except for + * those named 'parent' or those which refer to a Transform value. + * @param {function(string, object):boolean} [options.data] - Optional + * predicate function for testing if a data set's input should be included + * in the exported state. If unspecified, all data sets that have been + * explicitly modified will be included. + * @param {boolean} [options.recurse=true] - Flag indicating if the exported + * state should recursively include state from group mark sub-contexts. + * @return {object} - An object containing the exported state values. + */ +function getState$1(options) { + return this._runtime.getState(options || { + data: dataTest, + signals: signalTest, + recurse: true + }); +} + +function dataTest(name, data) { + return data.modified + && isArray(data.input.value) + && name.indexOf('_:vega:_'); +} + +function signalTest(name, op) { + return !(name === 'parent' || op instanceof transforms.proxy); +} + +/** + * Sets the current view state and updates the view by invoking run. + * @param {object} state - A state object containing signal and/or + * data set values, following the format used by the getState method. + * @return {View} - This view instance. + */ +function setState$1(state) { + this.runAsync(null, + v => { v._trigger = false; v._runtime.setState(state); }, + v => { v._trigger = true; } + ); + return this; +} + +function timer$1(callback, delay) { + function tick(elapsed) { + callback({timestamp: Date.now(), elapsed: elapsed}); + } + this._timers.push(interval$1(tick, delay)); +} + +function defaultTooltip$1(handler, event, item, value) { + var el = handler.element(); + if (el) el.setAttribute('title', formatTooltip(value)); +} + +function formatTooltip(value) { + return value == null ? '' + : isArray(value) ? formatArray(value) + : isObject(value) && !isDate(value) ? formatObject(value) + : value + ''; +} + +function formatObject(obj) { + return Object.keys(obj).map(function(key) { + var v = obj[key]; + return key + ': ' + (isArray(v) ? formatArray(v) : formatValue$1(v)); + }).join('\n'); +} + +function formatArray(value) { + return '[' + value.map(formatValue$1).join(', ') + ']'; +} + +function formatValue$1(value) { + return isArray(value) ? '[\u2026]' + : isObject(value) && !isDate(value) ? '{\u2026}' + : value; +} + +/** + * Create a new View instance from a Vega dataflow runtime specification. + * The generated View will not immediately be ready for display. Callers + * should also invoke the initialize method (e.g., to set the parent + * DOM element in browser-based deployment) and then invoke the run + * method to evaluate the dataflow graph. Rendering will automatically + * be peformed upon dataflow runs. + * @constructor + * @param {object} spec - The Vega dataflow runtime specification. + */ +function View(spec, options) { + var view = this; + options = options || {}; + + Dataflow.call(view); + if (options.loader) view.loader(options.loader); + if (options.logger) view.logger(options.logger); + if (options.logLevel != null) view.logLevel(options.logLevel); + + view._el = null; + view._elBind = null; + view._renderType = options.renderer || RenderType.Canvas; + view._scenegraph = new Scenegraph(); + var root = view._scenegraph.root; + + // initialize renderer, handler and event management + view._renderer = null; + view._tooltip = options.tooltip || defaultTooltip$1, + view._redraw = true; + view._handler = new CanvasHandler().scene(root); + view._preventDefault = false; + view._timers = []; + view._eventListeners = []; + view._resizeListeners = []; + + // initialize dataflow graph + var ctx = runtime(view, spec, options.functions); + view._runtime = ctx; + view._signals = ctx.signals; + view._bind = (spec.bindings || []).map(function(_) { + return { + state: null, + param: extend({}, _) + }; + }); + + // initialize scenegraph + if (ctx.root) ctx.root.set(root); + root.source = ctx.data.root.input; + view.pulse( + ctx.data.root.input, + view.changeset().insert(root.items) + ); + + // initialize background color + view._background = options.background || ctx.background || null; + + // initialize event configuration + view._eventConfig = initializeEventConfig(ctx.eventConfig); + + // initialize view size + view._width = view.width(); + view._height = view.height(); + view._viewWidth = viewWidth(view, view._width); + view._viewHeight = viewHeight(view, view._height); + view._origin = [0, 0]; + view._resize = 0; + view._autosize = 1; + initializeResize(view); + + // initialize cursor + cursor(view); + + // initialize hover proessing, if requested + if (options.hover) view.hover(); + + // initialize DOM container(s) and renderer + if (options.container) view.initialize(options.container, options.bind); +} + +var prototype$1k = inherits(View, Dataflow); + +// -- DATAFLOW / RENDERING ---- + +prototype$1k.evaluate = async function(encode, prerun, postrun) { + // evaluate dataflow and prerun + await Dataflow.prototype.evaluate.call(this, encode, prerun); + + // render as needed + if (this._redraw || this._resize) { + try { + if (this._renderer) { + if (this._resize) { + this._resize = 0; + resizeRenderer(this); + } + await this._renderer.renderAsync(this._scenegraph.root); + } + this._redraw = false; + } catch (e) { + this.error(e); + } + } + + // evaluate postrun + if (postrun) asyncCallback(this, postrun); + + return this; +}; + +prototype$1k.dirty = function(item) { + this._redraw = true; + this._renderer && this._renderer.dirty(item); +}; + +// -- GET / SET ---- + +prototype$1k.container = function() { + return this._el; +}; + +prototype$1k.scenegraph = function() { + return this._scenegraph; +}; + +prototype$1k.origin = function() { + return this._origin.slice(); +}; + +function lookupSignal(view, name) { + return view._signals.hasOwnProperty(name) + ? view._signals[name] + : error('Unrecognized signal name: ' + $(name)); +} + +prototype$1k.signal = function(name, value, options) { + var op = lookupSignal(this, name); + return arguments.length === 1 + ? op.value + : this.update(op, value, options); +}; + +prototype$1k.background = function(_) { + if (arguments.length) { + this._background = _; + this._resize = 1; + return this; + } else { + return this._background; + } +}; + +prototype$1k.width = function(_) { + return arguments.length ? this.signal('width', _) : this.signal('width'); +}; + +prototype$1k.height = function(_) { + return arguments.length ? this.signal('height', _) : this.signal('height'); +}; + +prototype$1k.padding = function(_) { + return arguments.length ? this.signal('padding', _) : this.signal('padding'); +}; + +prototype$1k.autosize = function(_) { + return arguments.length ? this.signal('autosize', _) : this.signal('autosize'); +}; + +prototype$1k.renderer = function(type) { + if (!arguments.length) return this._renderType; + if (!renderModule(type)) error('Unrecognized renderer type: ' + type); + if (type !== this._renderType) { + this._renderType = type; + this._resetRenderer(); + } + return this; +}; + +prototype$1k.tooltip = function(handler) { + if (!arguments.length) return this._tooltip; + if (handler !== this._tooltip) { + this._tooltip = handler; + this._resetRenderer(); + } + return this; +}; + +prototype$1k.loader = function(loader) { + if (!arguments.length) return this._loader; + if (loader !== this._loader) { + Dataflow.prototype.loader.call(this, loader); + this._resetRenderer(); + } + return this; +}; + +prototype$1k.resize = function() { + // set flag to perform autosize + this._autosize = 1; + // touch autosize signal to ensure top-level ViewLayout runs + return this.touch(lookupSignal(this, 'autosize')); +}; + +prototype$1k._resetRenderer = function() { + if (this._renderer) { + this._renderer = null; + this.initialize(this._el, this._elBind); + } +}; + +// -- SIZING ---- +prototype$1k._resizeView = resizeView; + +// -- EVENT HANDLING ---- + +prototype$1k.addEventListener = function(type, handler, options) { + var callback = handler; + if (!(options && options.trap === false)) { + // wrap callback in error handler + callback = trap(this, handler); + callback.raw = handler; + } + this._handler.on(type, callback); + return this; +}; + +prototype$1k.removeEventListener = function(type, handler) { + var handlers = this._handler.handlers(type), + i = handlers.length, h, t; + + // search registered handlers, remove if match found + while (--i >= 0) { + t = handlers[i].type; + h = handlers[i].handler; + if (type === t && (handler === h || handler === h.raw)) { + this._handler.off(t, h); + break; + } + } + return this; +}; + +prototype$1k.addResizeListener = function(handler) { + var l = this._resizeListeners; + if (l.indexOf(handler) < 0) { + // add handler if it isn't already registered + // note: error trapping handled elsewhere, so + // no need to wrap handlers here + l.push(handler); + } + return this; +}; + +prototype$1k.removeResizeListener = function(handler) { + var l = this._resizeListeners, + i = l.indexOf(handler); + if (i >= 0) { + l.splice(i, 1); + } + return this; +}; + +function findOperatorHandler(op, handler) { + var t = op._targets || [], + h = t.filter(function(op) { + var u = op._update; + return u && u.handler === handler; + }); + return h.length ? h[0] : null; +} + +function addOperatorListener(view, name, op, handler) { + var h = findOperatorHandler(op, handler); + if (!h) { + h = trap(this, function() { handler(name, op.value); }); + h.handler = handler; + view.on(op, null, h); + } + return view; +} + +function removeOperatorListener(view, op, handler) { + var h = findOperatorHandler(op, handler); + if (h) op._targets.remove(h); + return view; +} + +prototype$1k.addSignalListener = function(name, handler) { + return addOperatorListener(this, name, lookupSignal(this, name), handler); +}; + +prototype$1k.removeSignalListener = function(name, handler) { + return removeOperatorListener(this, lookupSignal(this, name), handler); +}; + +prototype$1k.addDataListener = function(name, handler) { + return addOperatorListener(this, name, dataref(this, name).values, handler); +}; + +prototype$1k.removeDataListener = function(name, handler) { + return removeOperatorListener(this, dataref(this, name).values, handler); +}; + +prototype$1k.preventDefault = function(_) { + if (arguments.length) { + this._preventDefault = _; + return this; + } else { + return this._preventDefault; + } +}; + +prototype$1k.timer = timer$1; +prototype$1k.events = events$1; +prototype$1k.finalize = finalize; +prototype$1k.hover = hover; + +// -- DATA ---- +prototype$1k.data = data; +prototype$1k.change = change; +prototype$1k.insert = insert; +prototype$1k.remove = remove; + +// -- SCALES -- +prototype$1k.scale = scale$3; + +// -- INITIALIZATION ---- +prototype$1k.initialize = initialize$1; + +// -- HEADLESS RENDERING ---- +prototype$1k.toImageURL = renderToImageURL; +prototype$1k.toCanvas = renderToCanvas; +prototype$1k.toSVG = renderToSVG; + +// -- SAVE / RESTORE STATE ---- +prototype$1k.getState = getState$1; +prototype$1k.setState = setState$1; + +function parseExpression$1(expr, scope, preamble) { + var params = {}, ast, gen; + + // parse the expression to an abstract syntax tree (ast) + try { + expr = isString(expr) ? expr : ($(expr) + ''); + ast = parse$3(expr); + } catch (err) { + error('Expression parse error: ' + expr); + } + + // analyze ast function calls for dependencies + ast.visit(function visitor(node) { + if (node.type !== CallExpression) return; + var name = node.callee.name, + visit = codegenParams.visitors[name]; + if (visit) visit(name, node.arguments, scope, params); + }); + + // perform code generation + gen = codeGenerator(ast); + + // collect signal dependencies + gen.globals.forEach(function(name) { + var signalName = SignalPrefix + name; + if (!params.hasOwnProperty(signalName) && scope.getSignal(name)) { + params[signalName] = scope.signalRef(name); + } + }); + + // return generated expression code and dependencies + return { + $expr: preamble ? preamble + 'return(' + gen.code + ');' : gen.code, + $fields: gen.fields, + $params: params + }; +} + +function Entry(type, value, params, parent) { + this.id = -1; + this.type = type; + this.value = value; + this.params = params; + if (parent) this.parent = parent; +} + +function entry(type, value, params, parent) { + return new Entry(type, value, params, parent); +} + +function operator(value, params) { + return entry('operator', value, params); +} + +// ----- + +function ref(op) { + var ref = {$ref: op.id}; + // if operator not yet registered, cache ref to resolve later + if (op.id < 0) (op.refs = op.refs || []).push(ref); + return ref; +} + +var tupleidRef = { + $tupleid: 1, + toString: function() { return ':_tupleid_:'; } +}; + +function fieldRef(field, name) { + return name ? {$field: field, $name: name} : {$field: field}; +} + +var keyFieldRef = fieldRef('key'); + +function compareRef(fields, orders) { + return {$compare: fields, $order: orders}; +} + +function keyRef(fields, flat) { + var ref = {$key: fields}; + if (flat) ref.$flat = true; + return ref; +} + +// ----- + +var Ascending = 'ascending'; + +var Descending = 'descending'; + +function sortKey(sort) { + return !isObject(sort) ? '' + : (sort.order === Descending ? '-' : '+') + + aggrField(sort.op, sort.field); +} + +function aggrField(op, field) { + return (op && op.signal ? '$' + op.signal : op || '') + + (op && field ? '_' : '') + + (field && field.signal ? '$' + field.signal : field || ''); +} + +function isSignal(_) { + return _ && _.signal; +} + +function isExpr(_) { + return _ && _.expr; +} + +/** + * Parse an event selector string. + * Returns an array of event stream definitions. + */ + +function transform$1(name) { + return function(params, value, parent) { + return entry(name, value, params || undefined, parent); + }; +} + +var Aggregate$1 = transform$1('aggregate'); +var Collect$1 = transform$1('collect'); +var Compare$1 = transform$1('compare'); +var Expression$1 = transform$1('expression'); +var Field$1 = transform$1('field'); +var Key$1 = transform$1('key'); +var Projection$1 = transform$1('projection'); +var Proxy$1 = transform$1('proxy'); +var Scale$1 = transform$1('scale'); +var Sieve$1 = transform$1('sieve'); + +const Left$1 = 'left'; +const Right$1 = 'right'; +const Center$1 = 'center'; + +const Start$1 = 'start'; +const End$1 = 'end'; + +var Skip$1 = toSet(['rule']), + Swap = toSet(['group', 'image', 'rect']); + +function anchorExpr(s, e, m) { + return `item.anchor === "${Start$1}" ? ${s} : item.anchor === "${End$1}" ? ${e} : ${m}`; +} + +const alignExpr = anchorExpr( + $(Left$1), + $(Right$1), + $(Center$1) +); + +function DataScope(scope, input, output, values, aggr) { + this.scope = scope; // parent scope object + this.input = input; // first operator in pipeline (tuple input) + this.output = output; // last operator in pipeline (tuple output) + this.values = values; // operator for accessing tuples (but not tuple flow) + + // last aggregate in transform pipeline + this.aggregate = aggr; + + // lookup table of field indices + this.index = {}; +} + +DataScope.fromEntries = function(scope, entries) { + var n = entries.length, + i = 1, + input = entries[0], + values = entries[n-1], + output = entries[n-2], + aggr = null; + + if (input && input.type === 'load') { + input = entries[1]; + } + + // add operator entries to this scope, wire up pulse chain + scope.add(entries[0]); + for (; i 0; +}; + +prototype$1m.toRuntime = function() { + this.finish(); + return { + background: this.background, + operators: this.operators, + streams: this.streams, + updates: this.updates, + bindings: this.bindings, + eventConfig: this.eventConfig + }; +}; + +prototype$1m.id = function() { + return (this._subid ? this._subid + ':' : 0) + this._id++; +}; + +prototype$1m.add = function(op) { + this.operators.push(op); + op.id = this.id(); + // if pre-registration references exist, resolve them now + if (op.refs) { + op.refs.forEach(function(ref) { ref.$ref = op.id; }); + op.refs = null; + } + return op; +}; + +prototype$1m.proxy = function(op) { + var vref = op instanceof Entry ? ref(op) : op; + return this.add(Proxy$1({value: vref})); +}; + +prototype$1m.addStream = function(stream) { + this.streams.push(stream); + stream.id = this.id(); + return stream; +}; + +prototype$1m.addUpdate = function(update) { + this.updates.push(update); + return update; +}; + +// Apply metadata +prototype$1m.finish = function() { + var name, ds; + + // annotate root + if (this.root) this.root.root = true; + + // annotate signals + for (name in this.signals) { + this.signals[name].signal = name; + } + + // annotate scales + for (name in this.scales) { + this.scales[name].scale = name; + } + + // annotate data sets + function annotate(op, name, type) { + var data, list; + if (op) { + data = op.data || (op.data = {}); + list = data[name] || (data[name] = []); + list.push(type); + } + } + for (name in this.data) { + ds = this.data[name]; + annotate(ds.input, name, 'input'); + annotate(ds.output, name, 'output'); + annotate(ds.values, name, 'values'); + for (var field in ds.index) { + annotate(ds.index[field], name, 'index:' + field); + } + } + + return this; +}; + +// ---- + +prototype$1m.pushState = function(encode, parent, lookup) { + this._encode.push(ref(this.add(Sieve$1({pulse: encode})))); + this._parent.push(parent); + this._lookup.push(lookup ? ref(this.proxy(lookup)) : null); + this._markpath.push(-1); +}; + +prototype$1m.popState = function() { + this._encode.pop(); + this._parent.pop(); + this._lookup.pop(); + this._markpath.pop(); +}; + +prototype$1m.parent = function() { + return peek(this._parent); +}; + +prototype$1m.encode = function() { + return peek(this._encode); +}; + +prototype$1m.lookup = function() { + return peek(this._lookup); +}; + +prototype$1m.markpath = function() { + var p = this._markpath; + return ++p[p.length-1]; +}; + +// ---- + +prototype$1m.fieldRef = function(field, name) { + if (isString(field)) return fieldRef(field, name); + if (!field.signal) { + error('Unsupported field reference: ' + $(field)); + } + + var s = field.signal, + f = this.field[s], + params; + + if (!f) { + params = {name: this.signalRef(s)}; + if (name) params.as = name; + this.field[s] = f = ref(this.add(Field$1(params))); + } + return f; +}; + +prototype$1m.compareRef = function(cmp, stable) { + function check(_) { + if (isSignal(_)) { + signal = true; + return scope.signalRef(_.signal); + } else if (isExpr(_)) { + signal = true; + return scope.exprRef(_.expr); + } else { + return _; + } + } + + var scope = this, + signal = false, + fields = array(cmp.field).map(check), + orders = array(cmp.order).map(check); + + if (stable) { + fields.push(tupleidRef); + } + + return signal + ? ref(this.add(Compare$1({fields: fields, orders: orders}))) + : compareRef(fields, orders); +}; + +prototype$1m.keyRef = function(fields, flat) { + function check(_) { + if (isSignal(_)) { + signal = true; + return ref(sig[_.signal]); + } else { + return _; + } + } + + var sig = this.signals, + signal = false; + fields = array(fields).map(check); + + return signal + ? ref(this.add(Key$1({fields: fields, flat: flat}))) + : keyRef(fields, flat); +}; + +prototype$1m.sortRef = function(sort) { + if (!sort) return sort; + + // including id ensures stable sorting + var a = [aggrField(sort.op, sort.field), tupleidRef], + o = sort.order || Ascending; + + return o.signal + ? ref(this.add(Compare$1({ + fields: a, + orders: [o = this.signalRef(o.signal), o] + }))) + : compareRef(a, [o, o]); +}; + +// ---- + +prototype$1m.event = function(source, type) { + var key = source + ':' + type; + if (!this.events[key]) { + var id = this.id(); + this.streams.push({ + id: id, + source: source, + type: type + }); + this.events[key] = id; + } + return this.events[key]; +}; + +// ---- + +prototype$1m.addSignal = function(name, value) { + if (this.signals.hasOwnProperty(name)) { + error('Duplicate signal name: ' + $(name)); + } + var op = value instanceof Entry ? value : this.add(operator(value)); + return this.signals[name] = op; +}; + +prototype$1m.getSignal = function(name) { + if (!this.signals[name]) { + error('Unrecognized signal name: ' + $(name)); + } + return this.signals[name]; +}; + +prototype$1m.signalRef = function(s) { + if (this.signals[s]) { + return ref(this.signals[s]); + } else if (!this.lambdas.hasOwnProperty(s)) { + this.lambdas[s] = this.add(operator(null)); + } + return ref(this.lambdas[s]); +}; + +prototype$1m.parseLambdas = function() { + var code = Object.keys(this.lambdas); + for (var i=0, n=code.length; i 0 ? ',' : '') + + (isObject(value) + ? (value.signal || propertyLambda(value)) + : $(value)); + } + return code + ']'; +} + +function objectLambda(obj) { + var code = '{', + i = 0, + key, value; + + for (key in obj) { + value = obj[key]; + code += (++i > 1 ? ',' : '') + + $(key) + ':' + + (isObject(value) + ? (value.signal || propertyLambda(value)) + : $(value)); + } + return code + '}'; +} + +prototype$1m.exprRef = function(code, name) { + var params = {expr: parseExpression$1(code, this)}; + if (name) params.expr.$name = name; + return ref(this.add(Expression$1(params))); +}; + +prototype$1m.addBinding = function(name, bind) { + if (!this.bindings) { + error('Nested signals do not support binding: ' + $(name)); + } + this.bindings.push(extend({signal: name}, bind)); +}; + +// ---- + +prototype$1m.addScaleProj = function(name, transform) { + if (this.scales.hasOwnProperty(name)) { + error('Duplicate scale or projection name: ' + $(name)); + } + this.scales[name] = this.add(transform); +}; + +prototype$1m.addScale = function(name, params) { + this.addScaleProj(name, Scale$1(params)); +}; + +prototype$1m.addProjection = function(name, params) { + this.addScaleProj(name, Projection$1(params)); +}; + +prototype$1m.getScale = function(name) { + if (!this.scales[name]) { + error('Unrecognized scale name: ' + $(name)); + } + return this.scales[name]; +}; + +prototype$1m.projectionRef = +prototype$1m.scaleRef = function(name) { + return ref(this.getScale(name)); +}; + +prototype$1m.projectionType = +prototype$1m.scaleType = function(name) { + return this.getScale(name).params.type; +}; + +// ---- + +prototype$1m.addData = function(name, dataScope) { + if (this.data.hasOwnProperty(name)) { + error('Duplicate data set name: ' + $(name)); + } + return (this.data[name] = dataScope); +}; + +prototype$1m.getData = function(name) { + if (!this.data[name]) { + error('Undefined data set name: ' + $(name)); + } + return this.data[name]; +}; + +prototype$1m.addDataPipeline = function(name, entries) { + if (this.data.hasOwnProperty(name)) { + error('Duplicate data set name: ' + $(name)); + } + return this.addData(name, DataScope.fromEntries(this, entries)); +}; + +// -- Transforms ----- +extend(transforms, tx, vtx, encode, geo, force, tree$1, voronoi$1, wordcloud, xf); + +class Data { + static fromArray(arr) { + const fields = getFieldsFromArr(arr); + const inferredTypes = inferTypes(arr, fields); + const schema = fields.reduce((schema, f) => { + const descriptor = { + type: inferredTypes[f], + cardinality: getCardinalityFromArr(arr, f) + }; + if (descriptor.type !== FieldType.STRING && + descriptor.type !== FieldType.BOOLEAN) { + descriptor["extent"] = extent(arr, d => d[f]); + } + schema[f] = descriptor; + return schema; + }, {}); + const numRows = arr.length; + let asp = [Data.getNumRowsDeclaration(numRows)]; + asp = fields.reduce((asp, f) => { + asp.push(Data.getFieldDeclaration(f, schema[f].type)); + asp.push(Data.getCardinalityDeclaration(f, schema[f].cardinality)); + // TODO: figure out how to handle non ints + if (schema[f].extent && schema[f].type === FieldType.INTEGER) { + asp.push(Data.getExtentDeclaration(f, schema[f].extent[0], schema[f].extent[1])); + } + return asp; + }, asp); + return { + fields, + schema, + numRows, + asp: asp.join("\n"), + data: arr + }; + } + static getNumRowsDeclaration(numRows) { + return `num_rows(${numRows}).`; + } + static getFieldDeclaration(fieldName, fieldType) { + return `fieldtype(${cleanFieldName(fieldName)},${fieldType}).`; + } + static getCardinalityDeclaration(fieldName, cardinality) { + return `cardinality(${cleanFieldName(fieldName)},${cardinality}).`; + } + static getExtentDeclaration(fieldName, min, max) { + if (!Number.isInteger(min) || !Number.isInteger(max)) { + throw new Error(`Extent is yet supported for floats: ${min} ${max}`); + } + return `extent(${cleanFieldName(fieldName)},${min},${max}).`; + } +} +function cleanFieldName(fieldName) { + return `"${fieldName}"`; +} +function getFieldsFromArr(arr) { + if (!arr) { + return []; + } + return Object.keys(arr[0]); +} +function getCardinalityFromArr(arr, field) { + const unique = arr.reduce((set, d) => { + set.add(d[field]); + return set; + }, new Set()); + return unique.size; +} +class FieldType { +} +FieldType.STRING = "string"; +FieldType.BOOLEAN = "boolean"; +FieldType.INTEGER = "integer"; +FieldType.NUMBER = "number"; +FieldType.DATE = "date"; + +function doesMatchRegex(s, regex) { + const match = s.match(regex); + return !!match; +} + +class Constraint { + static isHardConstraint(constraint) { + return constraint.type === Constraint.HARD_TYPE; + } + static isSoftConstraint(constraint) { + return constraint.type === Constraint.SOFT_TYPE; + } + static getUniqueName(constraint) { + return `${constraint.type}-${constraint.subtype}-${constraint.name}`; + } + static fromPrefAsp(asp) { + const matches = doesMatchRegex(asp, PREF_ASP_REGEX); + if (!matches) { + throw new Error(`ASP (${asp}) does not match constraint regex.`); + } + const [fullMatch, description, code, type, subtype, name, view, parameters,] = PREF_ASP_REGEX.exec(asp); + const definitions = code + .trim() + .split('\n') + .map(line => { + const [fullMatch, definition] = PREF_DEFINITION_REGEX.exec(line); + return definition; + }); + return { + subtype, + name, + view, + parameters, + description, + definitions, + type: type, + }; + } + static toPrefAsp(c) { + const description = `% @constraint ${c.description}`; + const head = `${c.type}(${c.subtype},${c.name},${c.view},${c.parameters})`; + const code = c.definitions + .map(def => { + return `${head} :- ${def}`; + }) + .join('\n') + .trim(); + return `${description}\n${code}`; + } +} +Constraint.HARD_TYPE = 'hard'; +Constraint.SOFT_TYPE = 'soft'; +const PREF_ASP_REGEX = /%\s*@constraint (.*)\n((?:(hard|soft)\((\w+),(\w+),(\w+),(\w+)\).*\n?)+)/; +const PREF_DEFINITION_REGEX = /:-\s*(.*)/; + +class ConstraintDictionary { + static isSoftConstraintDictionary(dict) { + if (Object.entries(dict).length === 0) { + return false; + } + const [firstName, firstConstraint] = Object.entries(dict)[0]; + return Constraint.isSoftConstraint(firstConstraint); + } + static isHardConstraintDictionary(dict) { + if (Object.entries(dict).length === 0) { + return false; + } + const [firstName, firstConstraint] = Object.entries(dict)[0]; + return Constraint.isHardConstraint(firstConstraint); + } + static fromAsp(prefAsp, weightAsp) { + const prefMatches = doesMatchRegex(prefAsp, PREF_REGEX); + let weightDictionary; + if (!!weightAsp) { + const weightMatches = doesMatchRegex(weightAsp, WEIGHT_REGEX); + if (!weightMatches) { + throw new Error(`Weight ASP: ${weightAsp} does not match weight regex.`); + } + const singleWeightAsps = weightAsp.match(WEIGHT_REGEX); + weightDictionary = singleWeightAsps.reduce((dict, asp) => { + const [fullMatch, subtype, name, weight] = WEIGHT_REGEX.exec(asp); + WEIGHT_REGEX.lastIndex = 0; + const uniqueName = `soft-${subtype}-${name}`; + dict[uniqueName] = +weight; + return dict; + }, {}); + } + if (!prefMatches) { + throw new Error(`Pref ASP: ${prefMatches} does not match pref regex.`); + } + const singlePrefAsps = prefAsp.match(PREF_REGEX); + const result = singlePrefAsps.reduce((dict, asp) => { + const constraint = Constraint.fromPrefAsp(asp); + const uniqueName = Constraint.getUniqueName(constraint); + if (!!weightDictionary) { + constraint.weight = weightDictionary[uniqueName]; + } + dict[uniqueName] = constraint; + return dict; + }, {}); + return result; + } +} +const PREF_REGEX = /%\s*@constraint(?:(?:.+)\n?)+/g; +const WEIGHT_REGEX = /soft_weight\((\w+),(\w+),(\d+)\).*/g; + +class Facts { + static toVegaLiteSpecDictionary(facts) { + const cleanedFacts = facts.map(fact => { + const cleaned = fact.replace(/\"/g, ""); + return cleaned; + }); + return facts2vl(cleanedFacts); + } + static toViews(facts) { + return facts2views(facts); + } + static getHardViolations(facts) { + return facts.filter(f => doesMatchRegex(f, /hard\(.*/)); + } + static getSoftViolations(facts) { + return facts.filter(f => doesMatchRegex(f, /soft\(.*/)); + } + static getViewFacts(facts) { + return facts.filter(f => doesMatchRegex(f, /view_fact\(.*/)); + } +} +const VIEW_REGEX_CAPTURE = /view\((.*)\)/; +const FACT_REGEX = /(\w+)\(([\w\.\/]+)(,([\w\.]+))?(,([\w\.]+))?\)/; +function facts2vl(facts) { + const views = facts2views(facts); + const result = views.reduce((dict, v) => { + dict[v] = facts2vl_single(facts, v); + return dict; + }, {}); + return result; +} +function facts2views(facts) { + const views = facts + .filter(fact => { + return doesMatchRegex(fact, VIEW_REGEX_CAPTURE); + }) + .map(fact => { + const extract = VIEW_REGEX_CAPTURE.exec(fact); + if (extract) { + const [_, name] = extract; + return name; + } + throw new Error(`Invalid view statement: ${fact}.`); + }); + return views; +} +function facts2vl_single(facts, view) { + let mark; + const encodings = {}; + for (const value of facts) { + const extract = FACT_REGEX.exec(value); + if (!extract) { + continue; + } + const [_, predicate, viz, __, first, ___, second] = extract; + if (viz !== view) { + continue; + } + if (predicate === "view") { + continue; + } + switch (predicate) { + case "mark": + mark = first; + break; + case "field": + case "type": + case "channel": + case "scale": + case "bin": + case "aggregate": + case "stack": + if (!encodings[first]) { + encodings[first] = {}; + } + encodings[first][predicate] = second; + } + } + const encoding = {}; + for (const e of Object.keys(encodings)) { + const enc = encodings[e]; + const scale = { + ...(enc.scale === "log" ? { type: "log" } : {}), + ...(enc.scale === "zero" ? { zero: true } : {}) + }; + const insert = { + type: enc.type, + ...(enc.aggregate ? { aggregate: enc.aggregate } : {}), + ...(enc.field ? { field: enc.field } : {}), + ...(enc.stack ? { stack: enc.stack } : {}), + ...(enc.bin ? { bin: JSON.parse(enc.bin) } : {}), + ...(enc.scale ? { scale } : {}) + }; + if (enc.aggregate) ; + encoding[enc.channel] = insert; + } + const spec = { + mark, + encoding + }; + return spec; +} + +class Witness { + static toVegaLiteSpecDictionary(witness) { + return Facts.toVegaLiteSpecDictionary(witness.facts); + } +} + +class Result { + static toWitnesses(result) { + return (result.Call || []).reduce((arr, el) => { + el.Witnesses.forEach((d, i) => { + const facts = d.Value; // add line terminator period. + let costs; + if (result.Models.Costs) { + costs = result.Models.Costs[i]; + } + arr.push({ + costs, + facts + }); + }); + return arr; + }, []); + } + static getBestVegaLiteSpecDictionary(result) { + const witnesses = Result.toWitnesses(result); + return Witness.toVegaLiteSpecDictionary(witnesses[0]); + } + static isSat(result) { + return result.Result === "OPTIMUM FOUND" || result.Result === "SATISFIABLE"; + } +} + +const tmp = require("tmp"); +const fs = require("fs"); +const path$4 = require("path"); +const { spawnSync } = require("child_process"); +tmp.setGracefulCleanup(); +const DEFAULT_OPTIONS = { + strictHard: true, + generate: true, + generateExtraEncodings: true, + optimize: true, + generateData: false +}; +class Draco { + static run(program, options, files) { + let resolvedFiles = files ? files : []; + resolvedFiles = resolvedFiles.concat(getFilesFromOptions(options)); + const tmpObj = tmp.fileSync({ postfix: ".lp" }); + if (program) { + fs.writeFileSync(tmpObj.name, program); + resolvedFiles = resolvedFiles.concat([tmpObj.name]); + } + const opt = []; + if (options) { + if (options.models !== undefined) { + opt.push(`--models=${options.models}`); + } + if (options.randomFreq !== undefined) { + // opt.push(`--sign-def=3`); + opt.push(`--rand-freq=${options.randomFreq}`); + } + if (options.randomSeed !== undefined) { + opt.push(`--seed=${options.randomSeed}`); + } + } + const out = runClingoSync(resolvedFiles, opt); + const result = JSON.parse(out.output[1]); + return result; + } + static runDebug(program, options, files) { + const result = Draco.run(program, { strictHard: false }, files); + if (!Result.isSat(result)) { + return []; + } + const witness = Result.toWitnesses(result)[0]; + return Facts.getHardViolations(witness.facts); + } + static getProgram(data, query) { + return `${data.asp} +${query}`; + } + static getSoftConstraints() { + const softDir = path$4.resolve(__dirname, "../model/view/soft"); + const subtypeDirs = fs + .readdirSync(softDir) + .filter(f => fs.statSync(path$4.join(softDir, f)).isDirectory()); + const result = subtypeDirs.reduce((dict, dir) => { + const prefFile = path$4.resolve(softDir, dir, "pref.lp"); + const prefContents = fs.readFileSync(prefFile, "utf8"); + const weightFile = path$4.resolve(softDir, dir, "weight.lp"); + const weightContents = fs.readFileSync(weightFile, "utf8"); + const constraints = ConstraintDictionary.fromAsp(prefContents, weightContents); + return { + ...dict, + ...constraints + }; + }, {}); + return result; + } +} +function runClingoSync(files, options) { + return spawnSync("clingo", ["--outf=2", "--quiet=1,2,2", ...options, ...files], { + encoding: "utf-8" + }); +} +function resolvePathToModelProgram(file) { + return path$4.resolve(__dirname, "../model/program", file); +} +function resolvePathToModelView(file) { + return path$4.resolve(__dirname, "../model/view", file); +} +function getFilesFromOptions(options) { + const result = []; + const resolvedOptions = options + ? Object.assign(Object.assign({}, DEFAULT_OPTIONS), options) + : DEFAULT_OPTIONS; + const { generate, generateExtraEncodings, strictHard, optimize, generateData } = resolvedOptions; + if (generate && generateExtraEncodings && strictHard && optimize) { + result.push(resolvePathToModelProgram("default.lp")); + } + else { + result.push(resolvePathToModelProgram("../data/index.lp")); + result.push(resolvePathToModelView("program/base.lp")); + if (generate) { + result.push(resolvePathToModelView("generate.lp")); + } + if (generateExtraEncodings) { + result.push(resolvePathToModelView("generate_extra_encodings.lp")); + } + if (strictHard) { + result.push(resolvePathToModelView("hard_integrity.lp")); + } + if (optimize) { + result.push(resolvePathToModelView("optimize.lp")); + } + } + if (generateData) { + result.push(resolvePathToModelProgram("../data/generate.lp")); + result.push(resolvePathToModelProgram("../data/grammar.lp")); + } + return result; +} + +exports.Constraint = Constraint; +exports.ConstraintDictionary = ConstraintDictionary; +exports.DEFAULT_OPTIONS = DEFAULT_OPTIONS; +exports.Data = Data; +exports.Draco = Draco; +exports.Facts = Facts; +exports.FieldType = FieldType; +exports.Result = Result; +exports.Witness = Witness; +//# sourceMappingURL=bundle.js.map diff --git a/build/bundle.js.map b/build/bundle.js.map new file mode 100644 index 0000000..10700e9 --- /dev/null +++ b/build/bundle.js.map @@ -0,0 +1 @@ +{"version":3,"file":"bundle.js","sources":["../node_modules/d3-array/src/ascending.js","../node_modules/d3-array/src/bisector.js","../node_modules/d3-array/src/bisect.js","../node_modules/d3-array/src/extent.js","../node_modules/vega-util/src/accessor.js","../node_modules/vega-util/src/error.js","../node_modules/vega-util/src/splitAccessPath.js","../node_modules/vega-util/src/isArray.js","../node_modules/vega-util/src/isObject.js","../node_modules/vega-util/src/isString.js","../node_modules/vega-util/src/stringValue.js","../node_modules/vega-util/src/field.js","../node_modules/vega-util/src/accessors.js","../node_modules/vega-util/src/logger.js","../node_modules/vega-util/src/peek.js","../node_modules/vega-util/src/toNumber.js","../node_modules/vega-util/src/transform.js","../node_modules/vega-util/src/quarter.js","../node_modules/vega-util/src/array.js","../node_modules/vega-util/src/clampRange.js","../node_modules/vega-util/src/isFunction.js","../node_modules/vega-util/src/compare.js","../node_modules/vega-util/src/constant.js","../node_modules/vega-util/src/debounce.js","../node_modules/vega-util/src/extend.js","../node_modules/vega-util/src/extent.js","../node_modules/vega-util/src/extentIndex.js","../node_modules/vega-util/src/fastmap.js","../node_modules/vega-util/src/flush.js","../node_modules/vega-util/src/inherits.js","../node_modules/vega-util/src/inrange.js","../node_modules/vega-util/src/isBoolean.js","../node_modules/vega-util/src/isDate.js","../node_modules/vega-util/src/isNumber.js","../node_modules/vega-util/src/isRegExp.js","../node_modules/vega-util/src/key.js","../node_modules/vega-util/src/lerp.js","../node_modules/vega-util/src/merge.js","../node_modules/vega-util/src/repeat.js","../node_modules/vega-util/src/pad.js","../node_modules/vega-util/src/span.js","../node_modules/vega-util/src/toBoolean.js","../node_modules/vega-util/src/toDate.js","../node_modules/vega-util/src/toString.js","../node_modules/vega-util/src/toSet.js","../node_modules/vega-util/src/truncate.js","../node_modules/vega-util/src/visitArray.js","../node_modules/vega-dataflow/src/util/UniqueList.js","../node_modules/vega-dataflow/src/util/asyncCallback.js","../node_modules/vega-dataflow/src/Tuple.js","../node_modules/vega-dataflow/src/ChangeSet.js","../node_modules/vega-dataflow/src/Parameters.js","../node_modules/vega-dataflow/src/Operator.js","../node_modules/vega-dataflow/src/dataflow/add.js","../node_modules/vega-dataflow/src/dataflow/connect.js","../node_modules/vega-dataflow/src/EventStream.js","../node_modules/vega-dataflow/src/dataflow/events.js","../node_modules/vega-loader/src/loader.js","../node_modules/vega-loader/src/type.js","../node_modules/d3-dsv/src/dsv.js","../node_modules/d3-dsv/src/csv.js","../node_modules/d3-dsv/src/tsv.js","../node_modules/vega-loader/src/formats/dsv.js","../node_modules/vega-loader/src/formats/json.js","../node_modules/topojson-client/src/identity.js","../node_modules/topojson-client/src/transform.js","../node_modules/topojson-client/src/reverse.js","../node_modules/topojson-client/src/feature.js","../node_modules/topojson-client/src/stitch.js","../node_modules/topojson-client/src/mesh.js","../node_modules/vega-loader/src/formats/topojson.js","../node_modules/vega-loader/src/formats/index.js","../node_modules/d3-time/src/interval.js","../node_modules/d3-time/src/millisecond.js","../node_modules/d3-time/src/duration.js","../node_modules/d3-time/src/second.js","../node_modules/d3-time/src/minute.js","../node_modules/d3-time/src/hour.js","../node_modules/d3-time/src/day.js","../node_modules/d3-time/src/week.js","../node_modules/d3-time/src/month.js","../node_modules/d3-time/src/year.js","../node_modules/d3-time/src/utcMinute.js","../node_modules/d3-time/src/utcHour.js","../node_modules/d3-time/src/utcDay.js","../node_modules/d3-time/src/utcWeek.js","../node_modules/d3-time/src/utcMonth.js","../node_modules/d3-time/src/utcYear.js","../node_modules/d3-time-format/src/locale.js","../node_modules/d3-time-format/src/defaultLocale.js","../node_modules/d3-time-format/src/isoFormat.js","../node_modules/d3-time-format/src/isoParse.js","../node_modules/vega-loader/src/read.js","../node_modules/vega-loader/index.js","../node_modules/vega-dataflow/src/dataflow/load.js","../node_modules/vega-dataflow/src/dataflow/on.js","../node_modules/vega-dataflow/src/dataflow/rank.js","../node_modules/vega-dataflow/src/Pulse.js","../node_modules/vega-dataflow/src/MultiPulse.js","../node_modules/vega-dataflow/src/dataflow/run.js","../node_modules/vega-dataflow/src/dataflow/update.js","../node_modules/vega-dataflow/src/util/Heap.js","../node_modules/vega-dataflow/src/dataflow/Dataflow.js","../node_modules/vega-dataflow/src/Transform.js","../node_modules/vega-dataflow/src/register.js","../node_modules/vega-dataflow/index.js","../node_modules/vega-transforms/src/util/AggregateKeys.js","../node_modules/vega-transforms/src/util/AggregateOps.js","../node_modules/vega-statistics/src/bin.js","../node_modules/vega-statistics/src/numbers.js","../node_modules/vega-statistics/src/random.js","../node_modules/vega-statistics/node_modules/d3-array/src/ascending.js","../node_modules/vega-statistics/node_modules/d3-array/src/bisector.js","../node_modules/vega-statistics/node_modules/d3-array/src/bisect.js","../node_modules/vega-statistics/node_modules/d3-array/src/variance.js","../node_modules/vega-statistics/node_modules/d3-array/src/number.js","../node_modules/vega-statistics/node_modules/d3-array/src/quantile.js","../node_modules/vega-statistics/src/bootstrapCI.js","../node_modules/vega-statistics/src/quartiles.js","../node_modules/vega-statistics/src/normal.js","../node_modules/vega-statistics/src/kde.js","../node_modules/vega-statistics/src/mixture.js","../node_modules/vega-statistics/src/uniform.js","../node_modules/vega-statistics/src/regression/ols.js","../node_modules/vega-statistics/src/sampleCurve.js","../node_modules/vega-transforms/src/util/TupleStore.js","../node_modules/vega-transforms/src/Aggregate.js","../node_modules/vega-transforms/src/Bin.js","../node_modules/vega-transforms/src/util/SortedList.js","../node_modules/vega-transforms/src/Collect.js","../node_modules/vega-transforms/src/Compare.js","../node_modules/vega-transforms/src/CountPattern.js","../node_modules/vega-transforms/src/Cross.js","../node_modules/vega-transforms/src/util/Distributions.js","../node_modules/vega-transforms/src/Density.js","../node_modules/vega-transforms/src/Expression.js","../node_modules/vega-transforms/src/Extent.js","../node_modules/vega-transforms/src/Subflow.js","../node_modules/vega-transforms/src/Facet.js","../node_modules/vega-transforms/src/Field.js","../node_modules/vega-transforms/src/Filter.js","../node_modules/vega-transforms/src/util/util.js","../node_modules/vega-transforms/src/Flatten.js","../node_modules/vega-transforms/src/Fold.js","../node_modules/vega-transforms/src/Formula.js","../node_modules/vega-transforms/src/Generate.js","../node_modules/vega-transforms/node_modules/d3-array/src/ascending.js","../node_modules/vega-transforms/node_modules/d3-array/src/bisector.js","../node_modules/vega-transforms/node_modules/d3-array/src/bisect.js","../node_modules/vega-transforms/node_modules/d3-array/src/extent.js","../node_modules/vega-transforms/node_modules/d3-array/src/range.js","../node_modules/vega-transforms/node_modules/d3-array/src/number.js","../node_modules/vega-transforms/node_modules/d3-array/src/quantile.js","../node_modules/vega-transforms/node_modules/d3-array/src/max.js","../node_modules/vega-transforms/node_modules/d3-array/src/mean.js","../node_modules/vega-transforms/node_modules/d3-array/src/quickselect.js","../node_modules/vega-transforms/node_modules/d3-array/src/median.js","../node_modules/vega-transforms/node_modules/d3-array/src/min.js","../node_modules/vega-transforms/src/Impute.js","../node_modules/vega-transforms/src/JoinAggregate.js","../node_modules/vega-transforms/src/KDE.js","../node_modules/vega-transforms/src/Key.js","../node_modules/vega-transforms/src/Load.js","../node_modules/vega-transforms/src/Lookup.js","../node_modules/vega-transforms/src/MultiExtent.js","../node_modules/vega-transforms/src/MultiValues.js","../node_modules/vega-transforms/src/Params.js","../node_modules/vega-transforms/src/Pivot.js","../node_modules/vega-transforms/src/PreFacet.js","../node_modules/vega-transforms/src/Project.js","../node_modules/vega-transforms/src/Proxy.js","../node_modules/vega-transforms/src/Relay.js","../node_modules/vega-transforms/src/Sample.js","../node_modules/vega-transforms/src/Sequence.js","../node_modules/vega-transforms/src/Sieve.js","../node_modules/vega-transforms/src/TupleIndex.js","../node_modules/vega-transforms/src/Values.js","../node_modules/vega-transforms/src/util/WindowOps.js","../node_modules/vega-transforms/src/util/WindowState.js","../node_modules/vega-transforms/src/Window.js","../node_modules/vega-view-transforms/src/constants.js","../node_modules/vega-scenegraph/src/Bounds.js","../node_modules/vega-scenegraph/src/Gradient.js","../node_modules/vega-scenegraph/src/Item.js","../node_modules/vega-scenegraph/src/GroupItem.js","../node_modules/vega-canvas/src/domCanvas.js","../node_modules/vega-canvas/src/nodeCanvas.js","../node_modules/vega-canvas/index.js","../node_modules/vega-scenegraph/src/ResourceLoader.js","../node_modules/d3-path/src/path.js","../node_modules/d3-shape/src/constant.js","../node_modules/d3-shape/src/math.js","../node_modules/d3-shape/src/arc.js","../node_modules/d3-shape/src/curve/linear.js","../node_modules/d3-shape/src/point.js","../node_modules/d3-shape/src/line.js","../node_modules/d3-shape/src/area.js","../node_modules/d3-shape/src/symbol/circle.js","../node_modules/d3-shape/src/symbol.js","../node_modules/d3-shape/src/noop.js","../node_modules/d3-shape/src/curve/basis.js","../node_modules/d3-shape/src/curve/basisClosed.js","../node_modules/d3-shape/src/curve/basisOpen.js","../node_modules/d3-shape/src/curve/bundle.js","../node_modules/d3-shape/src/curve/cardinal.js","../node_modules/d3-shape/src/curve/cardinalClosed.js","../node_modules/d3-shape/src/curve/cardinalOpen.js","../node_modules/d3-shape/src/curve/catmullRom.js","../node_modules/d3-shape/src/curve/catmullRomClosed.js","../node_modules/d3-shape/src/curve/catmullRomOpen.js","../node_modules/d3-shape/src/curve/linearClosed.js","../node_modules/d3-shape/src/curve/monotone.js","../node_modules/d3-shape/src/curve/natural.js","../node_modules/d3-shape/src/curve/step.js","../node_modules/vega-scenegraph/src/path/curves.js","../node_modules/vega-scenegraph/src/path/parse.js","../node_modules/vega-scenegraph/src/util/constants.js","../node_modules/vega-scenegraph/src/path/arc.js","../node_modules/vega-scenegraph/src/path/render.js","../node_modules/vega-scenegraph/src/path/symbols.js","../node_modules/vega-scenegraph/src/path/rectangle.js","../node_modules/vega-scenegraph/src/path/trail.js","../node_modules/vega-scenegraph/src/path/shapes.js","../node_modules/vega-scenegraph/src/bound/boundStroke.js","../node_modules/vega-scenegraph/src/bound/boundContext.js","../node_modules/vega-scenegraph/src/util/canvas/context.js","../node_modules/vega-scenegraph/src/util/intersect.js","../node_modules/vega-scenegraph/src/util/canvas/gradient.js","../node_modules/vega-scenegraph/src/util/canvas/color.js","../node_modules/vega-scenegraph/src/util/canvas/fill.js","../node_modules/vega-scenegraph/src/util/canvas/stroke.js","../node_modules/vega-scenegraph/src/util/visit.js","../node_modules/vega-scenegraph/src/util/canvas/draw.js","../node_modules/vega-scenegraph/src/util/canvas/pick.js","../node_modules/vega-scenegraph/src/util/svg/transform.js","../node_modules/vega-scenegraph/src/marks/markItemPath.js","../node_modules/vega-scenegraph/src/marks/arc.js","../node_modules/vega-scenegraph/src/util/pickPath.js","../node_modules/vega-scenegraph/src/marks/markMultiItemPath.js","../node_modules/vega-scenegraph/src/marks/area.js","../node_modules/vega-scenegraph/src/util/svg/clip.js","../node_modules/vega-scenegraph/src/marks/group.js","../node_modules/vega-scenegraph/src/marks/image.js","../node_modules/vega-scenegraph/src/marks/line.js","../node_modules/vega-scenegraph/src/marks/path.js","../node_modules/vega-scenegraph/src/marks/rect.js","../node_modules/vega-scenegraph/src/marks/rule.js","../node_modules/vega-scenegraph/src/marks/shape.js","../node_modules/vega-scenegraph/src/marks/symbol.js","../node_modules/vega-scenegraph/src/util/text.js","../node_modules/vega-scenegraph/src/marks/text.js","../node_modules/vega-scenegraph/src/marks/trail.js","../node_modules/vega-scenegraph/src/marks/index.js","../node_modules/vega-scenegraph/src/bound/boundItem.js","../node_modules/vega-scenegraph/src/bound/boundMark.js","../node_modules/vega-scenegraph/src/util/serialize.js","../node_modules/vega-scenegraph/src/Scenegraph.js","../node_modules/vega-scenegraph/src/util/dom.js","../node_modules/vega-scenegraph/src/util/point.js","../node_modules/vega-scenegraph/src/util/resolveItem.js","../node_modules/vega-scenegraph/src/Handler.js","../node_modules/vega-scenegraph/src/Renderer.js","../node_modules/vega-scenegraph/src/util/events.js","../node_modules/vega-scenegraph/src/CanvasHandler.js","../node_modules/vega-scenegraph/src/util/canvas/clip.js","../node_modules/vega-scenegraph/src/util/canvas/resize.js","../node_modules/vega-scenegraph/src/CanvasRenderer.js","../node_modules/vega-scenegraph/src/SVGHandler.js","../node_modules/vega-scenegraph/src/util/tags.js","../node_modules/vega-scenegraph/src/util/svg/metadata.js","../node_modules/vega-scenegraph/src/util/svg/styles.js","../node_modules/vega-scenegraph/src/SVGRenderer.js","../node_modules/vega-scenegraph/src/SVGStringRenderer.js","../node_modules/vega-scenegraph/src/modules.js","../node_modules/vega-scenegraph/src/intersect.js","../node_modules/vega-scenegraph/src/bound/boundClip.js","../node_modules/vega-view-transforms/src/Bound.js","../node_modules/vega-view-transforms/src/Identifier.js","../node_modules/vega-view-transforms/src/Mark.js","../node_modules/vega-view-transforms/src/Overlap.js","../node_modules/vega-view-transforms/src/Render.js","../node_modules/vega-view-transforms/src/layout/util.js","../node_modules/vega-view-transforms/src/layout/axis.js","../node_modules/vega-view-transforms/src/layout/grid.js","../node_modules/vega-view-transforms/src/layout/legend.js","../node_modules/vega-view-transforms/src/layout/title.js","../node_modules/vega-view-transforms/src/ViewLayout.js","../node_modules/vega-scale/src/scales/bandSpace.js","../node_modules/vega-scale/src/scales/types.js","../node_modules/vega-scale/src/scales/timeInterval.js","../node_modules/vega-scale/src/scales/invertRange.js","../node_modules/vega-scale/src/scales/invertRangeExtent.js","../node_modules/vega-scale/node_modules/d3-array/src/ascending.js","../node_modules/vega-scale/node_modules/d3-array/src/bisector.js","../node_modules/vega-scale/node_modules/d3-array/src/bisect.js","../node_modules/vega-scale/node_modules/d3-array/src/range.js","../node_modules/d3-scale/node_modules/d3-array/src/ascending.js","../node_modules/d3-scale/node_modules/d3-array/src/bisector.js","../node_modules/d3-scale/node_modules/d3-array/src/bisect.js","../node_modules/d3-scale/node_modules/d3-array/src/ticks.js","../node_modules/d3-scale/node_modules/d3-array/src/number.js","../node_modules/d3-scale/node_modules/d3-array/src/quantile.js","../node_modules/d3-scale/src/init.js","../node_modules/d3-scale/src/ordinal.js","../node_modules/d3-color/src/define.js","../node_modules/d3-color/src/color.js","../node_modules/d3-color/src/math.js","../node_modules/d3-color/src/lab.js","../node_modules/d3-color/src/cubehelix.js","../node_modules/d3-interpolate/src/basis.js","../node_modules/d3-interpolate/src/basisClosed.js","../node_modules/d3-interpolate/src/constant.js","../node_modules/d3-interpolate/src/color.js","../node_modules/d3-interpolate/src/rgb.js","../node_modules/d3-interpolate/src/array.js","../node_modules/d3-interpolate/src/date.js","../node_modules/d3-interpolate/src/number.js","../node_modules/d3-interpolate/src/object.js","../node_modules/d3-interpolate/src/string.js","../node_modules/d3-interpolate/src/value.js","../node_modules/d3-interpolate/src/discrete.js","../node_modules/d3-interpolate/src/hue.js","../node_modules/d3-interpolate/src/round.js","../node_modules/d3-interpolate/src/transform/decompose.js","../node_modules/d3-interpolate/src/transform/parse.js","../node_modules/d3-interpolate/src/transform/index.js","../node_modules/d3-interpolate/src/zoom.js","../node_modules/d3-interpolate/src/hsl.js","../node_modules/d3-interpolate/src/lab.js","../node_modules/d3-interpolate/src/hcl.js","../node_modules/d3-interpolate/src/cubehelix.js","../node_modules/d3-interpolate/src/piecewise.js","../node_modules/d3-interpolate/src/quantize.js","../node_modules/d3-scale/src/constant.js","../node_modules/d3-scale/src/number.js","../node_modules/d3-scale/src/continuous.js","../node_modules/d3-format/src/formatDecimal.js","../node_modules/d3-format/src/exponent.js","../node_modules/d3-format/src/formatGroup.js","../node_modules/d3-format/src/formatNumerals.js","../node_modules/d3-format/src/formatSpecifier.js","../node_modules/d3-format/src/formatTrim.js","../node_modules/d3-format/src/formatPrefixAuto.js","../node_modules/d3-format/src/formatRounded.js","../node_modules/d3-format/src/formatTypes.js","../node_modules/d3-format/src/identity.js","../node_modules/d3-format/src/locale.js","../node_modules/d3-format/src/defaultLocale.js","../node_modules/d3-format/src/precisionFixed.js","../node_modules/d3-format/src/precisionPrefix.js","../node_modules/d3-format/src/precisionRound.js","../node_modules/d3-scale/src/tickFormat.js","../node_modules/d3-scale/src/linear.js","../node_modules/d3-scale/src/identity.js","../node_modules/d3-scale/src/nice.js","../node_modules/d3-scale/src/log.js","../node_modules/d3-scale/src/symlog.js","../node_modules/d3-scale/src/pow.js","../node_modules/d3-scale/src/quantile.js","../node_modules/d3-scale/src/quantize.js","../node_modules/d3-scale/src/threshold.js","../node_modules/d3-scale/src/time.js","../node_modules/d3-scale/src/utcTime.js","../node_modules/d3-scale/src/sequential.js","../node_modules/d3-scale/src/diverging.js","../node_modules/vega-scale/src/scales/scaleBand.js","../node_modules/vega-scale/src/scales/numbers.js","../node_modules/vega-scale/src/scales/slice.js","../node_modules/vega-scale/src/scales/scaleBinOrdinal.js","../node_modules/vega-scale/src/scales.js","../node_modules/vega-scale/src/interpolate.js","../node_modules/vega-scale/src/palettes.js","../node_modules/vega-scale/src/schemes.js","../node_modules/vega-encode/src/ticks.js","../node_modules/vega-encode/src/AxisTicks.js","../node_modules/vega-encode/src/DataJoin.js","../node_modules/vega-encode/src/Encode.js","../node_modules/vega-encode/src/legend-types.js","../node_modules/vega-encode/src/labels.js","../node_modules/vega-encode/src/LegendEntries.js","../node_modules/vega-encode/src/LinkPath.js","../node_modules/vega-encode/node_modules/d3-array/src/ascending.js","../node_modules/vega-encode/node_modules/d3-array/src/bisector.js","../node_modules/vega-encode/node_modules/d3-array/src/bisect.js","../node_modules/vega-encode/node_modules/d3-array/src/range.js","../node_modules/vega-encode/node_modules/d3-array/src/sum.js","../node_modules/vega-encode/src/Pie.js","../node_modules/vega-encode/src/Scale.js","../node_modules/vega-encode/src/SortItems.js","../node_modules/vega-encode/src/Stack.js","../node_modules/vega-geo/node_modules/d3-array/src/ascending.js","../node_modules/vega-geo/node_modules/d3-array/src/bisector.js","../node_modules/vega-geo/node_modules/d3-array/src/bisect.js","../node_modules/vega-geo/node_modules/d3-array/src/extent.js","../node_modules/d3-contour/node_modules/d3-array/src/ascending.js","../node_modules/d3-contour/node_modules/d3-array/src/bisector.js","../node_modules/d3-contour/node_modules/d3-array/src/bisect.js","../node_modules/d3-contour/node_modules/d3-array/src/extent.js","../node_modules/d3-contour/node_modules/d3-array/src/range.js","../node_modules/d3-contour/node_modules/d3-array/src/ticks.js","../node_modules/d3-contour/node_modules/d3-array/src/threshold/sturges.js","../node_modules/d3-contour/node_modules/d3-array/src/max.js","../node_modules/d3-contour/src/array.js","../node_modules/d3-contour/src/ascending.js","../node_modules/d3-contour/src/area.js","../node_modules/d3-contour/src/constant.js","../node_modules/d3-contour/src/contains.js","../node_modules/d3-contour/src/noop.js","../node_modules/d3-contour/src/contours.js","../node_modules/d3-contour/src/blur.js","../node_modules/d3-contour/src/density.js","../node_modules/vega-geo/src/Contour.js","../node_modules/vega-geo/src/constants.js","../node_modules/vega-geo/src/GeoJSON.js","../node_modules/d3-geo/src/adder.js","../node_modules/d3-geo/src/math.js","../node_modules/d3-geo/src/noop.js","../node_modules/d3-geo/src/stream.js","../node_modules/d3-geo/src/area.js","../node_modules/d3-geo/src/cartesian.js","../node_modules/d3-geo/src/bounds.js","../node_modules/d3-geo/src/centroid.js","../node_modules/d3-geo/src/compose.js","../node_modules/d3-geo/src/rotation.js","../node_modules/d3-geo/src/circle.js","../node_modules/d3-geo/src/clip/buffer.js","../node_modules/d3-geo/src/pointEqual.js","../node_modules/d3-geo/src/clip/rejoin.js","../node_modules/d3-geo/src/polygonContains.js","../node_modules/d3-geo/node_modules/d3-array/src/ascending.js","../node_modules/d3-geo/node_modules/d3-array/src/bisector.js","../node_modules/d3-geo/node_modules/d3-array/src/bisect.js","../node_modules/d3-geo/node_modules/d3-array/src/range.js","../node_modules/d3-geo/node_modules/d3-array/src/merge.js","../node_modules/d3-geo/src/clip/index.js","../node_modules/d3-geo/src/clip/antimeridian.js","../node_modules/d3-geo/src/clip/circle.js","../node_modules/d3-geo/src/clip/line.js","../node_modules/d3-geo/src/clip/rectangle.js","../node_modules/d3-geo/src/length.js","../node_modules/d3-geo/src/graticule.js","../node_modules/d3-geo/src/identity.js","../node_modules/d3-geo/src/path/area.js","../node_modules/d3-geo/src/path/bounds.js","../node_modules/d3-geo/src/path/centroid.js","../node_modules/d3-geo/src/path/context.js","../node_modules/d3-geo/src/path/measure.js","../node_modules/d3-geo/src/path/string.js","../node_modules/d3-geo/src/path/index.js","../node_modules/d3-geo/src/transform.js","../node_modules/d3-geo/src/projection/fit.js","../node_modules/d3-geo/src/projection/resample.js","../node_modules/d3-geo/src/projection/index.js","../node_modules/d3-geo/src/projection/conic.js","../node_modules/d3-geo/src/projection/cylindricalEqualArea.js","../node_modules/d3-geo/src/projection/conicEqualArea.js","../node_modules/d3-geo/src/projection/albers.js","../node_modules/d3-geo/src/projection/albersUsa.js","../node_modules/d3-geo/src/projection/azimuthal.js","../node_modules/d3-geo/src/projection/azimuthalEqualArea.js","../node_modules/d3-geo/src/projection/azimuthalEquidistant.js","../node_modules/d3-geo/src/projection/mercator.js","../node_modules/d3-geo/src/projection/conicConformal.js","../node_modules/d3-geo/src/projection/equirectangular.js","../node_modules/d3-geo/src/projection/conicEquidistant.js","../node_modules/d3-geo/src/projection/gnomonic.js","../node_modules/d3-geo/src/projection/identity.js","../node_modules/d3-geo/src/projection/naturalEarth1.js","../node_modules/d3-geo/src/projection/orthographic.js","../node_modules/d3-geo/src/projection/stereographic.js","../node_modules/d3-geo/src/projection/transverseMercator.js","../node_modules/vega-projection/src/projections.js","../node_modules/vega-geo/src/GeoPath.js","../node_modules/vega-geo/src/GeoPoint.js","../node_modules/vega-geo/src/GeoShape.js","../node_modules/vega-geo/src/Graticule.js","../node_modules/vega-geo/src/Projection.js","../node_modules/d3-force/src/center.js","../node_modules/d3-quadtree/src/add.js","../node_modules/d3-quadtree/src/cover.js","../node_modules/d3-quadtree/src/data.js","../node_modules/d3-quadtree/src/extent.js","../node_modules/d3-quadtree/src/quad.js","../node_modules/d3-quadtree/src/find.js","../node_modules/d3-quadtree/src/remove.js","../node_modules/d3-quadtree/src/root.js","../node_modules/d3-quadtree/src/size.js","../node_modules/d3-quadtree/src/visit.js","../node_modules/d3-quadtree/src/visitAfter.js","../node_modules/d3-quadtree/src/x.js","../node_modules/d3-quadtree/src/y.js","../node_modules/d3-quadtree/src/quadtree.js","../node_modules/d3-force/src/constant.js","../node_modules/d3-force/src/jiggle.js","../node_modules/d3-force/src/collide.js","../node_modules/d3-force/src/link.js","../node_modules/d3-dispatch/src/dispatch.js","../node_modules/d3-timer/src/timer.js","../node_modules/d3-timer/src/interval.js","../node_modules/d3-force/src/simulation.js","../node_modules/d3-force/src/manyBody.js","../node_modules/d3-force/src/x.js","../node_modules/d3-force/src/y.js","../node_modules/vega-force/src/Force.js","../node_modules/vega-hierarchy/src/lookup.js","../node_modules/d3-hierarchy/src/cluster.js","../node_modules/d3-hierarchy/src/hierarchy/count.js","../node_modules/d3-hierarchy/src/hierarchy/each.js","../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","../node_modules/d3-hierarchy/src/hierarchy/sum.js","../node_modules/d3-hierarchy/src/hierarchy/sort.js","../node_modules/d3-hierarchy/src/hierarchy/path.js","../node_modules/d3-hierarchy/src/hierarchy/ancestors.js","../node_modules/d3-hierarchy/src/hierarchy/descendants.js","../node_modules/d3-hierarchy/src/hierarchy/leaves.js","../node_modules/d3-hierarchy/src/hierarchy/links.js","../node_modules/d3-hierarchy/src/hierarchy/index.js","../node_modules/d3-hierarchy/src/array.js","../node_modules/d3-hierarchy/src/pack/enclose.js","../node_modules/d3-hierarchy/src/pack/siblings.js","../node_modules/d3-hierarchy/src/accessors.js","../node_modules/d3-hierarchy/src/constant.js","../node_modules/d3-hierarchy/src/pack/index.js","../node_modules/d3-hierarchy/src/treemap/round.js","../node_modules/d3-hierarchy/src/treemap/dice.js","../node_modules/d3-hierarchy/src/partition.js","../node_modules/d3-hierarchy/src/stratify.js","../node_modules/d3-hierarchy/src/tree.js","../node_modules/d3-hierarchy/src/treemap/slice.js","../node_modules/d3-hierarchy/src/treemap/squarify.js","../node_modules/d3-hierarchy/src/treemap/index.js","../node_modules/d3-hierarchy/src/treemap/binary.js","../node_modules/d3-hierarchy/src/treemap/sliceDice.js","../node_modules/d3-hierarchy/src/treemap/resquarify.js","../node_modules/vega-hierarchy/src/Nest.js","../node_modules/vega-hierarchy/src/HierarchyLayout.js","../node_modules/vega-hierarchy/src/Pack.js","../node_modules/vega-hierarchy/src/Partition.js","../node_modules/vega-hierarchy/src/Stratify.js","../node_modules/vega-hierarchy/src/Tree.js","../node_modules/vega-hierarchy/src/TreeLinks.js","../node_modules/vega-hierarchy/src/Treemap.js","../node_modules/d3-voronoi/src/constant.js","../node_modules/d3-voronoi/src/point.js","../node_modules/d3-voronoi/src/RedBlackTree.js","../node_modules/d3-voronoi/src/Edge.js","../node_modules/d3-voronoi/src/Cell.js","../node_modules/d3-voronoi/src/Circle.js","../node_modules/d3-voronoi/src/Beach.js","../node_modules/d3-voronoi/src/Diagram.js","../node_modules/d3-voronoi/src/voronoi.js","../node_modules/vega-voronoi/src/Voronoi.js","../node_modules/vega-wordcloud/src/CloudLayout.js","../node_modules/vega-wordcloud/src/Wordcloud.js","../node_modules/vega-crossfilter/src/arrays.js","../node_modules/vega-crossfilter/src/Bitmaps.js","../node_modules/vega-crossfilter/src/Dimension.js","../node_modules/vega-crossfilter/node_modules/d3-array/src/ascending.js","../node_modules/vega-crossfilter/node_modules/d3-array/src/bisector.js","../node_modules/vega-crossfilter/node_modules/d3-array/src/bisect.js","../node_modules/vega-crossfilter/node_modules/d3-array/src/permute.js","../node_modules/vega-crossfilter/src/SortedIndex.js","../node_modules/vega-crossfilter/src/CrossFilter.js","../node_modules/vega-crossfilter/src/ResolveFilter.js","../node_modules/vega-view/src/cursor.js","../node_modules/vega-view/src/data.js","../node_modules/vega-view/src/render-size.js","../node_modules/vega-view/src/events-extend.js","../node_modules/vega-view/src/events.js","../node_modules/vega-view/src/hover.js","../node_modules/vega-view/src/finalize.js","../node_modules/vega-view/src/element.js","../node_modules/vega-view/node_modules/d3-array/src/ascending.js","../node_modules/vega-view/node_modules/d3-array/src/bisector.js","../node_modules/vega-view/node_modules/d3-array/src/bisect.js","../node_modules/vega-view/node_modules/d3-array/src/ticks.js","../node_modules/vega-view/src/bind.js","../node_modules/vega-view/src/initialize-renderer.js","../node_modules/vega-view/src/trap.js","../node_modules/vega-view/src/initialize-handler.js","../node_modules/vega-view/src/initialize.js","../node_modules/vega-view/src/render-headless.js","../node_modules/vega-view/src/render-to-image-url.js","../node_modules/vega-view/src/render-to-canvas.js","../node_modules/vega-view/src/render-to-svg.js","../node_modules/vega-expression/src/ast.js","../node_modules/vega-expression/src/parser.js","../node_modules/vega-expression/src/constants.js","../node_modules/vega-expression/src/functions.js","../node_modules/vega-expression/src/codegen.js","../node_modules/vega-selections/src/constants.js","../node_modules/vega-selections/src/selectionTest.js","../node_modules/vega-selections/src/selectionResolve.js","../node_modules/vega-selections/src/selectionVisitor.js","../node_modules/vega-functions/node_modules/d3-array/src/ascending.js","../node_modules/vega-functions/node_modules/d3-array/src/bisector.js","../node_modules/vega-functions/node_modules/d3-array/src/bisect.js","../node_modules/vega-functions/node_modules/d3-array/src/range.js","../node_modules/vega-functions/src/data.js","../node_modules/vega-functions/src/encode.js","../node_modules/vega-functions/src/format.js","../node_modules/vega-functions/src/scale.js","../node_modules/vega-functions/src/geo.js","../node_modules/vega-functions/src/inscope.js","../node_modules/vega-functions/src/intersect.js","../node_modules/vega-functions/src/log.js","../node_modules/vega-functions/src/merge.js","../node_modules/vega-functions/src/modify.js","../node_modules/vega-functions/src/pinch.js","../node_modules/vega-functions/src/scale-gradient.js","../node_modules/vega-functions/src/shape.js","../node_modules/vega-functions/src/tree.js","../node_modules/vega-functions/src/window.js","../node_modules/vega-functions/src/prefix.js","../node_modules/vega-functions/src/visitors.js","../node_modules/vega-functions/src/codegen.js","../node_modules/vega-runtime/src/expression.js","../node_modules/vega-runtime/src/parameters.js","../node_modules/vega-runtime/src/util.js","../node_modules/vega-runtime/src/operator.js","../node_modules/vega-runtime/src/stream.js","../node_modules/vega-runtime/src/update.js","../node_modules/vega-runtime/src/dataflow.js","../node_modules/vega-runtime/src/state.js","../node_modules/vega-runtime/src/context.js","../node_modules/vega-view/src/runtime.js","../node_modules/vega-view/src/scale.js","../node_modules/vega-view/src/size.js","../node_modules/vega-view/src/state.js","../node_modules/vega-view/src/timer.js","../node_modules/vega-view/src/tooltip.js","../node_modules/vega-view/src/View.js","../node_modules/vega-parser/src/parsers/expression.js","../node_modules/vega-parser/src/util.js","../node_modules/vega-event-selector/src/event-selector.js","../node_modules/vega-parser/src/transforms.js","../node_modules/vega-parser/src/parsers/guides/constants.js","../node_modules/vega-parser/src/parsers/encode/adjust-spatial.js","../node_modules/vega-parser/src/parsers/guides/guide-util.js","../node_modules/vega-parser/src/DataScope.js","../node_modules/vega-parser/src/parsers/view.js","../node_modules/vega-parser/src/Scope.js","../node_modules/vega/index.js","data.js","model/util.js","model/constraint.js","model/constraint-dictionary.js","model/facts.js","model/witness.js","model/result.js","draco.js"],"sourcesContent":["export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","export default function(values, valueof) {\n let min;\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n return [min, max];\n}\n","export default function(fn, fields, name) {\n fn.fields = fields || [];\n fn.fname = name;\n return fn;\n}\n\nexport function accessorName(fn) {\n return fn == null ? null : fn.fname;\n}\n\nexport function accessorFields(fn) {\n return fn == null ? null : fn.fields;\n}\n","export default function(message) {\n throw Error(message);\n}\n","import error from './error';\n\nexport default function(p) {\n var path = [],\n q = null,\n b = 0,\n n = p.length,\n s = '',\n i, j, c;\n\n p = p + '';\n\n function push() {\n path.push(s + p.substring(i, j));\n s = '';\n i = j + 1;\n }\n\n for (i=j=0; j i) {\n push();\n } else {\n i = j + 1;\n }\n } else if (c === '[') {\n if (j > i) push();\n b = i = j + 1;\n } else if (c === ']') {\n if (!b) error('Access path missing open bracket: ' + p);\n if (b > 0) push();\n b = 0;\n i = j + 1;\n }\n }\n\n if (b) error('Access path missing closing bracket: ' + p);\n if (q) error('Access path missing closing quote: ' + p);\n\n if (j > i) {\n j++;\n push();\n }\n\n return path;\n}\n","export default Array.isArray;\n","export default function(_) {\n return _ === Object(_);\n}\n","export default function(_) {\n return typeof _ === 'string';\n}\n","import isArray from './isArray';\nimport isObject from './isObject';\nimport isString from './isString';\n\nexport default function $(x) {\n return isArray(x) ? '[' + x.map($) + ']'\n : isObject(x) || isString(x) ?\n // Output valid JSON and JS source strings.\n // See http://timelessrepo.com/json-isnt-a-javascript-subset\n JSON.stringify(x).replace('\\u2028','\\\\u2028').replace('\\u2029', '\\\\u2029')\n : x;\n}\n","import accessor from './accessor';\nimport splitAccessPath from './splitAccessPath';\nimport stringValue from './stringValue';\n\nexport default function(field, name) {\n var path = splitAccessPath(field),\n code = 'return _[' + path.map(stringValue).join('][') + '];';\n\n return accessor(\n Function('_', code),\n [(field = path.length===1 ? path[0] : field)],\n name || field\n );\n}\n","import accessor from './accessor';\nimport field from './field';\n\nvar empty = [];\n\nexport var id = field('id');\n\nexport var identity = accessor(function(_) { return _; }, empty, 'identity');\n\nexport var zero = accessor(function() { return 0; }, empty, 'zero');\n\nexport var one = accessor(function() { return 1; }, empty, 'one');\n\nexport var truthy = accessor(function() { return true; }, empty, 'true');\n\nexport var falsy = accessor(function() { return false; }, empty, 'false');\n","function log(method, level, input) {\n var msg = [level].concat([].slice.call(input));\n console[method](...msg); // eslint-disable-line no-console\n}\n\nexport var None = 0;\nexport var Error = 1;\nexport var Warn = 2;\nexport var Info = 3;\nexport var Debug = 4;\n\nexport default function(_, method) {\n var level = _ || None;\n return {\n level: function(_) {\n if (arguments.length) {\n level = +_;\n return this;\n } else {\n return level;\n }\n },\n error: function() {\n if (level >= Error) log(method || 'error', 'ERROR', arguments);\n return this;\n },\n warn: function() {\n if (level >= Warn) log(method || 'warn', 'WARN', arguments);\n return this;\n },\n info: function() {\n if (level >= Info) log(method || 'log', 'INFO', arguments);\n return this;\n },\n debug: function() {\n if (level >= Debug) log(method || 'log', 'DEBUG', arguments);\n return this;\n }\n }\n}\n","export default function(array) {\n return array[array.length - 1];\n}\n","export default function(_) {\n return _ == null || _ === '' ? null : +_;\n}\n","import {identity} from './accessors';\nimport peek from './peek';\nimport toNumber from './toNumber';\n\nfunction exp(sign) {\n return function(x) { return sign * Math.exp(x); };\n}\n\nfunction log(sign) {\n return function(x) { return Math.log(sign * x); };\n}\n\nfunction symlog(c) {\n return function(x) { return Math.sign(x) * Math.log1p(Math.abs(x / c)); };\n}\n\nfunction symexp(c) {\n return function(x) { return Math.sign(x) * Math.expm1(Math.abs(x)) * c; };\n}\n\nfunction pow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction pan(domain, delta, lift, ground) {\n var d0 = lift(domain[0]),\n d1 = lift(peek(domain)),\n dd = (d1 - d0) * delta;\n\n return [\n ground(d0 - dd),\n ground(d1 - dd)\n ];\n}\n\nexport function panLinear(domain, delta) {\n return pan(domain, delta, toNumber, identity);\n}\n\nexport function panLog(domain, delta) {\n var sign = Math.sign(domain[0]);\n return pan(domain, delta, log(sign), exp(sign));\n}\n\nexport function panPow(domain, delta, exponent) {\n return pan(domain, delta, pow(exponent), pow(1/exponent));\n}\n\nexport function panSymlog(domain, delta, constant) {\n return pan(domain, delta, symlog(constant), symexp(constant));\n}\n\nfunction zoom(domain, anchor, scale, lift, ground) {\n var d0 = lift(domain[0]),\n d1 = lift(peek(domain)),\n da = anchor != null ? lift(anchor) : (d0 + d1) / 2;\n\n return [\n ground(da + (d0 - da) * scale),\n ground(da + (d1 - da) * scale)\n ];\n}\n\nexport function zoomLinear(domain, anchor, scale) {\n return zoom(domain, anchor, scale, toNumber, identity);\n}\n\nexport function zoomLog(domain, anchor, scale) {\n var sign = Math.sign(domain[0]);\n return zoom(domain, anchor, scale, log(sign), exp(sign));\n}\n\nexport function zoomPow(domain, anchor, scale, exponent) {\n return zoom(domain, anchor, scale, pow(exponent), pow(1/exponent));\n}\n\nexport function zoomSymlog(domain, anchor, scale, constant) {\n return zoom(domain, anchor, scale, symlog(constant), symexp(constant));\n}\n","export function quarter(date) {\n return 1 + ~~(new Date(date).getMonth() / 3);\n}\n\nexport function utcquarter(date) {\n return 1 + ~~(new Date(date).getUTCMonth() / 3);\n}\n","import isArray from './isArray';\n\nexport default function(_) {\n return _ != null ? (isArray(_) ? _ : [_]) : [];\n}\n","/**\n * Span-preserving range clamp. If the span of the input range is less\n * than (max - min) and an endpoint exceeds either the min or max value,\n * the range is translated such that the span is preserved and one\n * endpoint touches the boundary of the min/max range.\n * If the span exceeds (max - min), the range [min, max] is returned.\n */\nexport default function(range, min, max) {\n var lo = range[0],\n hi = range[1],\n span;\n\n if (hi < lo) {\n span = hi;\n hi = lo;\n lo = span;\n }\n span = hi - lo;\n\n return span >= (max - min)\n ? [min, max]\n : [\n (lo = Math.min(Math.max(lo, min), max - span)),\n lo + span\n ];\n}\n","export default function(_) {\n return typeof _ === 'function';\n}\n","import {default as accessor, accessorFields} from './accessor';\nimport array from './array';\nimport isFunction from './isFunction';\nimport splitAccessPath from './splitAccessPath';\nimport stringValue from './stringValue';\n\nexport default function(fields, orders) {\n var idx = [],\n cmp = (fields = array(fields)).map(function(f, i) {\n if (f == null) {\n return null;\n } else {\n idx.push(i);\n return isFunction(f) ? f\n : splitAccessPath(f).map(stringValue).join('][');\n }\n }),\n n = idx.length - 1,\n ord = array(orders),\n code = 'var u,v;return ',\n i, j, f, u, v, d, t, lt, gt;\n\n if (n < 0) return null;\n\n for (j=0; j<=n; ++j) {\n i = idx[j];\n f = cmp[i];\n\n if (isFunction(f)) {\n d = 'f' + i;\n u = '(u=this.' + d + '(a))';\n v = '(v=this.' + d + '(b))';\n (t = t || {})[d] = f;\n } else {\n u = '(u=a['+f+'])';\n v = '(v=b['+f+'])';\n }\n\n d = '((v=v instanceof Date?+v:v),(u=u instanceof Date?+u:u))';\n\n if (ord[i] !== 'descending') {\n gt = 1;\n lt = -1;\n } else {\n gt = -1;\n lt = 1;\n }\n\n code += '(' + u+'<'+v+'||u==null)&&v!=null?' + lt\n + ':(u>v||v==null)&&u!=null?' + gt\n + ':'+d+'!==u&&v===v?' + lt\n + ':v!==v&&u===u?' + gt\n + (i < n ? ':' : ':0');\n }\n\n f = Function('a', 'b', code + ';');\n if (t) f = f.bind(t);\n\n fields = fields.reduce(function(map, field) {\n if (isFunction(field)) {\n (accessorFields(field) || []).forEach(function(_) { map[_] = 1; });\n } else if (field != null) {\n map[field + ''] = 1;\n }\n return map;\n }, {});\n\n return accessor(f, Object.keys(fields));\n}\n","import isFunction from './isFunction';\n\nexport default function(_) {\n return isFunction(_) ? _ : function() { return _; };\n}\n","export default function(delay, handler) {\n var tid, evt;\n\n function callback() {\n handler(evt);\n tid = evt = null;\n }\n\n return function(e) {\n evt = e;\n if (tid) clearTimeout(tid);\n tid = setTimeout(callback, delay);\n };\n}\n","export default function(_) {\n for (var x, k, i=1, len=arguments.length; i max) max = v;\n }\n }\n } else {\n // find first valid value\n for (v = f(array[i]); v == null || v !== v; v = f(array[++i]));\n min = max = v;\n\n // visit all other values\n for (; i max) max = v;\n }\n }\n }\n }\n\n return [min, max];\n}\n","export default function(array, f) {\n var i = -1,\n n = array.length,\n a, b, c, u, v;\n\n if (f == null) {\n while (++i < n) {\n b = array[i];\n if (b != null && b >= b) {\n a = c = b;\n break;\n }\n }\n u = v = i;\n while (++i < n) {\n b = array[i];\n if (b != null) {\n if (a > b) {\n a = b;\n u = i;\n }\n if (c < b) {\n c = b;\n v = i;\n }\n }\n }\n } else {\n while (++i < n) {\n b = f(array[i], i, array);\n if (b != null && b >= b) {\n a = c = b;\n break;\n }\n }\n u = v = i;\n while (++i < n) {\n b = f(array[i], i, array);\n if (b != null) {\n if (a > b) {\n a = b;\n u = i;\n }\n if (c < b) {\n c = b;\n v = i;\n }\n }\n }\n }\n\n return [u, v];\n}\n","var NULL = {};\n\nexport default function(input) {\n var obj = {},\n map,\n test;\n\n function has(key) {\n return obj.hasOwnProperty(key) && obj[key] !== NULL;\n }\n\n map = {\n size: 0,\n empty: 0,\n object: obj,\n has: has,\n get: function(key) {\n return has(key) ? obj[key] : undefined;\n },\n set: function(key, value) {\n if (!has(key)) {\n ++map.size;\n if (obj[key] === NULL) --map.empty;\n }\n obj[key] = value;\n return this;\n },\n delete: function(key) {\n if (has(key)) {\n --map.size;\n ++map.empty;\n obj[key] = NULL;\n }\n return this;\n },\n clear: function() {\n map.size = map.empty = 0;\n map.object = obj = {};\n },\n test: function(_) {\n if (arguments.length) {\n test = _;\n return map;\n } else {\n return test;\n }\n },\n clean: function() {\n var next = {},\n size = 0,\n key, value;\n for (key in obj) {\n value = obj[key];\n if (value !== NULL && (!test || !test(value))) {\n next[key] = value;\n ++size;\n }\n }\n map.size = size;\n map.empty = 0;\n map.object = (obj = next);\n }\n };\n\n if (input) Object.keys(input).forEach(function(key) {\n map.set(key, input[key]);\n });\n\n return map;\n}\n","import peek from './peek';\n\nexport default function(range, value, threshold, left, right, center) {\n if (!threshold && threshold !== 0) return center;\n\n var a = range[0],\n b = peek(range),\n t = +threshold,\n l, r;\n\n // swap endpoints if range is reversed\n if (b < a) {\n l = a; a = b; b = l;\n }\n\n // compare value to endpoints\n l = Math.abs(value - a);\n r = Math.abs(b - value);\n\n // adjust if value is within threshold distance of endpoint\n return l < r && l <= t ? left : r <= t ? right : center;\n}\n","export default function(child, parent) {\n var proto = (child.prototype = Object.create(parent.prototype));\n proto.constructor = child;\n return proto;\n}\n","/**\n * Predicate that returns true if the value lies within the span\n * of the given range. The left and right flags control the use\n * of inclusive (true) or exclusive (false) comparisons.\n */\nexport default function(value, range, left, right) {\n var r0 = range[0], r1 = range[range.length-1], t;\n if (r0 > r1) {\n t = r0;\n r0 = r1;\n r1 = t;\n }\n left = left === undefined || left;\n right = right === undefined || right;\n\n return (left ? r0 <= value : r0 < value) &&\n (right ? value <= r1 : value < r1);\n}\n","export default function(_) {\n return typeof _ === 'boolean';\n}\n","export default function(_) {\n return Object.prototype.toString.call(_) === '[object Date]';\n}\n","export default function(_) {\n return typeof _ === 'number';\n}\n","export default function(_) {\n return Object.prototype.toString.call(_) === '[object RegExp]';\n}\n","import accessor from './accessor';\nimport array from './array';\nimport splitAccessPath from './splitAccessPath';\nimport stringValue from './stringValue';\n\nexport default function(fields, flat) {\n if (fields) {\n fields = flat\n ? array(fields).map(function(f) { return f.replace(/\\\\(.)/g, '$1'); })\n : array(fields);\n }\n\n var fn = !(fields && fields.length)\n ? function() { return ''; }\n : Function('_', 'return \\'\\'+' +\n fields.map(function(f) {\n return '_[' + (flat\n ? stringValue(f)\n : splitAccessPath(f).map(stringValue).join('][')\n ) + ']';\n }).join('+\\'|\\'+') + ';');\n\n return accessor(fn, fields, 'key');\n}\n","import peek from './peek';\n\nexport default function(array, frac) {\n const lo = array[0],\n hi = peek(array),\n f = +frac;\n return !f ? lo : f === 1 ? hi : lo + f * (hi - lo);\n}\n","export default function(compare, array0, array1, output) {\n var n0 = array0.length,\n n1 = array1.length;\n\n if (!n1) return array0;\n if (!n0) return array1;\n\n var merged = output || new array0.constructor(n0 + n1),\n i0 = 0, i1 = 0, i = 0;\n\n for (; i0 0\n ? array1[i1++]\n : array0[i0++];\n }\n\n for (; i0= 0) s += str;\n return s;\n}\n","import repeat from './repeat';\n\nexport default function(str, length, padchar, align) {\n var c = padchar || ' ',\n s = str + '',\n n = length - s.length;\n\n return n <= 0 ? s\n : align === 'left' ? repeat(c, n) + s\n : align === 'center' ? repeat(c, ~~(n/2)) + s + repeat(c, Math.ceil(n/2))\n : s + repeat(c, n);\n}\n","import peek from './peek';\n\n/**\n * Return the numerical span of an array: the difference between\n * the last and first values.\n */\nexport default function(array) {\n return (peek(array) - array[0]) || 0;\n}\n","export default function(_) {\n return _ == null || _ === '' ? null : !_ || _ === 'false' || _ === '0' ? false : !!_;\n}\n","import isDate from './isDate';\nimport isNumber from './isNumber';\n\nfunction defaultParser(_) {\n return isNumber(_) ? _ : isDate(_) ? _ : Date.parse(_);\n}\n\nexport default function(_, parser) {\n parser = parser || defaultParser;\n return _ == null || _ === '' ? null : parser(_);\n}\n","export default function(_) {\n return _ == null || _ === '' ? null : _ + '';\n}\n","export default function(_) {\n for (var s={}, i=0, n=_.length; i= 0) {\n list.splice(idx, 1);\n }\n }\n return list;\n };\n\n return list;\n}\n","/**\n * Invoke and await a potentially async callback function. If\n * an error occurs, trap it and route to Dataflow.error.\n * @param {Dataflow} df - The dataflow instance\n * @param {function} callback - A callback function to invoke\n * and then await. The dataflow will be passed as the single\n * argument to the function.\n */\nexport default async function(df, callback) {\n try { await callback(df); } catch (err) { df.error(err); }\n}\n","var TUPLE_ID_KEY = Symbol('vega_id'),\n TUPLE_ID = 1;\n\n/**\n * Resets the internal tuple id counter to one.\n */\nexport function reset() {\n TUPLE_ID = 1;\n}\n\n/**\n * Checks if an input value is a registered tuple.\n * @param {*} t - The value to check.\n * @return {boolean} True if the input is a tuple, false otherwise.\n */\nexport function isTuple(t) {\n return !!(t && tupleid(t));\n}\n\n/**\n * Returns the id of a tuple.\n * @param {object} t - The input tuple.\n * @return {*} the tuple id.\n */\nexport function tupleid(t) {\n return t[TUPLE_ID_KEY];\n}\n\n/**\n * Sets the id of a tuple.\n * @param {object} t - The input tuple.\n * @param {*} id - The id value to set.\n * @return {object} the input tuple.\n */\nfunction setid(t, id) {\n t[TUPLE_ID_KEY] = id;\n return t;\n}\n\n/**\n * Ingest an object or value as a data tuple.\n * If the input value is an object, an id field will be added to it. For\n * efficiency, the input object is modified directly. A copy is not made.\n * If the input value is a literal, it will be wrapped in a new object\n * instance, with the value accessible as the 'data' property.\n * @param datum - The value to ingest.\n * @return {object} The ingested data tuple.\n */\nexport function ingest(datum) {\n var t = (datum === Object(datum)) ? datum : {data: datum};\n return tupleid(t) ? t : setid(t, TUPLE_ID++);\n}\n\n/**\n * Given a source tuple, return a derived copy.\n * @param {object} t - The source tuple.\n * @return {object} The derived tuple.\n */\nexport function derive(t) {\n return rederive(t, ingest({}));\n}\n\n/**\n * Rederive a derived tuple by copying values from the source tuple.\n * @param {object} t - The source tuple.\n * @param {object} d - The derived tuple.\n * @return {object} The derived tuple.\n */\nexport function rederive(t, d) {\n for (var k in t) d[k] = t[k];\n return d;\n}\n\n/**\n * Replace an existing tuple with a new tuple.\n * @param {object} t - The existing data tuple.\n * @param {object} d - The new tuple that replaces the old.\n * @return {object} The new tuple.\n */\nexport function replace(t, d) {\n return setid(d, tupleid(t));\n}\n","import {ingest, tupleid} from './Tuple';\nimport {array, constant, isFunction} from 'vega-util';\n\nexport function isChangeSet(v) {\n return v && v.constructor === changeset;\n}\n\nexport default function changeset() {\n var add = [], // insert tuples\n rem = [], // remove tuples\n mod = [], // modify tuples\n remp = [], // remove by predicate\n modp = [], // modify by predicate\n reflow = false;\n\n return {\n constructor: changeset,\n insert: function(t) {\n var d = array(t), i = 0, n = d.length;\n for (; i 0) {\n modify(t, f, m.value);\n pulse.modifies(f);\n }\n }\n\n // process predicate-based modifications\n for (i=0, n=modp.length; i 0) {\n modify(t, m.field, m.value);\n }\n });\n pulse.modifies(m.field);\n }\n\n // upon reflow request, populate mod with all non-removed tuples\n // otherwise, populate mod with modified tuples only\n if (reflow) {\n pulse.mod = rem.length || remp.length\n ? tuples.filter(function(t) { return cur[tupleid(t)] > 0; })\n : tuples.slice();\n } else {\n for (id in out) pulse.mod.push(out[id]);\n }\n\n return pulse;\n }\n };\n}\n","import {isArray} from 'vega-util';\n\nvar CACHE = '_:mod:_';\n\n/**\n * Hash that tracks modifications to assigned values.\n * Callers *must* use the set method to update values.\n */\nexport default function Parameters() {\n Object.defineProperty(this, CACHE, {writable: true, value: {}});\n}\n\nvar prototype = Parameters.prototype;\n\n/**\n * Set a parameter value. If the parameter value changes, the parameter\n * will be recorded as modified.\n * @param {string} name - The parameter name.\n * @param {number} index - The index into an array-value parameter. Ignored if\n * the argument is undefined, null or less than zero.\n * @param {*} value - The parameter value to set.\n * @param {boolean} [force=false] - If true, records the parameter as modified\n * even if the value is unchanged.\n * @return {Parameters} - This parameter object.\n */\nprototype.set = function(name, index, value, force) {\n var o = this,\n v = o[name],\n mod = o[CACHE];\n\n if (index != null && index >= 0) {\n if (v[index] !== value || force) {\n v[index] = value;\n mod[index + ':' + name] = -1;\n mod[name] = -1;\n }\n } else if (v !== value || force) {\n o[name] = value;\n mod[name] = isArray(value) ? 1 + value.length : -1;\n }\n\n return o;\n};\n\n/**\n * Tests if one or more parameters has been modified. If invoked with no\n * arguments, returns true if any parameter value has changed. If the first\n * argument is array, returns trues if any parameter name in the array has\n * changed. Otherwise, tests if the given name and optional array index has\n * changed.\n * @param {string} name - The parameter name to test.\n * @param {number} [index=undefined] - The parameter array index to test.\n * @return {boolean} - Returns true if a queried parameter was modified.\n */\nprototype.modified = function(name, index) {\n var mod = this[CACHE], k;\n if (!arguments.length) {\n for (k in mod) { if (mod[k]) return true; }\n return false;\n } else if (isArray(name)) {\n for (k=0; k= 0)\n ? (index + 1 < mod[name] || !!mod[index + ':' + name])\n : !!mod[name];\n};\n\n/**\n * Clears the modification records. After calling this method,\n * all parameters are considered unmodified.\n */\nprototype.clear = function() {\n this[CACHE] = {};\n return this;\n};\n","import Parameters from './Parameters';\nimport UniqueList from './util/UniqueList';\nimport {array, error, id, isArray} from 'vega-util';\n\nvar OP_ID = 0;\nvar PULSE = 'pulse';\nvar NO_PARAMS = new Parameters();\n\n// Boolean Flags\nvar SKIP = 1,\n MODIFIED = 2;\n\n/**\n * An Operator is a processing node in a dataflow graph.\n * Each operator stores a value and an optional value update function.\n * Operators can accept a hash of named parameters. Parameter values can\n * either be direct (JavaScript literals, arrays, objects) or indirect\n * (other operators whose values will be pulled dynamically). Operators\n * included as parameters will have this operator added as a dependency.\n * @constructor\n * @param {*} [init] - The initial value for this operator.\n * @param {function(object, Pulse)} [update] - An update function. Upon\n * evaluation of this operator, the update function will be invoked and the\n * return value will be used as the new value of this operator.\n * @param {object} [params] - The parameters for this operator.\n * @param {boolean} [react=true] - Flag indicating if this operator should\n * listen for changes to upstream operators included as parameters.\n * @see parameters\n */\nexport default function Operator(init, update, params, react) {\n this.id = ++OP_ID;\n this.value = init;\n this.stamp = -1;\n this.rank = -1;\n this.qrank = -1;\n this.flags = 0;\n\n if (update) {\n this._update = update;\n }\n if (params) this.parameters(params, react);\n}\n\nvar prototype = Operator.prototype;\n\n/**\n * Returns a list of target operators dependent on this operator.\n * If this list does not exist, it is created and then returned.\n * @return {UniqueList}\n */\nprototype.targets = function() {\n return this._targets || (this._targets = UniqueList(id));\n};\n\n/**\n * Sets the value of this operator.\n * @param {*} value - the value to set.\n * @return {Number} Returns 1 if the operator value has changed\n * according to strict equality, returns 0 otherwise.\n */\nprototype.set = function(value) {\n if (this.value !== value) {\n this.value = value;\n return 1;\n } else {\n return 0;\n }\n};\n\nfunction flag(bit) {\n return function(state) {\n var f = this.flags;\n if (arguments.length === 0) return !!(f & bit);\n this.flags = state ? (f | bit) : (f & ~bit);\n return this;\n };\n}\n\n/**\n * Indicates that operator evaluation should be skipped on the next pulse.\n * This operator will still propagate incoming pulses, but its update function\n * will not be invoked. The skip flag is reset after every pulse, so calling\n * this method will affect processing of the next pulse only.\n */\nprototype.skip = flag(SKIP);\n\n/**\n * Indicates that this operator's value has been modified on its most recent\n * pulse. Normally modification is checked via strict equality; however, in\n * some cases it is more efficient to update the internal state of an object.\n * In those cases, the modified flag can be used to trigger propagation. Once\n * set, the modification flag persists across pulses until unset. The flag can\n * be used with the last timestamp to test if a modification is recent.\n */\nprototype.modified = flag(MODIFIED);\n\n/**\n * Sets the parameters for this operator. The parameter values are analyzed for\n * operator instances. If found, this operator will be added as a dependency\n * of the parameterizing operator. Operator values are dynamically marshalled\n * from each operator parameter prior to evaluation. If a parameter value is\n * an array, the array will also be searched for Operator instances. However,\n * the search does not recurse into sub-arrays or object properties.\n * @param {object} params - A hash of operator parameters.\n * @param {boolean} [react=true] - A flag indicating if this operator should\n * automatically update (react) when parameter values change. In other words,\n * this flag determines if the operator registers itself as a listener on\n * any upstream operators included in the parameters.\n * @param {boolean} [initonly=false] - A flag indicating if this operator\n * should calculate an update only upon its initiatal evaluation, then\n * deregister dependencies and suppress all future update invocations.\n * @return {Operator[]} - An array of upstream dependencies.\n */\nprototype.parameters = function(params, react, initonly) {\n react = react !== false;\n var self = this,\n argval = (self._argval = self._argval || new Parameters()),\n argops = (self._argops = self._argops || []),\n deps = [],\n name, value, n, i;\n\n function add(name, index, value) {\n if (value instanceof Operator) {\n if (value !== self) {\n if (react) value.targets().add(self);\n deps.push(value);\n }\n argops.push({op:value, name:name, index:index});\n } else {\n argval.set(name, index, value);\n }\n }\n\n for (name in params) {\n value = params[name];\n\n if (name === PULSE) {\n array(value).forEach(function(op) {\n if (!(op instanceof Operator)) {\n error('Pulse parameters must be operator instances.');\n } else if (op !== self) {\n op.targets().add(self);\n deps.push(op);\n }\n });\n self.source = value;\n } else if (isArray(value)) {\n argval.set(name, -1, Array(n = value.length));\n for (i=0; i} - The source operators that should propagate\n * to the target operator.\n */\nexport default function(target, sources) {\n var targetRank = target.rank, i, n;\n\n for (i=0, n=sources.length; i pause) {\n t = now;\n return 1;\n } else {\n return 0;\n }\n });\n};\n\nprototype.debounce = function(delay) {\n var s = stream();\n\n this.targets().add(stream(null, null,\n debounce(delay, function(e) {\n var df = e.dataflow;\n s.receive(e);\n if (df && df.run) df.run();\n })\n ));\n\n return s;\n};\n\nprototype.between = function(a, b) {\n var active = false;\n a.targets().add(stream(null, null, function() { active = true; }));\n b.targets().add(stream(null, null, function() { active = false; }));\n return this.filter(function() { return active; });\n};\n","import {stream} from '../EventStream';\nimport {array} from 'vega-util';\n\n/**\n * Create a new event stream from an event source.\n * @param {object} source - The event source to monitor. The input must\n * support the addEventListener method.\n * @param {string} type - The event type.\n * @param {function(object): boolean} [filter] - Event filter function.\n * @param {function(object): *} [apply] - Event application function.\n * If provided, this function will be invoked and the result will be\n * used as the downstream event value.\n * @return {EventStream}\n */\nexport default function(source, type, filter, apply) {\n var df = this,\n s = stream(filter, apply),\n send = function(e) {\n e.dataflow = df;\n try {\n s.receive(e);\n } catch (error) {\n df.error(error);\n } finally {\n df.run();\n }\n },\n sources;\n\n if (typeof source === 'string' && typeof document !== 'undefined') {\n sources = document.querySelectorAll(source);\n } else {\n sources = array(source);\n }\n\n for (var i=0, n=sources.length; i 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows\n };\n}\n","import dsv from \"./dsv\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatBody = csv.formatBody;\nexport var csvFormatRows = csv.formatRows;\n","import dsv from \"./dsv\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatBody = tsv.formatBody;\nexport var tsvFormatRows = tsv.formatRows;\n","import {dsvFormat} from 'd3-dsv';\nimport {extend, stringValue} from 'vega-util';\n\nexport function delimitedFormat(delimiter) {\n const parse = function(data, format) {\n const delim = {delimiter: delimiter};\n return dsv(data, format ? extend(format, delim) : delim);\n };\n\n parse.responseType = 'text';\n\n return parse;\n}\n\nexport default function dsv(data, format) {\n if (format.header) {\n data = format.header\n .map(stringValue)\n .join(format.delimiter) + '\\n' + data;\n }\n return dsvFormat(format.delimiter).parse(data + '');\n}\n\ndsv.responseType = 'text';\n","import {field, identity, isFunction, isObject} from 'vega-util';\n\nfunction isBuffer(_) {\n return (typeof Buffer === 'function' && isFunction(Buffer.isBuffer))\n ? Buffer.isBuffer(_) : false;\n}\n\nexport default function json(data, format) {\n const prop = (format && format.property) ? field(format.property) : identity;\n return isObject(data) && !isBuffer(data)\n ? parseJSON(prop(data))\n : prop(JSON.parse(data));\n}\n\njson.responseType = 'json';\n\nfunction parseJSON(data, format) {\n return (format && format.copy)\n ? JSON.parse(JSON.stringify(data))\n : data;\n}\n","export default function(x) {\n return x;\n}\n","import identity from \"./identity\";\n\nexport default function(transform) {\n if (transform == null) return identity;\n var x0,\n y0,\n kx = transform.scale[0],\n ky = transform.scale[1],\n dx = transform.translate[0],\n dy = transform.translate[1];\n return function(input, i) {\n if (!i) x0 = y0 = 0;\n var j = 2, n = input.length, output = new Array(n);\n output[0] = (x0 += input[0]) * kx + dx;\n output[1] = (y0 += input[1]) * ky + dy;\n while (j < n) output[j] = input[j], ++j;\n return output;\n };\n}\n","export default function(array, n) {\n var t, j = array.length, i = j - n;\n while (i < --j) t = array[i], array[i++] = array[j], array[j] = t;\n}\n","import reverse from \"./reverse\";\nimport transform from \"./transform\";\n\nexport default function(topology, o) {\n return o.type === \"GeometryCollection\"\n ? {type: \"FeatureCollection\", features: o.geometries.map(function(o) { return feature(topology, o); })}\n : feature(topology, o);\n}\n\nexport function feature(topology, o) {\n var id = o.id,\n bbox = o.bbox,\n properties = o.properties == null ? {} : o.properties,\n geometry = object(topology, o);\n return id == null && bbox == null ? {type: \"Feature\", properties: properties, geometry: geometry}\n : bbox == null ? {type: \"Feature\", id: id, properties: properties, geometry: geometry}\n : {type: \"Feature\", id: id, bbox: bbox, properties: properties, geometry: geometry};\n}\n\nexport function object(topology, o) {\n var transformPoint = transform(topology.transform),\n arcs = topology.arcs;\n\n function arc(i, points) {\n if (points.length) points.pop();\n for (var a = arcs[i < 0 ? ~i : i], k = 0, n = a.length; k < n; ++k) {\n points.push(transformPoint(a[k], k));\n }\n if (i < 0) reverse(points, n);\n }\n\n function point(p) {\n return transformPoint(p);\n }\n\n function line(arcs) {\n var points = [];\n for (var i = 0, n = arcs.length; i < n; ++i) arc(arcs[i], points);\n if (points.length < 2) points.push(points[0]); // This should never happen per the specification.\n return points;\n }\n\n function ring(arcs) {\n var points = line(arcs);\n while (points.length < 4) points.push(points[0]); // This may happen if an arc has only two points.\n return points;\n }\n\n function polygon(arcs) {\n return arcs.map(ring);\n }\n\n function geometry(o) {\n var type = o.type, coordinates;\n switch (type) {\n case \"GeometryCollection\": return {type: type, geometries: o.geometries.map(geometry)};\n case \"Point\": coordinates = point(o.coordinates); break;\n case \"MultiPoint\": coordinates = o.coordinates.map(point); break;\n case \"LineString\": coordinates = line(o.arcs); break;\n case \"MultiLineString\": coordinates = o.arcs.map(line); break;\n case \"Polygon\": coordinates = polygon(o.arcs); break;\n case \"MultiPolygon\": coordinates = o.arcs.map(polygon); break;\n default: return null;\n }\n return {type: type, coordinates: coordinates};\n }\n\n return geometry(o);\n}\n","export default function(topology, arcs) {\n var stitchedArcs = {},\n fragmentByStart = {},\n fragmentByEnd = {},\n fragments = [],\n emptyIndex = -1;\n\n // Stitch empty arcs first, since they may be subsumed by other arcs.\n arcs.forEach(function(i, j) {\n var arc = topology.arcs[i < 0 ? ~i : i], t;\n if (arc.length < 3 && !arc[1][0] && !arc[1][1]) {\n t = arcs[++emptyIndex], arcs[emptyIndex] = i, arcs[j] = t;\n }\n });\n\n arcs.forEach(function(i) {\n var e = ends(i),\n start = e[0],\n end = e[1],\n f, g;\n\n if (f = fragmentByEnd[start]) {\n delete fragmentByEnd[f.end];\n f.push(i);\n f.end = end;\n if (g = fragmentByStart[end]) {\n delete fragmentByStart[g.start];\n var fg = g === f ? f : f.concat(g);\n fragmentByStart[fg.start = f.start] = fragmentByEnd[fg.end = g.end] = fg;\n } else {\n fragmentByStart[f.start] = fragmentByEnd[f.end] = f;\n }\n } else if (f = fragmentByStart[end]) {\n delete fragmentByStart[f.start];\n f.unshift(i);\n f.start = start;\n if (g = fragmentByEnd[start]) {\n delete fragmentByEnd[g.end];\n var gf = g === f ? f : g.concat(f);\n fragmentByStart[gf.start = g.start] = fragmentByEnd[gf.end = f.end] = gf;\n } else {\n fragmentByStart[f.start] = fragmentByEnd[f.end] = f;\n }\n } else {\n f = [i];\n fragmentByStart[f.start = start] = fragmentByEnd[f.end = end] = f;\n }\n });\n\n function ends(i) {\n var arc = topology.arcs[i < 0 ? ~i : i], p0 = arc[0], p1;\n if (topology.transform) p1 = [0, 0], arc.forEach(function(dp) { p1[0] += dp[0], p1[1] += dp[1]; });\n else p1 = arc[arc.length - 1];\n return i < 0 ? [p1, p0] : [p0, p1];\n }\n\n function flush(fragmentByEnd, fragmentByStart) {\n for (var k in fragmentByEnd) {\n var f = fragmentByEnd[k];\n delete fragmentByStart[f.start];\n delete f.start;\n delete f.end;\n f.forEach(function(i) { stitchedArcs[i < 0 ? ~i : i] = 1; });\n fragments.push(f);\n }\n }\n\n flush(fragmentByEnd, fragmentByStart);\n flush(fragmentByStart, fragmentByEnd);\n arcs.forEach(function(i) { if (!stitchedArcs[i < 0 ? ~i : i]) fragments.push([i]); });\n\n return fragments;\n}\n","import {object} from \"./feature\";\nimport stitch from \"./stitch\";\n\nexport default function(topology) {\n return object(topology, meshArcs.apply(this, arguments));\n}\n\nexport function meshArcs(topology, object, filter) {\n var arcs, i, n;\n if (arguments.length > 1) arcs = extractArcs(topology, object, filter);\n else for (i = 0, arcs = new Array(n = topology.arcs.length); i < n; ++i) arcs[i] = i;\n return {type: \"MultiLineString\", arcs: stitch(topology, arcs)};\n}\n\nfunction extractArcs(topology, object, filter) {\n var arcs = [],\n geomsByArc = [],\n geom;\n\n function extract0(i) {\n var j = i < 0 ? ~i : i;\n (geomsByArc[j] || (geomsByArc[j] = [])).push({i: i, g: geom});\n }\n\n function extract1(arcs) {\n arcs.forEach(extract0);\n }\n\n function extract2(arcs) {\n arcs.forEach(extract1);\n }\n\n function extract3(arcs) {\n arcs.forEach(extract2);\n }\n\n function geometry(o) {\n switch (geom = o, o.type) {\n case \"GeometryCollection\": o.geometries.forEach(geometry); break;\n case \"LineString\": extract1(o.arcs); break;\n case \"MultiLineString\": case \"Polygon\": extract2(o.arcs); break;\n case \"MultiPolygon\": extract3(o.arcs); break;\n }\n }\n\n geometry(object);\n\n geomsByArc.forEach(filter == null\n ? function(geoms) { arcs.push(geoms[0].i); }\n : function(geoms) { if (filter(geoms[0].g, geoms[geoms.length - 1].g)) arcs.push(geoms[0].i); });\n\n return arcs;\n}\n","import json from './json';\nimport {feature, mesh} from 'topojson-client';\nimport {error} from 'vega-util';\n\nconst filters = {\n interior: (a, b) => a !== b,\n exterior: (a, b) => a === b\n};\n\nexport default function topojson(data, format) {\n let method, object, property, filter;\n data = json(data, format);\n\n if (format && format.feature) {\n method = feature;\n property = format.feature;\n } else if (format && format.mesh) {\n method = mesh;\n property = format.mesh;\n filter = filters[format.filter];\n } else {\n error('Missing TopoJSON feature or mesh parameter.');\n }\n\n object = (object = data.objects[property])\n ? method(data, object, filter)\n : error('Invalid TopoJSON object: ' + property);\n\n return object && object.features || [object];\n}\n\ntopojson.responseType = 'json';\n","import {default as dsv, delimitedFormat} from './dsv';\nimport json from './json';\nimport topojson from './topojson';\n\nexport const format = {\n dsv: dsv,\n csv: delimitedFormat(','),\n tsv: delimitedFormat('\\t'),\n json: json,\n topojson: topojson\n};\n\nexport function formats(name, reader) {\n if (arguments.length > 1) {\n format[name] = reader;\n return this;\n } else {\n return format.hasOwnProperty(name) ? format[name] : null;\n }\n}\n\nexport function responseType(type) {\n const f = formats(type);\n return f && f.responseType || 'text';\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval\";\nimport {durationSecond} from \"./duration\";\n\nvar second = interval(function(date) {\n date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval\";\nimport {durationMinute, durationSecond} from \"./duration\";\n\nvar minute = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration\";\n\nvar hour = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval\";\nimport {durationDay, durationMinute} from \"./duration\";\n\nvar day = interval(function(date) {\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setDate(date.getDate() + step);\n}, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval\";\nimport {durationMinute, durationWeek} from \"./duration\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval\";\nimport {durationHour} from \"./duration\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval\";\nimport {durationDay} from \"./duration\";\n\nvar utcDay = interval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n return (end - start) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval\";\nimport {durationWeek} from \"./duration\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, newDate) {\n return function(string) {\n var d = newYear(1900),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newYear(d.y)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = newDate(newYear(d.y)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return newDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", localDate);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier, utcDate);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {utcFormat} from \"./defaultLocale\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : utcFormat(isoSpecifier);\n\nexport default formatIso;\n","import {isoSpecifier} from \"./isoFormat\";\nimport {utcParse} from \"./defaultLocale\";\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : utcParse(isoSpecifier);\n\nexport default parseIso;\n","import {inferTypes, typeParsers} from './type';\nimport {formats} from './formats/index';\nimport {error} from 'vega-util';\nimport {timeParse, utcParse} from 'd3-time-format';\n\nexport default function(data, schema, dateParse) {\n schema = schema || {};\n\n const reader = formats(schema.type || 'json');\n if (!reader) error('Unknown data format type: ' + schema.type);\n\n data = reader(data, schema);\n if (schema.parse) parse(data, schema.parse, dateParse);\n\n if (data.hasOwnProperty('columns')) delete data.columns;\n return data;\n}\n\nfunction parse(data, types, dateParse) {\n if (!data.length) return; // early exit for empty data\n\n dateParse = dateParse || timeParse;\n\n var fields = data.columns || Object.keys(data[0]),\n parsers, datum, field, i, j, n, m;\n\n if (types === 'auto') types = inferTypes(data, fields);\n\n fields = Object.keys(types);\n parsers = fields.map(function(field) {\n var type = types[field],\n parts, pattern;\n\n if (type && (type.indexOf('date:') === 0 || type.indexOf('utc:') === 0)) {\n parts = type.split(/:(.+)?/, 2); // split on first :\n pattern = parts[1];\n\n if ((pattern[0] === '\\'' && pattern[pattern.length-1] === '\\'') ||\n (pattern[0] === '\"' && pattern[pattern.length-1] === '\"')) {\n pattern = pattern.slice(1, -1);\n }\n\n return parts[0] === 'utc' ? utcParse(pattern) : dateParse(pattern);\n }\n\n if (!typeParsers[type]) {\n throw Error('Illegal format pattern: ' + field + ':' + type);\n }\n\n return typeParsers[type];\n });\n\n for (i=0, n=data.length, m=fields.length; i df.touch(target(e));\n } else if (isFunction(update)) {\n op = new Operator(null, update, params, false);\n func = e => {\n op.evaluate(e);\n const t = target(e), v = op.value;\n isChangeSet(v) ? df.pulse(t, v, options) : df.update(t, v, opt);\n };\n } else {\n func = e => df.update(target(e), update, opt);\n }\n\n stream.apply(func);\n}\n\nfunction onOperator(df, source, target, update, params, options) {\n if (update === undefined) {\n source.targets().add(target);\n } else {\n const opt = options || {},\n op = new Operator(null, updater(target, update), params, false);\n op.modified(opt.force);\n op.rank = source.rank; // immediately follow source\n source.targets().add(op); // add dependency\n\n if (target) {\n op.skip(true); // skip first invocation\n op.value = target.value; // initialize value\n op.targets().add(target); // chain dependencies\n df.connect(target, [op]); // rerank as needed, #1672\n }\n }\n}\n\nfunction updater(target, update) {\n update = isFunction(update) ? update : constant(update);\n return target\n ? function(_, pulse) {\n const value = update(_, pulse);\n if (!target.skip()) {\n target.skip(value !== this.value).value = value;\n }\n return value;\n }\n : update;\n}\n","import {error} from 'vega-util';\n\n/**\n * Assigns a rank to an operator. Ranks are assigned in increasing order\n * by incrementing an internal rank counter.\n * @param {Operator} op - The operator to assign a rank.\n */\nexport function rank(op) {\n op.rank = ++this._rank;\n}\n\n/**\n * Re-ranks an operator and all downstream target dependencies. This\n * is necessary when upstream dependencies of higher rank are added to\n * a target operator.\n * @param {Operator} op - The operator to re-rank.\n */\nexport function rerank(op) {\n var queue = [op],\n cur, list, i;\n\n while (queue.length) {\n this.rank(cur = queue.pop());\n if (list = cur._targets) {\n for (i=list.length; --i >= 0;) {\n queue.push(cur = list[i]);\n if (cur === op) error('Cycle detected in dataflow graph.');\n }\n }\n }\n}\n","import {tupleid} from './Tuple';\nimport {array, isArray, visitArray} from 'vega-util';\n\n/**\n * Sentinel value indicating pulse propagation should stop.\n */\nexport var StopPropagation = {};\n\n// Pulse visit type flags\nvar ADD = (1 << 0),\n REM = (1 << 1),\n MOD = (1 << 2),\n ADD_REM = ADD | REM,\n ADD_MOD = ADD | MOD,\n ALL = ADD | REM | MOD,\n REFLOW = (1 << 3),\n SOURCE = (1 << 4),\n NO_SOURCE = (1 << 5),\n NO_FIELDS = (1 << 6);\n\n/**\n * A Pulse enables inter-operator communication during a run of the\n * dataflow graph. In addition to the current timestamp, a pulse may also\n * contain a change-set of added, removed or modified data tuples, as well as\n * a pointer to a full backing data source. Tuple change sets may not\n * be fully materialized; for example, to prevent needless array creation\n * a change set may include larger arrays and corresponding filter functions.\n * The pulse provides a {@link visit} method to enable proper and efficient\n * iteration over requested data tuples.\n *\n * In addition, each pulse can track modification flags for data tuple fields.\n * Responsible transform operators should call the {@link modifies} method to\n * indicate changes to data fields. The {@link modified} method enables\n * querying of this modification state.\n *\n * @constructor\n * @param {Dataflow} dataflow - The backing dataflow instance.\n * @param {number} stamp - The current propagation timestamp.\n * @param {string} [encode] - An optional encoding set name, which is then\n * accessible as Pulse.encode. Operators can respond to (or ignore) this\n * setting as appropriate. This parameter can be used in conjunction with\n * the Encode transform in the vega-encode module.\n */\nexport default function Pulse(dataflow, stamp, encode) {\n this.dataflow = dataflow;\n this.stamp = stamp == null ? -1 : stamp;\n this.add = [];\n this.rem = [];\n this.mod = [];\n this.fields = null;\n this.encode = encode || null;\n}\n\nvar prototype = Pulse.prototype;\n\n/**\n * Sentinel value indicating pulse propagation should stop.\n */\nprototype.StopPropagation = StopPropagation;\n\n/**\n * Boolean flag indicating ADD (added) tuples.\n */\nprototype.ADD = ADD;\n\n/**\n * Boolean flag indicating REM (removed) tuples.\n */\nprototype.REM = REM;\n\n/**\n * Boolean flag indicating MOD (modified) tuples.\n */\nprototype.MOD = MOD;\n\n/**\n * Boolean flag indicating ADD (added) and REM (removed) tuples.\n */\nprototype.ADD_REM = ADD_REM;\n\n/**\n * Boolean flag indicating ADD (added) and MOD (modified) tuples.\n */\nprototype.ADD_MOD = ADD_MOD;\n\n/**\n * Boolean flag indicating ADD, REM and MOD tuples.\n */\nprototype.ALL = ALL;\n\n/**\n * Boolean flag indicating all tuples in a data source\n * except for the ADD, REM and MOD tuples.\n */\nprototype.REFLOW = REFLOW;\n\n/**\n * Boolean flag indicating a 'pass-through' to a\n * backing data source, ignoring ADD, REM and MOD tuples.\n */\nprototype.SOURCE = SOURCE;\n\n/**\n * Boolean flag indicating that source data should be\n * suppressed when creating a forked pulse.\n */\nprototype.NO_SOURCE = NO_SOURCE;\n\n/**\n * Boolean flag indicating that field modifications should be\n * suppressed when creating a forked pulse.\n */\nprototype.NO_FIELDS = NO_FIELDS;\n\n/**\n * Creates a new pulse based on the values of this pulse.\n * The dataflow, time stamp and field modification values are copied over.\n * By default, new empty ADD, REM and MOD arrays are created.\n * @param {number} flags - Integer of boolean flags indicating which (if any)\n * tuple arrays should be copied to the new pulse. The supported flag values\n * are ADD, REM and MOD. Array references are copied directly: new array\n * instances are not created.\n * @return {Pulse} - The forked pulse instance.\n * @see init\n */\nprototype.fork = function(flags) {\n return new Pulse(this.dataflow).init(this, flags);\n};\n\n/**\n * Creates a copy of this pulse with new materialized array\n * instances for the ADD, REM, MOD, and SOURCE arrays.\n * The dataflow, time stamp and field modification values are copied over.\n * @return {Pulse} - The cloned pulse instance.\n * @see init\n */\nprototype.clone = function() {\n var p = this.fork(ALL);\n p.add = p.add.slice();\n p.rem = p.rem.slice();\n p.mod = p.mod.slice();\n if (p.source) p.source = p.source.slice();\n return p.materialize(ALL | SOURCE);\n};\n\n/**\n * Returns a pulse that adds all tuples from a backing source. This is\n * useful for cases where operators are added to a dataflow after an\n * upstream data pipeline has already been processed, ensuring that\n * new operators can observe all tuples within a stream.\n * @return {Pulse} - A pulse instance with all source tuples included\n * in the add array. If the current pulse already has all source\n * tuples in its add array, it is returned directly. If the current\n * pulse does not have a backing source, it is returned directly.\n */\nprototype.addAll = function() {\n var p = this;\n if (!this.source || this.source.length === this.add.length) {\n return p;\n } else {\n p = new Pulse(this.dataflow).init(this);\n p.add = p.source;\n return p;\n }\n};\n\n/**\n * Initialize this pulse based on the values of another pulse. This method\n * is used internally by {@link fork} to initialize a new forked tuple.\n * The dataflow, time stamp and field modification values are copied over.\n * By default, new empty ADD, REM and MOD arrays are created.\n * @param {Pulse} src - The source pulse to copy from.\n * @param {number} flags - Integer of boolean flags indicating which (if any)\n * tuple arrays should be copied to the new pulse. The supported flag values\n * are ADD, REM and MOD. Array references are copied directly: new array\n * instances are not created. By default, source data arrays are copied\n * to the new pulse. Use the NO_SOURCE flag to enforce a null source.\n * @return {Pulse} - Returns this Pulse instance.\n */\nprototype.init = function(src, flags) {\n var p = this;\n p.stamp = src.stamp;\n p.encode = src.encode;\n\n if (src.fields && !(flags & NO_FIELDS)) {\n p.fields = src.fields;\n }\n\n if (flags & ADD) {\n p.addF = src.addF;\n p.add = src.add;\n } else {\n p.addF = null;\n p.add = [];\n }\n\n if (flags & REM) {\n p.remF = src.remF;\n p.rem = src.rem;\n } else {\n p.remF = null;\n p.rem = [];\n }\n\n if (flags & MOD) {\n p.modF = src.modF;\n p.mod = src.mod;\n } else {\n p.modF = null;\n p.mod = [];\n }\n\n if (flags & NO_SOURCE) {\n p.srcF = null;\n p.source = null;\n } else {\n p.srcF = src.srcF;\n p.source = src.source;\n }\n\n return p;\n};\n\n/**\n * Schedules a function to run after pulse propagation completes.\n * @param {function} func - The function to run.\n */\nprototype.runAfter = function(func) {\n this.dataflow.runAfter(func);\n};\n\n/**\n * Indicates if tuples have been added, removed or modified.\n * @param {number} [flags] - The tuple types (ADD, REM or MOD) to query.\n * Defaults to ALL, returning true if any tuple type has changed.\n * @return {boolean} - Returns true if one or more queried tuple types have\n * changed, false otherwise.\n */\nprototype.changed = function(flags) {\n var f = flags || ALL;\n return ((f & ADD) && this.add.length)\n || ((f & REM) && this.rem.length)\n || ((f & MOD) && this.mod.length);\n};\n\n/**\n * Forces a \"reflow\" of tuple values, such that all tuples in the backing\n * source are added to the MOD set, unless already present in the ADD set.\n * @param {boolean} [fork=false] - If true, returns a forked copy of this\n * pulse, and invokes reflow on that derived pulse.\n * @return {Pulse} - The reflowed pulse instance.\n */\nprototype.reflow = function(fork) {\n if (fork) return this.fork(ALL).reflow();\n\n var len = this.add.length,\n src = this.source && this.source.length;\n if (src && src !== len) {\n this.mod = this.source;\n if (len) this.filter(MOD, filter(this, ADD));\n }\n return this;\n};\n\n/**\n * Marks one or more data field names as modified to assist dependency\n * tracking and incremental processing by transform operators.\n * @param {string|Array} _ - The field(s) to mark as modified.\n * @return {Pulse} - This pulse instance.\n */\nprototype.modifies = function(_) {\n var fields = array(_),\n hash = this.fields || (this.fields = {});\n fields.forEach(function(f) { hash[f] = true; });\n return this;\n};\n\n/**\n * Checks if one or more data fields have been modified during this pulse\n * propagation timestamp.\n * @param {string|Array} _ - The field(s) to check for modified.\n * @return {boolean} - Returns true if any of the provided fields has been\n * marked as modified, false otherwise.\n */\nprototype.modified = function(_) {\n var fields = this.fields;\n return !(this.mod.length && fields) ? false\n : !arguments.length ? !!fields\n : isArray(_) ? _.some(function(f) { return fields[f]; })\n : fields[_];\n};\n\n/**\n * Adds a filter function to one more tuple sets. Filters are applied to\n * backing tuple arrays, to determine the actual set of tuples considered\n * added, removed or modified. They can be used to delay materialization of\n * a tuple set in order to avoid expensive array copies. In addition, the\n * filter functions can serve as value transformers: unlike standard predicate\n * function (which return boolean values), Pulse filters should return the\n * actual tuple value to process. If a tuple set is already filtered, the\n * new filter function will be appended into a conjuntive ('and') query.\n * @param {number} flags - Flags indicating the tuple set(s) to filter.\n * @param {function(*):object} filter - Filter function that will be applied\n * to the tuple set array, and should return a data tuple if the value\n * should be included in the tuple set, and falsy (or null) otherwise.\n * @return {Pulse} - Returns this pulse instance.\n */\nprototype.filter = function(flags, filter) {\n var p = this;\n if (flags & ADD) p.addF = addFilter(p.addF, filter);\n if (flags & REM) p.remF = addFilter(p.remF, filter);\n if (flags & MOD) p.modF = addFilter(p.modF, filter);\n if (flags & SOURCE) p.srcF = addFilter(p.srcF, filter);\n return p;\n};\n\nfunction addFilter(a, b) {\n return a ? function(t,i) { return a(t,i) && b(t,i); } : b;\n}\n\n/**\n * Materialize one or more tuple sets in this pulse. If the tuple set(s) have\n * a registered filter function, it will be applied and the tuple set(s) will\n * be replaced with materialized tuple arrays.\n * @param {number} flags - Flags indicating the tuple set(s) to materialize.\n * @return {Pulse} - Returns this pulse instance.\n */\nprototype.materialize = function(flags) {\n flags = flags || ALL;\n var p = this;\n if ((flags & ADD) && p.addF) {\n p.add = materialize(p.add, p.addF);\n p.addF = null;\n }\n if ((flags & REM) && p.remF) {\n p.rem = materialize(p.rem, p.remF);\n p.remF = null;\n }\n if ((flags & MOD) && p.modF) {\n p.mod = materialize(p.mod, p.modF);\n p.modF = null;\n }\n if ((flags & SOURCE) && p.srcF) {\n p.source = p.source.filter(p.srcF);\n p.srcF = null;\n }\n return p;\n};\n\nfunction materialize(data, filter) {\n var out = [];\n visitArray(data, filter, function(_) { out.push(_); });\n return out;\n}\n\nfunction filter(pulse, flags) {\n var map = {};\n pulse.visit(flags, function(t) { map[tupleid(t)] = 1; });\n return function(t) { return map[tupleid(t)] ? null : t; };\n}\n\n/**\n * Visit one or more tuple sets in this pulse.\n * @param {number} flags - Flags indicating the tuple set(s) to visit.\n * Legal values are ADD, REM, MOD and SOURCE (if a backing data source\n * has been set).\n * @param {function(object):*} - Visitor function invoked per-tuple.\n * @return {Pulse} - Returns this pulse instance.\n */\nprototype.visit = function(flags, visitor) {\n var p = this, v = visitor, src, sum;\n\n if (flags & SOURCE) {\n visitArray(p.source, p.srcF, v);\n return p;\n }\n\n if (flags & ADD) visitArray(p.add, p.addF, v);\n if (flags & REM) visitArray(p.rem, p.remF, v);\n if (flags & MOD) visitArray(p.mod, p.modF, v);\n\n if ((flags & REFLOW) && (src = p.source)) {\n sum = p.add.length + p.mod.length;\n if (sum === src.length) {\n // do nothing\n } else if (sum) {\n visitArray(src, filter(p, ADD_MOD), v);\n } else {\n // if no add/rem/mod tuples, visit source\n visitArray(src, p.srcF, v);\n }\n }\n\n return p;\n};\n","import Pulse from './Pulse';\nimport {error, inherits, isArray} from 'vega-util';\n\n/**\n * Represents a set of multiple pulses. Used as input for operators\n * that accept multiple pulses at a time. Contained pulses are\n * accessible via the public \"pulses\" array property. This pulse doe\n * not carry added, removed or modified tuples directly. However,\n * the visit method can be used to traverse all such tuples contained\n * in sub-pulses with a timestamp matching this parent multi-pulse.\n * @constructor\n * @param {Dataflow} dataflow - The backing dataflow instance.\n * @param {number} stamp - The timestamp.\n * @param {Array} pulses - The sub-pulses for this multi-pulse.\n */\nexport default function MultiPulse(dataflow, stamp, pulses, encode) {\n var p = this,\n c = 0,\n pulse, hash, i, n, f;\n\n this.dataflow = dataflow;\n this.stamp = stamp;\n this.fields = null;\n this.encode = encode || null;\n this.pulses = pulses;\n\n for (i=0, n=pulses.length; i= Info) {\n dt = Date.now();\n df.debug('-- START PROPAGATION (' + stamp + ') -----');\n }\n\n // initialize priority queue, reset touched operators\n df._touched.forEach(function(op) { df._enqueue(op, true); });\n df._touched = UniqueList(id);\n\n try {\n while (df._heap.size() > 0) {\n // dequeue operator with highest priority\n op = df._heap.pop();\n\n // re-queue if rank changed\n if (op.rank !== op.qrank) { df._enqueue(op, true); continue; }\n\n // otherwise, evaluate the operator\n next = op.run(df._getPulse(op, encode));\n\n // await if operator returned a promise\n if (next.then) {\n next = await next;\n }\n\n if (level >= Debug) {\n df.debug(op.id, next === StopPropagation ? 'STOP' : next, op);\n }\n\n // propagate evaluation, enqueue dependent operators\n if (next !== StopPropagation) {\n df._pulse = next;\n if (op._targets) op._targets.forEach(op => df._enqueue(op));\n }\n\n // increment visit counter\n ++count;\n }\n } catch (err) {\n error = err;\n }\n\n // reset pulse map\n df._pulses = {};\n df._pulse = null;\n\n if (level >= Info) {\n dt = Date.now() - dt;\n df.info('> Pulse ' + stamp + ': ' + count + ' operators; ' + dt + 'ms');\n }\n\n if (error) {\n df._postrun = [];\n df.error(error);\n }\n\n // invoke callbacks queued via runAfter\n if (df._postrun.length) {\n const pr = df._postrun.sort((a, b) => b.priority - a.priority);\n df._postrun = [];\n for (let i=0; i this._running = null;\n (this._running = this.evaluate(encode, prerun, postrun))\n .then(clear, clear);\n\n return this._running;\n}\n\n/**\n * Requests dataflow evaluation and the immediately returns this dataflow\n * instance. If there are pending data loading or other asynchronous\n * operations, the dataflow will evaluate asynchronously after this method\n * has been invoked. To track when dataflow evaluation completes, use the\n * {@link runAsync} method instead. This method will raise an error if\n * invoked while the dataflow is already in the midst of evaluation.\n * @param {string} [encode] - The name of an encoding set to invoke during\n * propagation. This value is added to generated Pulse instances;\n * operators can then respond to (or ignore) this setting as appropriate.\n * This parameter can be used in conjunction with the Encode transform in\n * the vega-encode module.\n * @param {function} [prerun] - An optional callback function to invoke\n * immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n * after dataflow evaluation completes. The callback will be invoked\n * after those registered via {@link runAfter}.\n * @return {Dataflow} - This dataflow instance.\n */\nexport function run(encode, prerun, postrun) {\n return this._pulse ? reentrant(this)\n : (this.evaluate(encode, prerun, postrun), this);\n}\n\n/**\n * Schedules a callback function to be invoked after the current pulse\n * propagation completes. If no propagation is currently occurring,\n * the function is invoked immediately. Callbacks scheduled via runAfter\n * are invoked immediately upon completion of the current cycle, before\n * any request queued via runAsync. This method is primarily intended for\n * internal use. Third-party callers using runAfter to schedule a callback\n * that invokes {@link run} or {@link runAsync} should not use this method,\n * but instead use {@link runAsync} with prerun or postrun arguments.\n * @param {function(Dataflow)} callback - The callback function to run.\n * The callback will be invoked with this Dataflow instance as its\n * sole argument.\n * @param {boolean} enqueue - A boolean flag indicating that the\n * callback should be queued up to run after the next propagation\n * cycle, suppressing immediate invocation when propagation is not\n * currently occurring.\n * @param {number} [priority] - A priority value used to sort registered\n * callbacks to determine execution order. This argument is intended\n * for internal Vega use only.\n */\nexport function runAfter(callback, enqueue, priority) {\n if (this._pulse || enqueue) {\n // pulse propagation is currently running, queue to run after\n this._postrun.push({\n priority: priority || 0,\n callback: callback\n });\n } else {\n // pulse propagation already complete, invoke immediately\n try { callback(this); } catch (err) { this.error(err); }\n }\n}\n\n/**\n * Raise an error for re-entrant dataflow evaluation.\n */\nfunction reentrant(df) {\n df.error('Dataflow already running. Use runAsync() to chain invocations.');\n return df;\n}\n\n/**\n * Enqueue an operator into the priority queue for evaluation. The operator\n * will be enqueued if it has no registered pulse for the current cycle, or if\n * the force argument is true. Upon enqueue, this method also sets the\n * operator's qrank to the current rank value.\n * @param {Operator} op - The operator to enqueue.\n * @param {boolean} [force] - A flag indicating if the operator should be\n * forceably added to the queue, even if it has already been previously\n * enqueued during the current pulse propagation. This is useful when the\n * dataflow graph is dynamically modified and the operator rank changes.\n */\nexport function enqueue(op, force) {\n var p = !this._pulses[op.id];\n if (p) this._pulses[op.id] = this._pulse;\n if (p || force) {\n op.qrank = op.rank;\n this._heap.push(op);\n }\n}\n\n/**\n * Provide a correct pulse for evaluating an operator. If the operator has an\n * explicit source operator, we will try to pull the pulse(s) from it.\n * If there is an array of source operators, we build a multi-pulse.\n * Otherwise, we return a current pulse with correct source data.\n * If the pulse is the pulse map has an explicit target set, we use that.\n * Else if the pulse on the upstream source operator is current, we use that.\n * Else we use the pulse from the pulse map, but copy the source tuple array.\n * @param {Operator} op - The operator for which to get an input pulse.\n * @param {string} [encode] - An (optional) encoding set name with which to\n * annotate the returned pulse. See {@link run} for more information.\n */\nexport function getPulse(op, encode) {\n var s = op.source,\n stamp = this._clock,\n p;\n\n if (s && isArray(s)) {\n p = s.map(function(_) { return _.pulse; });\n return new MultiPulse(this, stamp, p, encode);\n }\n\n p = this._pulses[op.id];\n if (s) {\n s = s.pulse;\n if (!s || s === StopPropagation) {\n p.source = [];\n } else if (s.stamp === stamp && p.target !== op) {\n p = s;\n } else {\n p.source = s.source;\n }\n }\n\n return p;\n}\n","import Pulse from '../Pulse';\n\nvar NO_OPT = {skip: false, force: false};\n\n/**\n * Touches an operator, scheduling it to be evaluated. If invoked outside of\n * a pulse propagation, the operator will be evaluated the next time this\n * dataflow is run. If invoked in the midst of pulse propagation, the operator\n * will be queued for evaluation if and only if the operator has not yet been\n * evaluated on the current propagation timestamp.\n * @param {Operator} op - The operator to touch.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\nexport function touch(op, options) {\n var opt = options || NO_OPT;\n if (this._pulse) {\n // if in midst of propagation, add to priority queue\n this._enqueue(op);\n } else {\n // otherwise, queue for next propagation\n this._touched.add(op);\n }\n if (opt.skip) op.skip(true);\n return this;\n}\n\n/**\n * Updates the value of the given operator.\n * @param {Operator} op - The operator to update.\n * @param {*} value - The value to set.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.force] - If true, the operator will\n * be re-evaluated even if its value has not changed.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\nexport function update(op, value, options) {\n var opt = options || NO_OPT;\n if (op.set(value) || opt.force) {\n this.touch(op, opt);\n }\n return this;\n}\n\n/**\n * Pulses an operator with a changeset of tuples. If invoked outside of\n * a pulse propagation, the pulse will be applied the next time this\n * dataflow is run. If invoked in the midst of pulse propagation, the pulse\n * will be added to the set of active pulses and will be applied if and\n * only if the target operator has not yet been evaluated on the current\n * propagation timestamp.\n * @param {Operator} op - The operator to pulse.\n * @param {ChangeSet} value - The tuple changeset to apply.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\nexport function pulse(op, changeset, options) {\n this.touch(op, options || NO_OPT);\n\n var p = new Pulse(this, this._clock + (this._pulse ? 0 : 1)),\n t = op.pulse && op.pulse.source || [];\n p.target = op;\n this._pulses[op.id] = changeset.pulse(p, t);\n\n return this;\n}\n","export default function Heap(cmp) {\n var nodes = [];\n return {\n size: () => nodes.length,\n peek: () => nodes[0],\n push: x => {\n nodes.push(x);\n return siftdown(nodes, 0, nodes.length - 1, cmp);\n },\n pop: () => {\n var last = nodes.pop(), item;\n if (nodes.length) {\n item = nodes[0];\n nodes[0] = last;\n siftup(nodes, 0, cmp);\n } else {\n item = last;\n }\n return item;\n }\n };\n}\n\nfunction siftdown(array, start, idx, cmp) {\n var item, parent, pidx;\n\n item = array[idx];\n while (idx > start) {\n pidx = (idx - 1) >> 1;\n parent = array[pidx];\n if (cmp(item, parent) < 0) {\n array[idx] = parent;\n idx = pidx;\n continue;\n }\n break;\n }\n return (array[idx] = item);\n}\n\nfunction siftup(array, idx, cmp) {\n var start = idx,\n end = array.length,\n item = array[idx],\n cidx = (idx << 1) + 1, ridx;\n\n while (cidx < end) {\n ridx = cidx + 1;\n if (ridx < end && cmp(array[cidx], array[ridx]) >= 0) {\n cidx = ridx;\n }\n array[idx] = array[cidx];\n idx = cidx;\n cidx = (idx << 1) + 1;\n }\n array[idx] = item;\n return siftdown(array, start, idx, cmp);\n}\n","import add from './add';\nimport connect from './connect';\nimport events from './events';\nimport {ingest, parse, preload, request} from './load';\nimport on from './on';\nimport {rank, rerank} from './rank';\nimport {evaluate, run, runAsync, runAfter, enqueue, getPulse} from './run';\nimport {pulse, touch, update} from './update';\nimport changeset from '../ChangeSet';\nimport Heap from '../util/Heap';\nimport UniqueList from '../util/UniqueList';\nimport {loader} from 'vega-loader';\nimport {id, logger, Error} from 'vega-util';\n\n/**\n * A dataflow graph for reactive processing of data streams.\n * @constructor\n */\nexport default function Dataflow() {\n this.logger(logger());\n this.logLevel(Error);\n\n this._clock = 0;\n this._rank = 0;\n try {\n this._loader = loader();\n } catch (e) {\n // do nothing if loader module is unavailable\n }\n\n this._touched = UniqueList(id);\n this._pulses = {};\n this._pulse = null;\n\n this._heap = Heap((a, b) => a.qrank - b.qrank);\n this._postrun = [];\n}\n\nvar prototype = Dataflow.prototype;\n\n/**\n * The current timestamp of this dataflow. This value reflects the\n * timestamp of the previous dataflow run. The dataflow is initialized\n * with a stamp value of 0. The initial run of the dataflow will have\n * a timestap of 1, and so on. This value will match the\n * {@link Pulse.stamp} property.\n * @return {number} - The current timestamp value.\n */\nprototype.stamp = function() {\n return this._clock;\n};\n\n/**\n * Gets or sets the loader instance to use for data file loading. A\n * loader object must provide a \"load\" method for loading files and a\n * \"sanitize\" method for checking URL/filename validity. Both methods\n * should accept a URI and options hash as arguments, and return a Promise\n * that resolves to the loaded file contents (load) or a hash containing\n * sanitized URI data with the sanitized url assigned to the \"href\" property\n * (sanitize).\n * @param {object} _ - The loader instance to use.\n * @return {object|Dataflow} - If no arguments are provided, returns\n * the current loader instance. Otherwise returns this Dataflow instance.\n */\nprototype.loader = function(_) {\n if (arguments.length) {\n this._loader = _;\n return this;\n } else {\n return this._loader;\n }\n};\n\n/**\n * Empty entry threshold for garbage cleaning. Map data structures will\n * perform cleaning once the number of empty entries exceeds this value.\n */\nprototype.cleanThreshold = 1e4;\n\n// OPERATOR REGISTRATION\nprototype.add = add;\nprototype.connect = connect;\nprototype.rank = rank;\nprototype.rerank = rerank;\n\n// OPERATOR UPDATES\nprototype.pulse = pulse;\nprototype.touch = touch;\nprototype.update = update;\nprototype.changeset = changeset;\n\n// DATA LOADING\nprototype.ingest = ingest;\nprototype.parse = parse;\nprototype.preload = preload;\nprototype.request = request;\n\n// EVENT HANDLING\nprototype.events = events;\nprototype.on = on;\n\n// PULSE PROPAGATION\nprototype.evaluate = evaluate;\nprototype.run = run;\nprototype.runAsync = runAsync;\nprototype.runAfter = runAfter;\nprototype._enqueue = enqueue;\nprototype._getPulse = getPulse;\n\n// LOGGING AND ERROR HANDLING\n\nfunction logMethod(method) {\n return function() {\n return this._log[method].apply(this, arguments);\n };\n}\n\n/**\n * Get or set the logger instance used to log messages. If no arguments are\n * provided, returns the current logger instance. Otherwise, sets the logger\n * and return this Dataflow instance. Provided loggers must support the full\n * API of logger objects generated by the vega-util logger method. Note that\n * by default the log level of the new logger will be used; use the logLevel\n * method to adjust the log level as needed.\n */\nprototype.logger = function(logger) {\n if (arguments.length) {\n this._log = logger;\n return this;\n } else {\n return this._log;\n }\n};\n\n/**\n * Logs an error message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit error messages.\n */\nprototype.error = logMethod('error');\n\n/**\n * Logs a warning message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit warning messages.\n */\nprototype.warn = logMethod('warn');\n\n/**\n * Logs a information message. By default, logged messages are written to\n * console output. The message will only be logged if the current log level is\n * high enough to permit information messages.\n */\nprototype.info = logMethod('info');\n\n/**\n * Logs a debug message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit debug messages.\n */\nprototype.debug = logMethod('debug');\n\n/**\n * Get or set the current log level. If an argument is provided, it\n * will be used as the new log level.\n * @param {number} [level] - Should be one of None, Warn, Info\n * @return {number} - The current log level.\n */\nprototype.logLevel = logMethod('level');\n","import Operator from './Operator';\nimport {inherits} from 'vega-util';\n\n/**\n * Abstract class for operators that process data tuples.\n * Subclasses must provide a {@link transform} method for operator processing.\n * @constructor\n * @param {*} [init] - The initial value for this operator.\n * @param {object} [params] - The parameters for this operator.\n * @param {Operator} [source] - The operator from which to receive pulses.\n */\nexport default function Transform(init, params) {\n Operator.call(this, init, null, params);\n}\n\nvar prototype = inherits(Transform, Operator);\n\n/**\n * Overrides {@link Operator.evaluate} for transform operators.\n * Internally, this method calls {@link evaluate} to perform processing.\n * If {@link evaluate} returns a falsy value, the input pulse is returned.\n * This method should NOT be overridden, instead overrride {@link evaluate}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return the output pulse for this operator (or StopPropagation)\n */\nprototype.run = function(pulse) {\n if (pulse.stamp <= this.stamp) return pulse.StopPropagation;\n\n var rv;\n if (this.skip()) {\n this.skip(false);\n } else {\n rv = this.evaluate(pulse);\n }\n rv = rv || pulse;\n\n this.stamp = pulse.stamp;\n\n if (rv.then) {\n rv = rv.then(_ => this.pulse =_);\n } else if (rv !== pulse.StopPropagation) {\n this.pulse = rv;\n }\n\n return rv;\n};\n\n/**\n * Overrides {@link Operator.evaluate} for transform operators.\n * Marshalls parameter values and then invokes {@link transform}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return {Pulse} The output pulse (or StopPropagation). A falsy return\n value (including undefined) will let the input pulse pass through.\n */\nprototype.evaluate = function(pulse) {\n var params = this.marshall(pulse.stamp),\n out = this.transform(params, pulse);\n params.clear();\n return out;\n};\n\n/**\n * Process incoming pulses.\n * Subclasses should override this method to implement transforms.\n * @param {Parameters} _ - The operator parameter values.\n * @param {Pulse} pulse - The current dataflow pulse.\n * @return {Pulse} The output pulse (or StopPropagation). A falsy return\n * value (including undefined) will let the input pulse pass through.\n */\nprototype.transform = function() {};\n","export var transforms = {};\n\nexport function definition(type) {\n var t = transform(type);\n return t && t.Definition || null;\n}\n\nexport function transform(type) {\n type = type && type.toLowerCase();\n return transforms.hasOwnProperty(type) ? transforms[type] : null;\n}\n","// Utilities\nexport {default as UniqueList} from './src/util/UniqueList';\nexport {default as asyncCallback} from './src/util/asyncCallback';\n\n// Core Runtime\nexport {default as changeset, isChangeSet} from './src/ChangeSet';\nexport {default as Dataflow} from './src/dataflow/Dataflow';\nexport {default as EventStream} from './src/EventStream';\nexport {default as Parameters} from './src/Parameters';\nexport {default as Pulse} from './src/Pulse';\nexport {default as MultiPulse} from './src/MultiPulse';\nexport {default as Operator} from './src/Operator';\nexport {default as Transform} from './src/Transform';\nexport {derive, rederive, ingest, isTuple, replace, tupleid} from './src/Tuple';\n\n// Transform Registry\nexport {\n definition,\n transform,\n transforms\n} from './src/register';\n","export function multikey(f) {\n return function(x) {\n var n = f.length,\n i = 1,\n k = String(f[0](x));\n\n for (; i 1 ? this.dev / (this.valid-1) : undefined',\n req: ['mean'], idx: 1\n }),\n 'variancep': measure({\n name: 'variancep',\n set: 'this.valid > 1 ? this.dev / this.valid : undefined',\n req: ['variance'], idx: 2\n }),\n 'stdev': measure({\n name: 'stdev',\n set: 'this.valid > 1 ? Math.sqrt(this.dev / (this.valid-1)) : undefined',\n req: ['variance'], idx: 2\n }),\n 'stdevp': measure({\n name: 'stdevp',\n set: 'this.valid > 1 ? Math.sqrt(this.dev / this.valid) : undefined',\n req: ['variance'], idx: 2\n }),\n 'stderr': measure({\n name: 'stderr',\n set: 'this.valid > 1 ? Math.sqrt(this.dev / (this.valid * (this.valid-1))) : undefined',\n req: ['variance'], idx: 2\n }),\n 'distinct': measure({\n name: 'distinct',\n set: 'cell.data.distinct(this.get)',\n req: ['values'], idx: 3\n }),\n 'ci0': measure({\n name: 'ci0',\n set: 'cell.data.ci0(this.get)',\n req: ['values'], idx: 3\n }),\n 'ci1': measure({\n name: 'ci1',\n set: 'cell.data.ci1(this.get)',\n req: ['values'], idx: 3\n }),\n 'median': measure({\n name: 'median',\n set: 'cell.data.q2(this.get)',\n req: ['values'], idx: 3\n }),\n 'q1': measure({\n name: 'q1',\n set: 'cell.data.q1(this.get)',\n req: ['values'], idx: 3\n }),\n 'q3': measure({\n name: 'q3',\n set: 'cell.data.q3(this.get)',\n req: ['values'], idx: 3\n }),\n 'argmin': measure({\n name: 'argmin',\n init: 'this.argmin = undefined;',\n add: 'if (v < this.min) this.argmin = t;',\n rem: 'if (v <= this.min) this.argmin = undefined;',\n set: 'this.argmin || cell.data.argmin(this.get)',\n req: ['min'], str: ['values'], idx: 3\n }),\n 'argmax': measure({\n name: 'argmax',\n init: 'this.argmax = undefined;',\n add: 'if (v > this.max) this.argmax = t;',\n rem: 'if (v >= this.max) this.argmax = undefined;',\n set: 'this.argmax || cell.data.argmax(this.get)',\n req: ['max'], str: ['values'], idx: 3\n }),\n 'min': measure({\n name: 'min',\n init: 'this.min = undefined;',\n add: 'if (v < this.min || this.min === undefined) this.min = v;',\n rem: 'if (v <= this.min) this.min = NaN;',\n set: 'this.min = (isNaN(this.min) ? cell.data.min(this.get) : this.min)',\n str: ['values'], idx: 4\n }),\n 'max': measure({\n name: 'max',\n init: 'this.max = undefined;',\n add: 'if (v > this.max || this.max === undefined) this.max = v;',\n rem: 'if (v >= this.max) this.max = NaN;',\n set: 'this.max = (isNaN(this.max) ? cell.data.max(this.get) : this.max)',\n str: ['values'], idx: 4\n })\n};\n\nexport var ValidAggregateOps = Object.keys(AggregateOps);\n\nexport function createMeasure(op, name) {\n return AggregateOps[op](name);\n}\n\nfunction measure(base) {\n return function(out) {\n var m = extend({init:'', add:'', rem:'', idx:0}, base);\n m.out = out || base.name;\n return m;\n };\n}\n\nfunction compareIndex(a, b) {\n return a.idx - b.idx;\n}\n\nfunction resolve(agg, stream) {\n function collect(m, a) {\n function helper(r) { if (!m[r]) collect(m, m[r] = AggregateOps[r]()); }\n if (a.req) a.req.forEach(helper);\n if (stream && a.str) a.str.forEach(helper);\n return m;\n }\n var map = agg.reduce(\n collect,\n agg.reduce(function(m, a) {\n m[a.name] = a;\n return m;\n }, {})\n );\n var values = [], key;\n for (key in map) values.push(map[key]);\n return values.sort(compareIndex);\n}\n\nexport function compileMeasures(agg, field) {\n var get = field || identity,\n all = resolve(agg, true), // assume streaming removes may occur\n init = 'var cell = this.cell; this.valid = 0; this.missing = 0;',\n ctr = 'this.cell = cell; this.init();',\n add = 'if(v==null){++this.missing; return;} if(v!==v) return; ++this.valid;',\n rem = 'if(v==null){--this.missing; return;} if(v!==v) return; --this.valid;',\n set = 'var cell = this.cell;';\n\n all.forEach(function(a) {\n init += a.init;\n add += a.add;\n rem += a.rem;\n });\n agg.slice().sort(compareIndex).forEach(function(a) {\n set += 't[\\'' + a.out + '\\']=' + a.set + ';';\n });\n set += 'return t;';\n\n ctr = Function('cell', ctr);\n ctr.prototype.init = Function(init);\n ctr.prototype.add = Function('v', 't', add);\n ctr.prototype.rem = Function('v', 't', rem);\n ctr.prototype.set = Function('t', set);\n ctr.prototype.get = get;\n ctr.fields = agg.map(function(_) { return _.out; });\n return ctr;\n}\n","export default function(_) {\n // determine range\n var maxb = _.maxbins || 20,\n base = _.base || 10,\n logb = Math.log(base),\n div = _.divide || [5, 2],\n min = _.extent[0],\n max = _.extent[1],\n span = (max - min) || Math.abs(min) || 1,\n step, level, minstep, precision, v, i, n, eps;\n\n if (_.step) {\n // if step size is explicitly given, use that\n step = _.step;\n } else if (_.steps) {\n // if provided, limit choice to acceptable step sizes\n v = span / maxb;\n for (i=0, n=_.steps.length; i < n && _.steps[i] < v; ++i);\n step = _.steps[Math.max(0, i-1)];\n } else {\n // else use span to determine step size\n level = Math.ceil(Math.log(maxb) / logb);\n minstep = _.minstep || 0;\n step = Math.max(\n minstep,\n Math.pow(base, Math.round(Math.log(span) / logb) - level)\n );\n\n // increase step size if too many bins\n while (Math.ceil(span/step) > maxb) { step *= base; }\n\n // decrease step size if allowed\n for (i=0, n=div.length; i= minstep && span / v <= maxb) step = v;\n }\n }\n\n // update precision, min and max\n v = Math.log(step);\n precision = v >= 0 ? 0 : ~~(-v / logb) + 1;\n eps = Math.pow(base, -precision - 1);\n if (_.nice || _.nice === undefined) {\n v = Math.floor(min / step + eps) * step;\n min = min < v ? v - step : v;\n max = Math.ceil(max / step) * step;\n }\n\n return {\n start: min,\n stop: max === min ? min + step : max,\n step: step\n };\n}\n","export default function*(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","export var random = Math.random;\n\nexport function setRandom(r) {\n random = r;\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","export default function variance(values, valueof) {\n let count = 0;\n let delta;\n let mean = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n }\n if (count > 1) return sum / (count - 1);\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","import number from \"./number.js\";\n\nexport default function quantile(values, p, valueof = number) {\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","import numbers from './numbers';\nimport {random} from './random';\nimport {quantile, ascending} from 'd3-array';\n\nexport default function(array, samples, alpha, f) {\n if (!array.length) return [undefined, undefined];\n\n var values = Float64Array.from(numbers(array, f)),\n n = values.length,\n m = samples,\n a, i, j, mu;\n\n for (j=0, mu=Array(m); j 1);\n c = Math.sqrt(-2 * Math.log(rds) / rds); // Box-Muller transform\n next = mu + y * c * sigma;\n return mu + x * c * sigma;\n };\n\n dist.pdf = function(x) {\n var exp = Math.exp(Math.pow(x-mu, 2) / (-2 * Math.pow(sigma, 2)));\n return (1 / (sigma * Math.sqrt(2*Math.PI))) * exp;\n };\n\n // Approximation from West (2009)\n // Better Approximations to Cumulative Normal Functions\n dist.cdf = function(x) {\n var cd,\n z = (x - mu) / sigma,\n Z = Math.abs(z);\n if (Z > 37) {\n cd = 0;\n } else {\n var sum, exp = Math.exp(-Z*Z/2);\n if (Z < 7.07106781186547) {\n sum = 3.52624965998911e-02 * Z + 0.700383064443688;\n sum = sum * Z + 6.37396220353165;\n sum = sum * Z + 33.912866078383;\n sum = sum * Z + 112.079291497871;\n sum = sum * Z + 221.213596169931;\n sum = sum * Z + 220.206867912376;\n cd = exp * sum;\n sum = 8.83883476483184e-02 * Z + 1.75566716318264;\n sum = sum * Z + 16.064177579207;\n sum = sum * Z + 86.7807322029461;\n sum = sum * Z + 296.564248779674;\n sum = sum * Z + 637.333633378831;\n sum = sum * Z + 793.826512519948;\n sum = sum * Z + 440.413735824752;\n cd = cd / sum;\n } else {\n sum = Z + 0.65;\n sum = Z + 4 / sum;\n sum = Z + 3 / sum;\n sum = Z + 2 / sum;\n sum = Z + 1 / sum;\n cd = exp / sum / 2.506628274631;\n }\n }\n return z > 0 ? 1 - cd : cd;\n };\n\n // Approximation of Probit function using inverse error function.\n dist.icdf = function(p) {\n if (p <= 0 || p >= 1) return NaN;\n var x = 2*p - 1,\n v = (8 * (Math.PI - 3)) / (3 * Math.PI * (4-Math.PI)),\n a = (2 / (Math.PI*v)) + (Math.log(1 - Math.pow(x,2)) / 2),\n b = Math.log(1 - (x*x)) / v,\n s = (x > 0 ? 1 : -1) * Math.sqrt(Math.sqrt((a*a) - b) - a);\n return mu + sigma * Math.SQRT2 * s;\n };\n\n return dist.mean(mean).stdev(stdev);\n}\n","import gaussian from './normal';\nimport quartiles from './quartiles';\nimport {random} from './random';\nimport {variance} from 'd3-array';\n\n// TODO: support for additional kernels?\nexport default function(support, bandwidth) {\n var kernel = gaussian(),\n dist = {},\n n = 0;\n\n dist.data = function(_) {\n if (arguments.length) {\n support = _;\n n = _ ? _.length : 0;\n return dist.bandwidth(bandwidth);\n } else {\n return support;\n }\n };\n\n dist.bandwidth = function(_) {\n if (!arguments.length) return bandwidth;\n bandwidth = _;\n if (!bandwidth && support) bandwidth = estimateBandwidth(support);\n return dist;\n };\n\n dist.sample = function() {\n return support[~~(random() * n)] + bandwidth * kernel.sample();\n };\n\n dist.pdf = function(x) {\n for (var y=0, i=0; i= a && x <= b) ? 1 / d : 0;\n };\n\n dist.cdf = function(x) {\n return x < a ? 0 : x > b ? 1 : (x - a) / d;\n };\n\n dist.icdf = function(p) {\n return (p >= 0 && p <= 1) ? a + p * d : NaN;\n };\n\n return dist.min(min).max(max);\n}\n","// Ordinary Least Squares\nexport default function(uX, uY, uXY, uX2) {\n const delta = uX2 - uX * uX,\n slope = Math.abs(delta) < 1e-24 ? 0 : (uXY - uX * uY) / delta,\n intercept = uY - slope * uX;\n\n return [intercept, slope];\n}\n","// subdivide up to accuracy of 0.1 degrees\nconst MIN_RADIANS = 0.1 * Math.PI / 180;\n\n// Adaptively sample an interpolated function over a domain extent\nexport default function(f, extent, minSteps, maxSteps) {\n minSteps = minSteps || 25;\n maxSteps = Math.max(minSteps, maxSteps || 200);\n\n const point = x => [x, f(x)],\n minX = extent[0],\n maxX = extent[1],\n span = maxX - minX,\n stop = span / maxSteps,\n prev = [point(minX)],\n next = [];\n\n if (minSteps === maxSteps) {\n // no adaptation, sample uniform grid directly and return\n for (let i = 1; i < maxSteps; ++i) {\n prev.push(point(minX + (i / minSteps) * span));\n }\n prev.push(point(maxX));\n return prev;\n } else {\n // sample minimum points on uniform grid\n // then move on to perform adaptive refinement\n next.push(point(maxX));\n for (let i = minSteps; --i > 0;) {\n next.push(point(minX + (i / minSteps) * span));\n }\n }\n\n let p0 = prev[0],\n p1 = next[next.length - 1];\n\n while (p1) {\n const pm = point((p0[0] + p1[0]) / 2);\n\n if (pm[0] - p0[0] >= stop && angleDelta(p0, pm, p1) > MIN_RADIANS) {\n next.push(pm);\n } else {\n p0 = p1;\n prev.push(p1);\n next.pop();\n }\n p1 = next[next.length - 1];\n }\n\n return prev;\n}\n\nfunction angleDelta(p, q, r) {\n const a0 = Math.atan2(r[1] - p[1], r[0] - p[0]),\n a1 = Math.atan2(q[1] - p[1], q[0] - p[0]);\n return Math.abs(a0 - a1);\n}\n","import {tupleid} from 'vega-dataflow';\nimport {bootstrapCI, quartiles} from 'vega-statistics';\nimport {extentIndex, field} from 'vega-util';\n\nexport default function TupleStore(key) {\n this._key = key ? field(key) : tupleid;\n this.reset();\n}\n\nvar prototype = TupleStore.prototype;\n\nprototype.reset = function() {\n this._add = [];\n this._rem = [];\n this._ext = null;\n this._get = null;\n this._q = null;\n};\n\nprototype.add = function(v) {\n this._add.push(v);\n};\n\nprototype.rem = function(v) {\n this._rem.push(v);\n};\n\nprototype.values = function() {\n this._get = null;\n if (this._rem.length === 0) return this._add;\n\n var a = this._add,\n r = this._rem,\n k = this._key,\n n = a.length,\n m = r.length,\n x = Array(n - m),\n map = {}, i, j, v;\n\n // use unique key field to clear removed values\n for (i=0; i= 0) {\n s = get(v[n]) + '';\n if (!map.hasOwnProperty(s)) {\n map[s] = 1;\n ++count;\n }\n }\n\n return count;\n};\n\nprototype.extent = function(get) {\n if (this._get !== get || !this._ext) {\n var v = this.values(),\n i = extentIndex(v, get);\n this._ext = [v[i[0]], v[i[1]]];\n this._get = get;\n }\n return this._ext;\n};\n\nprototype.argmin = function(get) {\n return this.extent(get)[0] || {};\n};\n\nprototype.argmax = function(get) {\n return this.extent(get)[1] || {};\n};\n\nprototype.min = function(get) {\n var m = this.extent(get)[0];\n return m != null ? get(m) : undefined;\n};\n\nprototype.max = function(get) {\n var m = this.extent(get)[1];\n return m != null ? get(m) : undefined;\n};\n\nprototype.quartile = function(get) {\n if (this._get !== get || !this._q) {\n this._q = quartiles(this.values(), get);\n this._get = get;\n }\n return this._q;\n};\n\nprototype.q1 = function(get) {\n return this.quartile(get)[0];\n};\n\nprototype.q2 = function(get) {\n return this.quartile(get)[1];\n};\n\nprototype.q3 = function(get) {\n return this.quartile(get)[2];\n};\n\nprototype.ci = function(get) {\n if (this._get !== get || !this._ci) {\n this._ci = bootstrapCI(this.values(), 1000, 0.05, get);\n this._get = get;\n }\n return this._ci;\n};\n\nprototype.ci0 = function(get) {\n return this.ci(get)[0];\n};\n\nprototype.ci1 = function(get) {\n return this.ci(get)[1];\n};\n","import {groupkey} from './util/AggregateKeys';\nimport {createMeasure, compileMeasures, measureName, ValidAggregateOps} from './util/AggregateOps';\nimport TupleStore from './util/TupleStore';\nimport {ingest, replace, Transform} from 'vega-dataflow';\nimport {accessorFields, accessorName, array, error, inherits} from 'vega-util';\n\n/**\n * Group-by aggregation operator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {Array} [params.fields] - An array of accessors to aggregate.\n * @param {Array} [params.ops] - An array of strings indicating aggregation operations.\n * @param {Array} [params.as] - An array of output field names for aggregated values.\n * @param {boolean} [params.cross=false] - A flag indicating that the full\n * cross-product of groupby values should be generated, including empty cells.\n * If true, the drop parameter is ignored and empty cells are retained.\n * @param {boolean} [params.drop=true] - A flag indicating if empty cells should be removed.\n */\nexport default function Aggregate(params) {\n Transform.call(this, null, params);\n\n this._adds = []; // array of added output tuples\n this._mods = []; // array of modified output tuples\n this._alen = 0; // number of active added tuples\n this._mlen = 0; // number of active modified tuples\n this._drop = true; // should empty aggregation cells be removed\n this._cross = false; // produce full cross-product of group-by values\n\n this._dims = []; // group-by dimension accessors\n this._dnames = []; // group-by dimension names\n\n this._measures = []; // collection of aggregation monoids\n this._countOnly = false; // flag indicating only count aggregation\n this._counts = null; // collection of count fields\n this._prev = null; // previous aggregation cells\n\n this._inputs = null; // array of dependent input tuple field names\n this._outputs = null; // array of output tuple field names\n}\n\nAggregate.Definition = {\n \"type\": \"Aggregate\",\n \"metadata\": {\"generates\": true, \"changes\": true},\n \"params\": [\n { \"name\": \"groupby\", \"type\": \"field\", \"array\": true },\n { \"name\": \"ops\", \"type\": \"enum\", \"array\": true, \"values\": ValidAggregateOps },\n { \"name\": \"fields\", \"type\": \"field\", \"null\": true, \"array\": true },\n { \"name\": \"as\", \"type\": \"string\", \"null\": true, \"array\": true },\n { \"name\": \"drop\", \"type\": \"boolean\", \"default\": true },\n { \"name\": \"cross\", \"type\": \"boolean\", \"default\": false },\n { \"name\": \"key\", \"type\": \"field\" }\n ]\n};\n\nvar prototype = inherits(Aggregate, Transform);\n\nprototype.transform = function(_, pulse) {\n var aggr = this,\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n mod;\n\n this.stamp = out.stamp;\n\n if (this.value && ((mod = _.modified()) || pulse.modified(this._inputs))) {\n this._prev = this.value;\n this.value = mod ? this.init(_) : {};\n pulse.visit(pulse.SOURCE, function(t) { aggr.add(t); });\n } else {\n this.value = this.value || this.init(_);\n pulse.visit(pulse.REM, function(t) { aggr.rem(t); });\n pulse.visit(pulse.ADD, function(t) { aggr.add(t); });\n }\n\n // Indicate output fields and return aggregate tuples.\n out.modifies(this._outputs);\n\n // Should empty cells be dropped?\n aggr._drop = _.drop !== false;\n\n // If domain cross-product requested, generate empty cells as needed\n // and ensure that empty cells are not dropped\n if (_.cross && aggr._dims.length > 1) {\n aggr._drop = false;\n this.cross();\n }\n\n return aggr.changes(out);\n};\n\nprototype.cross = function() {\n var aggr = this,\n curr = aggr.value,\n dims = aggr._dnames,\n vals = dims.map(function() { return {}; }),\n n = dims.length;\n\n // collect all group-by domain values\n function collect(cells) {\n var key, i, t, v;\n for (key in cells) {\n t = cells[key].tuple;\n for (i=0; i} params.fields - The fields to compare.\n * @param {Array} [params.orders] - The sort orders.\n * Each entry should be one of \"ascending\" (default) or \"descending\".\n */\nexport default function Compare(params) {\n Operator.call(this, null, update, params);\n}\n\ninherits(Compare, Operator);\n\nfunction update(_) {\n return (this.value && !_.modified())\n ? this.value\n : compare(_.fields, _.orders);\n}\n","import {ingest, Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Count regexp-defined pattern occurrences in a text field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - An accessor for the text field.\n * @param {string} [params.pattern] - RegExp string defining the text pattern.\n * @param {string} [params.case] - One of 'lower', 'upper' or null (mixed) case.\n * @param {string} [params.stopwords] - RegExp string of words to ignore.\n */\nexport default function CountPattern(params) {\n Transform.call(this, null, params);\n}\n\nCountPattern.Definition = {\n \"type\": \"CountPattern\",\n \"metadata\": {\"generates\": true, \"changes\": true},\n \"params\": [\n { \"name\": \"field\", \"type\": \"field\", \"required\": true },\n { \"name\": \"case\", \"type\": \"enum\", \"values\": [\"upper\", \"lower\", \"mixed\"], \"default\": \"mixed\" },\n { \"name\": \"pattern\", \"type\": \"string\", \"default\": \"[\\\\w\\\"]+\" },\n { \"name\": \"stopwords\", \"type\": \"string\", \"default\": \"\" },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": 2, \"default\": [\"text\", \"count\"] }\n ]\n};\n\nfunction tokenize(text, tcase, match) {\n switch (tcase) {\n case 'upper': text = text.toUpperCase(); break;\n case 'lower': text = text.toLowerCase(); break;\n }\n return text.match(match);\n}\n\nvar prototype = inherits(CountPattern, Transform);\n\nprototype.transform = function(_, pulse) {\n function process(update) {\n return function(tuple) {\n var tokens = tokenize(get(tuple), _.case, match) || [], t;\n for (var i=0, n=tokens.length; i} [params.as] - The names of the output fields.\n */\nexport default function Cross(params) {\n Transform.call(this, null, params);\n}\n\nCross.Definition = {\n \"type\": \"Cross\",\n \"metadata\": {\"generates\": true},\n \"params\": [\n { \"name\": \"filter\", \"type\": \"expr\" },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": 2, \"default\": [\"a\", \"b\"] }\n ]\n};\n\nvar prototype = inherits(Cross, Transform);\n\nprototype.transform = function(_, pulse) {\n var out = pulse.fork(pulse.NO_SOURCE),\n data = this.value,\n as = _.as || ['a', 'b'],\n a = as[0], b = as[1],\n reset = !data\n || pulse.changed(pulse.ADD_REM)\n || _.modified('as')\n || _.modified('filter');\n\n if (reset) {\n if (data) out.rem = data;\n data = pulse.materialize(pulse.SOURCE).source;\n out.add = this.value = cross(data, a, b, _.filter || truthy);\n } else {\n out.mod = data;\n }\n\n out.source = this.value;\n return out.modifies(as);\n};\n\nfunction cross(input, a, b, filter) {\n var data = [],\n t = {},\n n = input.length,\n i = 0,\n j, left;\n\n for (; i} - A method for requesting\n * source data. Used for distributions (such as KDE) that\n * require sample data points. This method will only be\n * invoked if the 'from' parameter for a target data source\n * is not provided. Typically this method returns backing\n * source data for a Pulse object.\n * @return {object} - The output distribution object.\n */\nexport default function parse(def, data) {\n var func = def[FUNCTION];\n if (!Distributions.hasOwnProperty(func)) {\n error('Unknown distribution function: ' + func);\n }\n\n var d = Distributions[func]();\n\n for (var name in def) {\n // if data field, extract values\n if (name === FIELD) {\n d.data((def.from || data()).map(def[name]));\n }\n\n // if distribution mixture, recurse to parse each definition\n else if (name === DISTRIBUTIONS) {\n d[name](def[name].map(function(_) { return parse(_, data); }));\n }\n\n // otherwise, simply set the parameter\n else if (typeof d[name] === FUNCTION) {\n d[name](def[name]);\n }\n }\n\n return d;\n}\n","import parseDist from './util/Distributions';\nimport {ingest, Transform} from 'vega-dataflow';\nimport {sampleCurve} from 'vega-statistics';\nimport {error, extent, inherits} from 'vega-util';\n\n/**\n * Grid sample points for a probability density. Given a distribution and\n * a sampling extent, will generate points suitable for plotting either\n * PDF (probability density function) or CDF (cumulative distribution\n * function) curves.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.distribution - The probability distribution. This\n * is an object parameter dependent on the distribution type.\n * @param {string} [params.method='pdf'] - The distribution method to sample.\n * One of 'pdf' or 'cdf'.\n * @param {Array} [params.extent] - The [min, max] extent over which\n * to sample the distribution. This argument is required in most cases, but\n * can be omitted if the distribution (e.g., 'kde') supports a 'data' method\n * that returns numerical sample points from which the extent can be deduced.\n * @param {number} [params.minsteps=25] - The minimum number of curve samples\n * for plotting the density.\n * @param {number} [params.maxsteps=200] - The maximum number of curve samples\n * for plotting the density.\n * @param {number} [params.steps] - The exact number of curve samples for\n * plotting the density. If specified, overrides both minsteps and maxsteps\n * to set an exact number of uniform samples. Useful in conjunction with\n * a fixed extent to ensure consistent sample points for stacked densities.\n */\nexport default function Density(params) {\n Transform.call(this, null, params);\n}\n\nvar distributions = [\n {\n \"key\": {\"function\": \"normal\"},\n \"params\": [\n { \"name\": \"mean\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"stdev\", \"type\": \"number\", \"default\": 1 }\n ]\n },\n {\n \"key\": {\"function\": \"uniform\"},\n \"params\": [\n { \"name\": \"min\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"max\", \"type\": \"number\", \"default\": 1 }\n ]\n },\n {\n \"key\": {\"function\": \"kde\"},\n \"params\": [\n { \"name\": \"field\", \"type\": \"field\", \"required\": true },\n { \"name\": \"from\", \"type\": \"data\" },\n { \"name\": \"bandwidth\", \"type\": \"number\", \"default\": 0 }\n ]\n }\n];\n\nvar mixture = {\n \"key\": {\"function\": \"mixture\"},\n \"params\": [\n { \"name\": \"distributions\", \"type\": \"param\", \"array\": true,\n \"params\": distributions },\n { \"name\": \"weights\", \"type\": \"number\", \"array\": true }\n ]\n};\n\nDensity.Definition = {\n \"type\": \"Density\",\n \"metadata\": {\"generates\": true},\n \"params\": [\n { \"name\": \"extent\", \"type\": \"number\", \"array\": true, \"length\": 2 },\n { \"name\": \"steps\", \"type\": \"number\" },\n { \"name\": \"minsteps\", \"type\": \"number\", \"default\": 25 },\n { \"name\": \"maxsteps\", \"type\": \"number\", \"default\": 200 },\n { \"name\": \"method\", \"type\": \"string\", \"default\": \"pdf\",\n \"values\": [\"pdf\", \"cdf\"] },\n { \"name\": \"distribution\", \"type\": \"param\",\n \"params\": distributions.concat(mixture) },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true,\n \"default\": [\"value\", \"density\"] }\n ]\n};\n\nvar prototype = inherits(Density, Transform);\n\nprototype.transform = function(_, pulse) {\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n\n if (!this.value || pulse.changed() || _.modified()) {\n var dist = parseDist(_.distribution, source(pulse)),\n minsteps = _.steps || _.minsteps || 25,\n maxsteps = _.steps || _.maxsteps || 200,\n method = _.method || 'pdf';\n\n if (method !== 'pdf' && method !== 'cdf') {\n error('Invalid density method: ' + method);\n }\n if (!_.extent && !dist.data) {\n error('Missing density extent parameter.');\n }\n method = dist[method];\n\n var as = _.as || ['value', 'density'],\n domain = _.extent || extent(dist.data()),\n values = sampleCurve(method, domain, minsteps, maxsteps).map(v => {\n var tuple = {};\n tuple[as[0]] = v[0];\n tuple[as[1]] = v[1];\n return ingest(tuple);\n });\n\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n\n return out;\n};\n\nfunction source(pulse) {\n return function() { return pulse.materialize(pulse.SOURCE).source; };\n}\n","import {Operator} from 'vega-dataflow';\nimport {accessor, accessorFields, accessorName, inherits} from 'vega-util';\n\n/**\n * Wraps an expression function with access to external parameters.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function} params.expr - The expression function. The\n * function should accept both a datum and a parameter object.\n * This operator's value will be a new function that wraps the\n * expression function with access to this operator's parameters.\n */\nexport default function Expression(params) {\n Operator.call(this, null, update, params);\n this.modified(true);\n}\n\ninherits(Expression, Operator);\n\nfunction update(_) {\n var expr = _.expr;\n return this.value && !_.modified('expr')\n ? this.value\n : accessor(\n datum => expr(datum, _),\n accessorFields(expr),\n accessorName(expr)\n );\n}\n","import {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Computes extents (min/max) for a data field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The field over which to compute extends.\n */\nexport default function Extent(params) {\n Transform.call(this, [undefined, undefined], params);\n}\n\nExtent.Definition = {\n \"type\": \"Extent\",\n \"metadata\": {},\n \"params\": [\n { \"name\": \"field\", \"type\": \"field\", \"required\": true }\n ]\n};\n\nvar prototype = inherits(Extent, Transform);\n\nprototype.transform = function(_, pulse) {\n var extent = this.value,\n field = _.field,\n min = extent[0],\n max = extent[1],\n mod;\n\n mod = pulse.changed()\n || pulse.modified(field.fields)\n || _.modified('field');\n\n if (mod || min == null) {\n min = +Infinity;\n max = -Infinity;\n }\n\n pulse.visit(mod ? pulse.SOURCE : pulse.ADD, function(t) {\n var v = field(t);\n if (v != null) {\n // coerce to number\n v = +v;\n // NaNs will fail all comparisons!\n if (v < min) min = v;\n if (v > max) max = v;\n }\n });\n\n if (!isFinite(min) || !isFinite(max)) {\n min = max = undefined;\n }\n this.value = [min, max];\n};\n","import {Operator} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Provides a bridge between a parent transform and a target subflow that\n * consumes only a subset of the tuples that pass through the parent.\n * @constructor\n * @param {Pulse} pulse - A pulse to use as the value of this operator.\n * @param {Transform} parent - The parent transform (typically a Facet instance).\n * @param {Transform} target - A transform that receives the subflow of tuples.\n */\nexport default function Subflow(pulse, parent) {\n Operator.call(this, pulse);\n this.parent = parent;\n}\n\nvar prototype = inherits(Subflow, Operator);\n\nprototype.connect = function(target) {\n this.targets().add(target);\n return (target.source = this);\n};\n\n/**\n * Add an 'add' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being added.\n */\nprototype.add = function(t) {\n this.value.add.push(t);\n};\n\n/**\n * Add a 'rem' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being removed.\n */\nprototype.rem = function(t) {\n this.value.rem.push(t);\n};\n\n/**\n * Add a 'mod' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being modified.\n */\nprototype.mod = function(t) {\n this.value.mod.push(t);\n};\n\n/**\n * Re-initialize this operator's pulse value.\n * @param {Pulse} pulse - The pulse to copy from.\n * @see Pulse.init\n */\nprototype.init = function(pulse) {\n this.value.init(pulse, pulse.NO_SOURCE);\n};\n\n/**\n * Evaluate this operator. This method overrides the\n * default behavior to simply return the contained pulse value.\n * @return {Pulse}\n */\nprototype.evaluate = function() {\n // assert: this.value.stamp === pulse.stamp\n return this.value;\n};\n","import Subflow from './Subflow';\nimport {Transform, tupleid} from 'vega-dataflow';\nimport {fastmap, inherits} from 'vega-util';\n\n/**\n * Facets a dataflow into a set of subflows based on a key.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Dataflow, string): Operator} params.subflow - A function\n * that generates a subflow of operators and returns its root operator.\n * @param {function(object): *} params.key - The key field to facet by.\n */\nexport default function Facet(params) {\n Transform.call(this, {}, params);\n this._keys = fastmap(); // cache previously calculated key values\n\n // keep track of active subflows, use as targets array for listeners\n // this allows us to limit propagation to only updated subflows\n var a = this._targets = [];\n a.active = 0;\n a.forEach = function(f) {\n for (var i=0, n=a.active; i df.cleanThreshold) df.runAfter(cache.clean);\n return pulse;\n};\n","import {Operator} from 'vega-dataflow';\nimport {array, field, inherits, isArray} from 'vega-util';\n\n/**\n * Generates one or more field accessor functions.\n * If the 'name' parameter is an array, an array of field accessors\n * will be created and the 'as' parameter will be ignored.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.name - The field name(s) to access.\n * @param {string} params.as - The accessor function name.\n */\nexport default function Field(params) {\n Operator.call(this, null, update, params);\n}\n\ninherits(Field, Operator);\n\nfunction update(_) {\n return (this.value && !_.modified()) ? this.value\n : isArray(_.name) ? array(_.name).map(function(f) { return field(f); })\n : field(_.name, _.as);\n}\n","import {Transform, tupleid} from 'vega-dataflow';\nimport {fastmap, inherits} from 'vega-util';\n\n/**\n * Filters data tuples according to a predicate function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.expr - The predicate expression function\n * that determines a tuple's filter status. Truthy values pass the filter.\n */\nexport default function Filter(params) {\n Transform.call(this, fastmap(), params);\n}\n\nFilter.Definition = {\n \"type\": \"Filter\",\n \"metadata\": {\"changes\": true},\n \"params\": [\n { \"name\": \"expr\", \"type\": \"expr\", \"required\": true }\n ]\n};\n\nvar prototype = inherits(Filter, Transform);\n\nprototype.transform = function(_, pulse) {\n var df = pulse.dataflow,\n cache = this.value, // cache ids of filtered tuples\n output = pulse.fork(),\n add = output.add,\n rem = output.rem,\n mod = output.mod,\n test = _.expr,\n isMod = true;\n\n pulse.visit(pulse.REM, function(t) {\n var id = tupleid(t);\n if (!cache.has(id)) rem.push(t);\n else cache.delete(id);\n });\n\n pulse.visit(pulse.ADD, function(t) {\n if (test(t, _)) add.push(t);\n else cache.set(tupleid(t), 1);\n });\n\n function revisit(t) {\n var id = tupleid(t),\n b = test(t, _),\n s = cache.get(id);\n if (b && s) {\n cache.delete(id);\n add.push(t);\n } else if (!b && !s) {\n cache.set(id, 1);\n rem.push(t);\n } else if (isMod && b && !s) {\n mod.push(t);\n }\n }\n\n pulse.visit(pulse.MOD, revisit);\n\n if (_.modified()) {\n isMod = false;\n pulse.visit(pulse.REFLOW, revisit);\n }\n\n if (cache.empty > df.cleanThreshold) df.runAfter(cache.clean);\n return output;\n};\n","import {accessorName} from 'vega-util';\n\n// use either provided alias or accessor field name\nexport function fieldNames(fields, as) {\n if (!fields) return null;\n return fields.map(function(f, i) {\n return as[i] || accessorName(f);\n });\n}\n","import {fieldNames} from './util/util';\nimport {derive, Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Flattens array-typed field values into new data objects.\n * If multiple fields are specified, they are treated as parallel arrays,\n * with output values included for each matching index (or null if missing).\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - An array of field\n * accessors for the tuple fields that should be flattened.\n * @param {Array} [params.as] - Output field names for flattened\n * array fields. Any unspecified fields will use the field name provided\n * by the fields accessors.\n */\nexport default function Flatten(params) {\n Transform.call(this, [], params);\n}\n\nFlatten.Definition = {\n \"type\": \"Flatten\",\n \"metadata\": {\"generates\": true},\n \"params\": [\n { \"name\": \"fields\", \"type\": \"field\", \"array\": true, \"required\": true },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true }\n ]\n};\n\nvar prototype = inherits(Flatten, Transform);\n\nprototype.transform = function(_, pulse) {\n var out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n as = fieldNames(fields, _.as || []),\n m = as.length;\n\n // remove any previous results\n out.rem = this.value;\n\n // generate flattened tuples\n pulse.visit(pulse.SOURCE, function(t) {\n var arrays = fields.map(function(f) { return f(t); }),\n maxlen = arrays.reduce(function(l, a) { return Math.max(l, a.length); }, 0),\n i = 0, j, d, v;\n\n for (; i} [params.as] - Output field names for folded key\n * and value fields, defaults to ['key', 'value'].\n */\nexport default function Fold(params) {\n Transform.call(this, [], params);\n}\n\nFold.Definition = {\n \"type\": \"Fold\",\n \"metadata\": {\"generates\": true},\n \"params\": [\n { \"name\": \"fields\", \"type\": \"field\", \"array\": true, \"required\": true },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": 2, \"default\": [\"key\", \"value\"] }\n ]\n};\n\nvar prototype = inherits(Fold, Transform);\n\nprototype.transform = function(_, pulse) {\n var out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n fnames = fields.map(accessorName),\n as = _.as || ['key', 'value'],\n k = as[0],\n v = as[1],\n n = fields.length;\n\n out.rem = this.value;\n\n pulse.visit(pulse.SOURCE, function(t) {\n for (var i=0, d; i 0) {\n // need more tuples, generate and add\n for (add=[]; --num >= 0;) {\n add.push(t = ingest(gen(_)));\n data.push(t);\n }\n out.add = out.add.length\n ? out.materialize(out.ADD).add.concat(add)\n : add;\n } else {\n // need fewer tuples, remove\n rem = data.slice(0, -num);\n out.rem = out.rem.length\n ? out.materialize(out.REM).rem.concat(rem)\n : rem;\n data = data.slice(-num);\n }\n\n out.source = this.value = data;\n return out;\n};\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","export default function(values, valueof) {\n let min;\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n return [min, max];\n}\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","import number from \"./number.js\";\n\nexport default function quantile(values, p, valueof = number) {\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function mean(values, valueof) {\n let count = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n }\n if (count) return sum / count;\n}\n","import ascending from \"./ascending.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = array.length - 1, compare = ascending) {\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(array, k, newLeft, newRight, compare);\n }\n\n const t = array[k];\n let i = left;\n let j = right;\n\n swap(array, left, k);\n if (compare(array[right], t) > 0) swap(array, left, right);\n\n while (i < j) {\n swap(array, i, j), ++i, --j;\n while (compare(array[i], t) < 0) ++i;\n while (compare(array[j], t) > 0) --j;\n }\n\n if (compare(array[left], t) === 0) swap(array, left, j);\n else ++j, swap(array, j, right);\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n return array;\n}\n\nfunction swap(array, i, j) {\n const t = array[i];\n array[i] = array[j];\n array[j] = t;\n}\n","import quantile from \"./quantile.js\";\nimport quickselect from \"./quickselect.js\";\n\nfunction* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n\nexport default function(values, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!values.length) return;\n const n = values.length;\n const i = n >> 1;\n quickselect(values, i - 1, 0);\n if ((n & 1) === 0) quickselect(values, i, i);\n return quantile(values, 0.5);\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","import {ingest, Transform} from 'vega-dataflow';\nimport {accessorName, error, inherits} from 'vega-util';\nimport {mean, min, max, median} from 'd3-array';\n\nvar Methods = {\n value: 'value',\n median: median,\n mean: mean,\n min: min,\n max: max\n};\n\nvar Empty = [];\n\n/**\n * Impute missing values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to impute.\n * @param {Array} [params.groupby] - An array of\n * accessors to determine series within which to perform imputation.\n * @param {function(object): *} params.key - An accessor for a key value.\n * Each key value should be unique within a group. New tuples will be\n * imputed for any key values that are not found within a group.\n * @param {Array<*>} [params.keyvals] - Optional array of required key\n * values. New tuples will be imputed for any key values that are not\n * found within a group. In addition, these values will be automatically\n * augmented with the key values observed in the input data.\n * @param {string} [method='value'] - The imputation method to use. One of\n * 'value', 'mean', 'median', 'max', 'min'.\n * @param {*} [value=0] - The constant value to use for imputation\n * when using method 'value'.\n */\nexport default function Impute(params) {\n Transform.call(this, [], params);\n}\n\nImpute.Definition = {\n \"type\": \"Impute\",\n \"metadata\": {\"changes\": true},\n \"params\": [\n { \"name\": \"field\", \"type\": \"field\", \"required\": true },\n { \"name\": \"key\", \"type\": \"field\", \"required\": true },\n { \"name\": \"keyvals\", \"array\": true },\n { \"name\": \"groupby\", \"type\": \"field\", \"array\": true },\n { \"name\": \"method\", \"type\": \"enum\", \"default\": \"value\",\n \"values\": [\"value\", \"mean\", \"median\", \"max\", \"min\"] },\n { \"name\": \"value\", \"default\": 0 }\n ]\n};\n\nvar prototype = inherits(Impute, Transform);\n\nfunction getValue(_) {\n var m = _.method || Methods.value, v;\n\n if (Methods[m] == null) {\n error('Unrecognized imputation method: ' + m);\n } else if (m === Methods.value) {\n v = _.value !== undefined ? _.value : 0;\n return function() { return v; };\n } else {\n return Methods[m];\n }\n}\n\nfunction getField(_) {\n var f = _.field;\n return function(t) { return t ? f(t) : NaN; };\n}\n\nprototype.transform = function(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n impute = getValue(_),\n field = getField(_),\n fName = accessorName(_.field),\n kName = accessorName(_.key),\n gNames = (_.groupby || []).map(accessorName),\n groups = partition(pulse.source, _.groupby, _.key, _.keyvals),\n curr = [],\n prev = this.value,\n m = groups.domain.length,\n group, value, gVals, kVal, g, i, j, l, n, t;\n\n for (g=0, l=groups.length; g} [params.groupby] - An array of accessors\n * to groupby.\n * @param {function(object): *} params.field - An accessor for the data field\n * to estimate.\n * @param {number} [params.bandwidth=0] - The KDE kernal bandwidth.\n * If zero of unspecified, the bandwidth is automatically determined.\n * @param {string} [params.cumulative=false] - A boolean flag indicating if a\n * density (false) or cumulative distribution (true) should be generated.\n * @param {Array} [params.extent] - The domain extent over which to\n * plot the density. If unspecified, the [min, max] data extent is used.\n * @param {number} [params.minsteps=25] - The minimum number of curve samples\n * for plotting the density.\n * @param {number} [params.maxsteps=200] - The maximum number of curve samples\n * for plotting the density.\n * @param {number} [params.steps] - The exact number of curve samples for\n * plotting the density. If specified, overrides both minsteps and maxsteps\n * to set an exact number of uniform samples. Useful in conjunction with\n * a fixed extent to ensure consistent sample points for stacked densities.\n */\nexport default function KDE(params) {\n Transform.call(this, null, params);\n}\n\nKDE.Definition = {\n \"type\": \"KDE\",\n \"metadata\": {\"generates\": true},\n \"params\": [\n { \"name\": \"groupby\", \"type\": \"field\", \"array\": true },\n { \"name\": \"field\", \"type\": \"field\", \"required\": true },\n { \"name\": \"cumulative\", \"type\": \"boolean\", \"default\": false },\n { \"name\": \"counts\", \"type\": \"boolean\", \"default\": false },\n { \"name\": \"bandwidth\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"extent\", \"type\": \"number\", \"array\": true, \"length\": 2 },\n { \"name\": \"steps\", \"type\": \"number\" },\n { \"name\": \"minsteps\", \"type\": \"number\", \"default\": 25 },\n { \"name\": \"maxsteps\", \"type\": \"number\", \"default\": 200 },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"default\": [\"value\", \"density\"] }\n ]\n};\n\nvar prototype = inherits(KDE, Transform);\n\nprototype.transform = function(_, pulse) {\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n\n if (!this.value || pulse.changed() || _.modified()) {\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition(source, _.groupby, _.field),\n names = (_.groupby || []).map(accessorName),\n bandwidth = _.bandwidth,\n method = _.cumulative ? 'cdf' : 'pdf',\n minsteps = _.steps || _.minsteps || 25,\n maxsteps = _.steps || _.maxsteps || 200,\n as = _.as || ['value', 'density'],\n values = [];\n\n if (method !== 'pdf' && method !== 'cdf') {\n error('Invalid density method: ' + method);\n }\n\n groups.forEach(g => {\n const density = randomKDE(g, bandwidth)[method],\n scale = _.counts ? g.length : 1,\n domain = _.extent || extent(g);\n\n sampleCurve(density, domain, minsteps, maxsteps).forEach(v => {\n const t = {};\n for (let i=0; i} params.fields - The field name(s) for the key function.\n * @param {boolean} params.flat - A boolean flag indicating if the field names\n * should be treated as flat property names, side-stepping nested field\n * lookups normally indicated by dot or bracket notation.\n */\nexport default function Key(params) {\n Operator.call(this, null, update, params);\n}\n\ninherits(Key, Operator);\n\nfunction update(_) {\n return (this.value && !_.modified()) ? this.value : key(_.fields, _.flat);\n}\n","import {ingest, Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Load and parse data from an external source. Marshalls parameter\n * values and then invokes the Dataflow request method.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.url - The URL to load from.\n * @param {object} params.format - The data format options.\n */\nexport default function Load(params) {\n Transform.call(this, [], params);\n}\n\nvar prototype = inherits(Load, Transform);\n\nprototype.transform = function(_, pulse) {\n const df = pulse.dataflow;\n\n if (_.values) {\n // parse and ingest values\n return output(this, pulse, df.parse(_.values, _.format));\n } else {\n // return promise for async loading\n return df.request(_.url, _.format)\n .then(res => output(this, pulse, res.data || []));\n }\n};\n\nfunction output(op, pulse, data) {\n data.forEach(ingest);\n const out = pulse.fork(pulse.NO_FIELDS & pulse.NO_SOURCE);\n out.rem = op.value;\n op.value = out.add = out.source = data;\n return out;\n}\n","import {Transform} from 'vega-dataflow';\nimport {accessorName, error, inherits} from 'vega-util';\n\n/**\n * Extend tuples by joining them with values from a lookup table.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Map} params.index - The lookup table map.\n * @param {Array} params.as - Output field names for each lookup value.\n * @param {*} [params.default] - A default value to use if lookup fails.\n */\nexport default function Lookup(params) {\n Transform.call(this, {}, params);\n}\n\nLookup.Definition = {\n \"type\": \"Lookup\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"index\", \"type\": \"index\", \"params\": [\n {\"name\": \"from\", \"type\": \"data\", \"required\": true },\n {\"name\": \"key\", \"type\": \"field\", \"required\": true }\n ] },\n { \"name\": \"values\", \"type\": \"field\", \"array\": true },\n { \"name\": \"fields\", \"type\": \"field\", \"array\": true, \"required\": true },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true },\n { \"name\": \"default\", \"default\": null }\n ]\n};\n\nvar prototype = inherits(Lookup, Transform);\n\nprototype.transform = function(_, pulse) {\n var out = pulse,\n as = _.as,\n keys = _.fields,\n index = _.index,\n values = _.values,\n defaultValue = _.default==null ? null : _.default,\n reset = _.modified(),\n flag = reset ? pulse.SOURCE : pulse.ADD,\n n = keys.length,\n set, m, mods;\n\n if (values) {\n m = values.length;\n\n if (n > 1 && !as) {\n error('Multi-field lookup requires explicit \"as\" parameter.');\n }\n if (as && as.length !== n * m) {\n error('The \"as\" parameter has too few output field names.');\n }\n as = as || values.map(accessorName);\n\n set = function(t) {\n for (var i=0, k=0, j, v; i>} params.extents - The input extents.\n */\nexport default function MultiExtent(params) {\n Operator.call(this, null, update, params);\n}\n\ninherits(MultiExtent, Operator);\n\nfunction update(_) {\n if (this.value && !_.modified()) {\n return this.value;\n }\n\n var min = +Infinity,\n max = -Infinity,\n ext = _.extents,\n i, n, e;\n\n for (i=0, n=ext.length; i max) max = e[1];\n }\n return [min, max];\n}\n","import {Operator} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Merge a collection of value arrays.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array>} params.values - The input value arrrays.\n */\nexport default function MultiValues(params) {\n Operator.call(this, null, update, params);\n}\n\ninherits(MultiValues, Operator);\n\nfunction update(_) {\n return (this.value && !_.modified())\n ? this.value\n : _.values.reduce(function(data, _) { return data.concat(_); }, []);\n}\n","import {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Operator whose value is simply its parameter hash. This operator is\n * useful for enabling reactive updates to values of nested objects.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nexport default function Params(params) {\n Transform.call(this, null, params);\n}\n\ninherits(Params, Transform);\n\nParams.prototype.transform = function(_, pulse) {\n this.modified(_.modified());\n this.value = _;\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS); // do not pass tuples\n};\n","import Aggregate from './Aggregate';\nimport {ValidAggregateOps} from './util/AggregateOps';\nimport {accessor, accessorFields, inherits} from 'vega-util';\n\n/**\n * Aggregate and pivot selected field values to become new fields.\n * This operator is useful to construction cross-tabulations.\n * @constructor\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby. These fields act just like groupby fields of an Aggregate transform.\n * @param {function(object): *} params.field - The field to pivot on. The unique\n * values of this field become new field names in the output stream.\n * @param {function(object): *} params.value - The field to populate pivoted fields.\n * The aggregate values of this field become the values of the new pivoted fields.\n * @param {string} [params.op] - The aggregation operation for the value field,\n * applied per cell in the output stream. The default is \"sum\".\n * @param {number} [params.limit] - An optional parameter indicating the maximum\n * number of pivoted fields to generate. The pivoted field names are sorted in\n * ascending order prior to enforcing the limit.\n */\nexport default function Pivot(params) {\n Aggregate.call(this, params);\n}\n\nPivot.Definition = {\n \"type\": \"Pivot\",\n \"metadata\": {\"generates\": true, \"changes\": true},\n \"params\": [\n { \"name\": \"groupby\", \"type\": \"field\", \"array\": true },\n { \"name\": \"field\", \"type\": \"field\", \"required\": true },\n { \"name\": \"value\", \"type\": \"field\", \"required\": true },\n { \"name\": \"op\", \"type\": \"enum\", \"values\": ValidAggregateOps, \"default\": \"sum\" },\n { \"name\": \"limit\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"key\", \"type\": \"field\" }\n ]\n};\n\nvar prototype = inherits(Pivot, Aggregate);\n\nprototype._transform = prototype.transform;\n\nprototype.transform = function(_, pulse) {\n return this._transform(aggregateParams(_, pulse), pulse);\n};\n\n// Shoehorn a pivot transform into an aggregate transform!\n// First collect all unique pivot field values.\n// Then generate aggregate fields for each output pivot field.\nfunction aggregateParams(_, pulse) {\n var key = _.field,\n value = _.value,\n op = (_.op === 'count' ? '__count__' : _.op) || 'sum',\n fields = accessorFields(key).concat(accessorFields(value)),\n keys = pivotKeys(key, _.limit || 0, pulse);\n\n return {\n key: _.key,\n groupby: _.groupby,\n ops: keys.map(function() { return op; }),\n fields: keys.map(function(k) { return get(k, key, value, fields); }),\n as: keys.map(function(k) { return k + ''; }),\n modified: _.modified.bind(_)\n };\n}\n\n// Generate aggregate field accessor.\n// Output NaN for non-existent values; aggregator will ignore!\nfunction get(k, key, value, fields) {\n return accessor(\n function(d) { return key(d) === k ? value(d) : NaN; },\n fields,\n k + ''\n );\n}\n\n// Collect (and optionally limit) all unique pivot values.\nfunction pivotKeys(key, limit, pulse) {\n var map = {},\n list = [];\n\n pulse.visit(pulse.SOURCE, function(t) {\n var k = key(t);\n if (!map[k]) {\n map[k] = 1;\n list.push(k);\n }\n });\n\n // TODO? Move this comparator to vega-util?\n list.sort(function(u, v) {\n return (uv||v==null) && u!=null ? 1\n : ((v=v instanceof Date?+v:v),(u=u instanceof Date?+u:u))!==u && v===v ? -1\n : v!==v && u===u ? 1 : 0;\n });\n\n return limit ? list.slice(0, limit) : list;\n}\n","import Facet from './Facet';\nimport {ingest, tupleid} from 'vega-dataflow';\nimport {accessorFields, error, inherits} from 'vega-util';\n\n/**\n * Partitions pre-faceted data into tuple subflows.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Dataflow, string): Operator} params.subflow - A function\n * that generates a subflow of operators and returns its root operator.\n * @param {function(object): Array} params.field - The field\n * accessor for an array of subflow tuple objects.\n */\nexport default function PreFacet(params) {\n Facet.call(this, params);\n}\n\nvar prototype = inherits(PreFacet, Facet);\n\nprototype.transform = function(_, pulse) {\n var self = this,\n flow = _.subflow,\n field = _.field;\n\n if (_.modified('field') || field && pulse.modified(accessorFields(field))) {\n error('PreFacet does not support field modification.');\n }\n\n this._targets.active = 0; // reset list of active subflows\n\n pulse.visit(pulse.MOD, function(t) {\n var sf = self.subflow(tupleid(t), flow, pulse, t);\n field ? field(t).forEach(function(_) { sf.mod(_); }) : sf.mod(t);\n });\n\n pulse.visit(pulse.ADD, function(t) {\n var sf = self.subflow(tupleid(t), flow, pulse, t);\n field ? field(t).forEach(function(_) { sf.add(ingest(_)); }) : sf.add(t);\n });\n\n pulse.visit(pulse.REM, function(t) {\n var sf = self.subflow(tupleid(t), flow, pulse, t);\n field ? field(t).forEach(function(_) { sf.rem(_); }) : sf.rem(t);\n });\n\n return pulse;\n};\n","import {fieldNames} from './util/util';\nimport {ingest, rederive, Transform, tupleid} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Performs a relational projection, copying selected fields from source\n * tuples to a new set of derived tuples.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.as] - Output field names for each projected\n * field. Any unspecified fields will use the field name provided by\n * the field accessor.\n */\nexport default function Project(params) {\n Transform.call(this, null, params);\n}\n\nProject.Definition = {\n \"type\": \"Project\",\n \"metadata\": {\"generates\": true, \"changes\": true},\n \"params\": [\n { \"name\": \"fields\", \"type\": \"field\", \"array\": true },\n { \"name\": \"as\", \"type\": \"string\", \"null\": true, \"array\": true },\n ]\n};\n\nvar prototype = inherits(Project, Transform);\n\nprototype.transform = function(_, pulse) {\n var fields = _.fields,\n as = fieldNames(_.fields, _.as || []),\n derive = fields\n ? function(s, t) { return project(s, t, fields, as); }\n : rederive,\n out, lut;\n\n if (this.value) {\n lut = this.value;\n } else {\n pulse = pulse.addAll();\n lut = this.value = {};\n }\n\n out = pulse.fork(pulse.NO_SOURCE);\n\n pulse.visit(pulse.REM, function(t) {\n var id = tupleid(t);\n out.rem.push(lut[id]);\n lut[id] = null;\n });\n\n pulse.visit(pulse.ADD, function(t) {\n var dt = derive(t, ingest({}));\n lut[tupleid(t)] = dt;\n out.add.push(dt);\n });\n\n pulse.visit(pulse.MOD, function(t) {\n out.mod.push(derive(t, lut[tupleid(t)]));\n });\n\n return out;\n};\n\nfunction project(s, t, fields, as) {\n for (var i=0, n=fields.length; i= cap) {\n p = res[idx];\n if (map[tupleid(p)]) out.rem.push(p); // eviction\n res[idx] = t;\n }\n }\n ++cnt;\n }\n\n if (pulse.rem.length) {\n // find all tuples that should be removed, add to output\n pulse.visit(pulse.REM, function(t) {\n var id = tupleid(t);\n if (map[id]) {\n map[id] = -1;\n out.rem.push(t);\n }\n --cnt;\n });\n\n // filter removed tuples out of the sample reservoir\n res = res.filter(function(t) { return map[tupleid(t)] !== -1; });\n }\n\n if ((pulse.rem.length || mod) && res.length < num && pulse.source) {\n // replenish sample if backing data source is available\n cap = cnt = res.length;\n pulse.visit(pulse.SOURCE, function(t) {\n // update, but skip previously sampled tuples\n if (!map[tupleid(t)]) update(t);\n });\n cap = -1;\n }\n\n if (mod && res.length > num) {\n for (var i=0, n=res.length-num; i df.cleanThreshold) df.runAfter(index.clean);\n return pulse.fork();\n};\n","import {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Extracts an array of values. Assumes the source data has already been\n * reduced as needed (e.g., by an upstream Aggregate transform).\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The domain field to extract.\n * @param {function(*,*): number} [params.sort] - An optional\n * comparator function for sorting the values. The comparator will be\n * applied to backing tuples prior to value extraction.\n */\nexport default function Values(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(Values, Transform);\n\nprototype.transform = function(_, pulse) {\n var run = !this.value\n || _.modified('field')\n || _.modified('sort')\n || pulse.changed()\n || (_.sort && pulse.modified(_.sort.fields));\n\n if (run) {\n this.value = (_.sort\n ? pulse.source.slice().sort(_.sort)\n : pulse.source).map(_.field);\n }\n};\n","import {error, zero} from 'vega-util';\n\nexport function WindowOp(op, field, param, as) {\n let fn = WindowOps[op](field, param);\n return {\n init: fn.init || zero,\n update: function(w, t) { t[as] = fn.next(w); }\n };\n}\n\nexport const WindowOps = {\n row_number: function() {\n return {\n next: w => w.index + 1\n };\n },\n rank: function() {\n let rank;\n return {\n init: () => rank = 1,\n next: w => {\n let i = w.index,\n data = w.data;\n return (i && w.compare(data[i - 1], data[i])) ? (rank = i + 1) : rank;\n }\n };\n },\n dense_rank: function() {\n let drank;\n return {\n init: () => drank = 1,\n next: w => {\n let i = w.index,\n d = w.data;\n return (i && w.compare(d[i - 1], d[i])) ? ++drank : drank;\n }\n };\n },\n percent_rank: function() {\n let rank = WindowOps.rank(),\n next = rank.next;\n return {\n init: rank.init,\n next: w => (next(w) - 1) / (w.data.length - 1)\n };\n },\n cume_dist: function() {\n let cume;\n return {\n init: () => cume = 0,\n next: w => {\n let i = w.index,\n d = w.data,\n c = w.compare;\n if (cume < i) {\n while (i + 1 < d.length && !c(d[i], d[i + 1])) ++i;\n cume = i;\n }\n return (1 + cume) / d.length;\n }\n };\n },\n ntile: function(field, num) {\n num = +num;\n if (!(num > 0)) error('ntile num must be greater than zero.');\n let cume = WindowOps.cume_dist(),\n next = cume.next;\n return {\n init: cume.init,\n next: w => Math.ceil(num * next(w))\n };\n },\n\n lag: function(field, offset) {\n offset = +offset || 1;\n return {\n next: w => {\n let i = w.index - offset;\n return i >= 0 ? field(w.data[i]) : null;\n }\n };\n },\n lead: function(field, offset) {\n offset = +offset || 1;\n return {\n next: w => {\n let i = w.index + offset,\n d = w.data;\n return i < d.length ? field(d[i]) : null;\n }\n };\n },\n\n first_value: function(field) {\n return {\n next: w => field(w.data[w.i0])\n };\n },\n last_value: function(field) {\n return {\n next: w => field(w.data[w.i1 - 1])\n }\n },\n nth_value: function(field, nth) {\n nth = +nth;\n if (!(nth > 0)) error('nth_value nth must be greater than zero.');\n return {\n next: w => {\n let i = w.i0 + (nth - 1);\n return i < w.i1 ? field(w.data[i]) : null;\n }\n }\n },\n\n prev_value: function(field) {\n let prev = null;\n return {\n next: w => {\n let v = field(w.data[w.index]);\n return v != null ? (prev = v) : prev;\n }\n }\n },\n next_value: function(field) {\n let v = null,\n i = -1;\n return {\n next: w => {\n let d = w.data;\n return w.index <= i ? v\n : (i = find(field, d, w.index)) < 0\n ? (i = d.length, v = null)\n : (v = field(d[i]));\n }\n };\n },\n\n};\n\nfunction find(field, data, index) {\n for (let n = data.length; index < n; ++index) {\n let v = field(data[index]);\n if (v != null) return index;\n }\n return -1;\n}\n\nexport var ValidWindowOps = Object.keys(WindowOps);\n","import {createMeasure, compileMeasures, measureName} from './AggregateOps';\nimport TupleStore from './TupleStore';\nimport {WindowOp, WindowOps} from './WindowOps';\nimport {accessorFields, accessorName, array, error} from 'vega-util';\n\nexport default function WindowState(_) {\n let self = this,\n ops = array(_.ops),\n fields = array(_.fields),\n params = array(_.params),\n as = array(_.as),\n outputs = self.outputs = [],\n windows = self.windows = [],\n inputs = {},\n map = {},\n countOnly = true,\n counts = [],\n measures = [];\n\n function visitInputs(f) {\n array(accessorFields(f)).forEach(_ => inputs[_] = 1);\n }\n visitInputs(_.sort);\n\n ops.forEach(function(op, i) {\n let field = fields[i],\n mname = accessorName(field),\n name = measureName(op, mname, as[i]);\n\n visitInputs(field);\n outputs.push(name);\n\n // Window operation\n if (WindowOps.hasOwnProperty(op)) {\n windows.push(WindowOp(op, fields[i], params[i], name));\n }\n\n // Aggregate operation\n else {\n if (field == null && op !== 'count') {\n error('Null aggregate field specified.');\n }\n if (op === 'count') {\n counts.push(name);\n return;\n }\n\n countOnly = false;\n let m = map[mname];\n if (!m) {\n m = (map[mname] = []);\n m.field = field;\n measures.push(m);\n }\n m.push(createMeasure(op, name));\n }\n });\n\n if (counts.length || measures.length) {\n self.cell = cell(measures, counts, countOnly);\n }\n\n self.inputs = Object.keys(inputs);\n}\n\nconst prototype = WindowState.prototype;\n\nprototype.init = function() {\n this.windows.forEach(_ => _.init());\n if (this.cell) this.cell.init();\n};\n\nprototype.update = function(w, t) {\n let self = this,\n cell = self.cell,\n wind = self.windows,\n data = w.data,\n m = wind && wind.length,\n j;\n\n if (cell) {\n for (j=w.p0; j compileMeasures(m, m.field));\n\n let cell = {\n num: 0,\n agg: null,\n store: false,\n count: counts\n };\n\n if (!countOnly) {\n var n = measures.length,\n a = cell.agg = Array(n),\n i = 0;\n for (; i} [params.groupby] - An array of accessors by which to partition tuples into separate windows.\n * @param {Array} params.ops - An array of strings indicating window operations to perform.\n * @param {Array} [params.fields] - An array of accessors\n * for data fields to use as inputs to window operations.\n * @param {Array<*>} [params.params] - An array of parameter values for window operations.\n * @param {Array} [params.as] - An array of output field names for window operations.\n * @param {Array} [params.frame] - Window frame definition as two-element array.\n * @param {boolean} [params.ignorePeers=false] - If true, base window frame boundaries on row\n * number alone, ignoring peers with identical sort values. If false (default),\n * the window boundaries will be adjusted to include peer values.\n */\nexport default function Window(params) {\n Transform.call(this, {}, params);\n this._mlen = 0;\n this._mods = [];\n}\n\nWindow.Definition = {\n \"type\": \"Window\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"sort\", \"type\": \"compare\" },\n { \"name\": \"groupby\", \"type\": \"field\", \"array\": true },\n { \"name\": \"ops\", \"type\": \"enum\", \"array\": true, \"values\": ValidWindowOps.concat(ValidAggregateOps) },\n { \"name\": \"params\", \"type\": \"number\", \"null\": true, \"array\": true },\n { \"name\": \"fields\", \"type\": \"field\", \"null\": true, \"array\": true },\n { \"name\": \"as\", \"type\": \"string\", \"null\": true, \"array\": true },\n { \"name\": \"frame\", \"type\": \"number\", \"null\": true, \"array\": true, \"length\": 2, \"default\": [null, 0] },\n { \"name\": \"ignorePeers\", \"type\": \"boolean\", \"default\": false }\n ]\n};\n\nvar prototype = inherits(Window, Transform);\n\nprototype.transform = function(_, pulse) {\n var self = this,\n state = self.state,\n mod = _.modified(),\n i, n;\n\n this.stamp = pulse.stamp;\n\n // initialize window state\n if (!state || mod) {\n state = self.state = new WindowState(_);\n }\n\n // retrieve group for a tuple\n var key = groupkey(_.groupby);\n function group(t) { return self.group(key(t)); }\n\n // partition input tuples\n if (mod || pulse.modified(state.inputs)) {\n self.value = {};\n pulse.visit(pulse.SOURCE, function(t) { group(t).add(t); });\n } else {\n pulse.visit(pulse.REM, function(t) { group(t).remove(t); });\n pulse.visit(pulse.ADD, function(t) { group(t).add(t); });\n }\n\n // perform window calculations for each modified partition\n for (i=0, n=self._mlen; i 0 && !c(d[r0], d[r0-1])) w.i0 = bisect.left(d, d[r0]);\n if (r1 < n && !c(d[r1], d[r1+1])) w.i1 = bisect.right(d, d[r1]);\n}\n","export const Top = 'top';\nexport const Left = 'left';\nexport const Right = 'right';\nexport const Bottom = 'bottom';\n\nexport const TopLeft = 'top-left';\nexport const TopRight = 'top-right';\nexport const BottomLeft = 'bottom-left';\nexport const BottomRight = 'bottom-right';\n\nexport const Start = 'start';\nexport const Middle = 'middle';\nexport const End = 'end';\n\nexport const X = 'x';\nexport const Y = 'y';\n\nexport const Group = 'group';\n\nexport const AxisRole = 'axis';\nexport const TitleRole = 'title';\nexport const FrameRole = 'frame';\nexport const ScopeRole = 'scope';\nexport const LegendRole = 'legend';\n\nexport const RowHeader = 'row-header';\nexport const RowFooter = 'row-footer';\nexport const RowTitle = 'row-title';\nexport const ColHeader = 'column-header';\nexport const ColFooter = 'column-footer';\nexport const ColTitle = 'column-title';\n\nexport const Padding = 'padding';\n\nexport const Symbols = 'symbol';\n\nexport const Fit = 'fit';\nexport const FitX = 'fit-x';\nexport const FitY = 'fit-y';\nexport const Pad = 'pad';\nexport const None = 'none';\n\nexport const All = 'all';\nexport const Each = 'each';\nexport const Flush = 'flush';\n\nexport const Column = 'column';\nexport const Row = 'row';\n","export default function Bounds(b) {\n this.clear();\n if (b) this.union(b);\n}\n\nvar prototype = Bounds.prototype;\n\nprototype.clone = function() {\n return new Bounds(this);\n};\n\nprototype.clear = function() {\n this.x1 = +Number.MAX_VALUE;\n this.y1 = +Number.MAX_VALUE;\n this.x2 = -Number.MAX_VALUE;\n this.y2 = -Number.MAX_VALUE;\n return this;\n};\n\nprototype.empty = function() {\n return (\n this.x1 === +Number.MAX_VALUE &&\n this.y1 === +Number.MAX_VALUE &&\n this.x2 === -Number.MAX_VALUE &&\n this.y2 === -Number.MAX_VALUE\n );\n};\n\nprototype.equals = function(b) {\n return (\n this.x1 === b.x1 &&\n this.y1 === b.y1 &&\n this.x2 === b.x2 &&\n this.y2 === b.y2\n );\n};\n\nprototype.set = function(x1, y1, x2, y2) {\n if (x2 < x1) {\n this.x2 = x1;\n this.x1 = x2;\n } else {\n this.x1 = x1;\n this.x2 = x2;\n }\n if (y2 < y1) {\n this.y2 = y1;\n this.y1 = y2;\n } else {\n this.y1 = y1;\n this.y2 = y2;\n }\n return this;\n};\n\nprototype.add = function(x, y) {\n if (x < this.x1) this.x1 = x;\n if (y < this.y1) this.y1 = y;\n if (x > this.x2) this.x2 = x;\n if (y > this.y2) this.y2 = y;\n return this;\n};\n\nprototype.expand = function(d) {\n this.x1 -= d;\n this.y1 -= d;\n this.x2 += d;\n this.y2 += d;\n return this;\n};\n\nprototype.round = function() {\n this.x1 = Math.floor(this.x1);\n this.y1 = Math.floor(this.y1);\n this.x2 = Math.ceil(this.x2);\n this.y2 = Math.ceil(this.y2);\n return this;\n};\n\nprototype.translate = function(dx, dy) {\n this.x1 += dx;\n this.x2 += dx;\n this.y1 += dy;\n this.y2 += dy;\n return this;\n};\n\nprototype.rotate = function(angle, x, y) {\n const p = this.rotatedPoints(angle, x, y);\n return this.clear()\n .add(p[0], p[1])\n .add(p[2], p[3])\n .add(p[4], p[5])\n .add(p[6], p[7]);\n};\n\nprototype.rotatedPoints = function(angle, x, y) {\n var {x1, y1, x2, y2} = this,\n cos = Math.cos(angle),\n sin = Math.sin(angle),\n cx = x - x*cos + y*sin,\n cy = y - x*sin - y*cos;\n\n return [\n cos*x1 - sin*y1 + cx, sin*x1 + cos*y1 + cy,\n cos*x1 - sin*y2 + cx, sin*x1 + cos*y2 + cy,\n cos*x2 - sin*y1 + cx, sin*x2 + cos*y1 + cy,\n cos*x2 - sin*y2 + cx, sin*x2 + cos*y2 + cy\n ];\n};\n\nprototype.union = function(b) {\n if (b.x1 < this.x1) this.x1 = b.x1;\n if (b.y1 < this.y1) this.y1 = b.y1;\n if (b.x2 > this.x2) this.x2 = b.x2;\n if (b.y2 > this.y2) this.y2 = b.y2;\n return this;\n};\n\nprototype.intersect = function(b) {\n if (b.x1 > this.x1) this.x1 = b.x1;\n if (b.y1 > this.y1) this.y1 = b.y1;\n if (b.x2 < this.x2) this.x2 = b.x2;\n if (b.y2 < this.y2) this.y2 = b.y2;\n return this;\n};\n\nprototype.encloses = function(b) {\n return b && (\n this.x1 <= b.x1 &&\n this.x2 >= b.x2 &&\n this.y1 <= b.y1 &&\n this.y2 >= b.y2\n );\n};\n\nprototype.alignsWith = function(b) {\n return b && (\n this.x1 == b.x1 ||\n this.x2 == b.x2 ||\n this.y1 == b.y1 ||\n this.y2 == b.y2\n );\n};\n\nprototype.intersects = function(b) {\n return b && !(\n this.x2 < b.x1 ||\n this.x1 > b.x2 ||\n this.y2 < b.y1 ||\n this.y1 > b.y2\n );\n};\n\nprototype.contains = function(x, y) {\n return !(\n x < this.x1 ||\n x > this.x2 ||\n y < this.y1 ||\n y > this.y2\n );\n};\n\nprototype.width = function() {\n return this.x2 - this.x1;\n};\n\nprototype.height = function() {\n return this.y2 - this.y1;\n};\n","var gradient_id = 0;\n\nexport const patternPrefix = 'p_';\n\nexport function isGradient(value) {\n return value && value.gradient;\n}\n\nexport function gradientRef(g, defs, base) {\n let id = g.id,\n type = g.gradient,\n prefix = type === 'radial' ? patternPrefix : '';\n\n // check id, assign default values as needed\n if (!id) {\n id = g.id = 'gradient_' + (gradient_id++);\n if (type === 'radial') {\n g.x1 = get(g.x1, 0.5);\n g.y1 = get(g.y1, 0.5);\n g.r1 = get(g.r1, 0);\n g.x2 = get(g.x2, 0.5);\n g.y2 = get(g.y2, 0.5);\n g.r2 = get(g.r2, 0.5);\n prefix = patternPrefix;\n } else {\n g.x1 = get(g.x1, 0);\n g.y1 = get(g.y1, 0);\n g.x2 = get(g.x2, 1);\n g.y2 = get(g.y2, 0);\n }\n }\n\n // register definition\n defs[id] = g;\n\n // return url reference\n return 'url(' + (base || '') + '#' + prefix + id + ')';\n}\n\nfunction get(val, def) {\n return val != null ? val : def;\n}\n\nexport default function(p0, p1) {\n var stops = [], gradient;\n return gradient = {\n gradient: 'linear',\n x1: p0 ? p0[0] : 0,\n y1: p0 ? p0[1] : 0,\n x2: p1 ? p1[0] : 1,\n y2: p1 ? p1[1] : 0,\n stops: stops,\n stop: function(offset, color) {\n stops.push({offset: offset, color: color});\n return gradient;\n }\n };\n}\n","import Bounds from './Bounds';\n\nexport default function Item(mark) {\n this.mark = mark;\n this.bounds = (this.bounds || new Bounds());\n}\n","import Item from './Item';\nimport {inherits} from 'vega-util';\n\nexport default function GroupItem(mark) {\n Item.call(this, mark);\n this.items = (this.items || []);\n}\n\ninherits(GroupItem, Item);\n","export function domCanvas(w, h) {\n if (typeof document !== 'undefined' && document.createElement) {\n var c = document.createElement('canvas');\n if (c && c.getContext) {\n c.width = w;\n c.height = h;\n return c;\n }\n }\n return null;\n}\n\nexport function domImage() {\n return typeof Image !== 'undefined' ? Image : null;\n}\n","var NodeCanvas;\n\ntry {\n NodeCanvas = require('canvas');\n if (!(NodeCanvas && NodeCanvas.createCanvas)) {\n NodeCanvas = null;\n }\n} catch (error) {\n // do nothing\n}\n\nexport function nodeCanvas(w, h, type) {\n if (NodeCanvas) {\n try {\n return new NodeCanvas.Canvas(w, h, type);\n } catch (e) {\n // do nothing, return null on error\n }\n }\n return null;\n}\n\nexport function nodeImage() {\n return (NodeCanvas && NodeCanvas.Image) || null;\n}\n","import {domCanvas, domImage} from './src/domCanvas';\nimport {nodeCanvas, nodeImage} from './src/nodeCanvas';\n\nexport {domCanvas} from './src/domCanvas';\nexport {nodeCanvas} from './src/nodeCanvas';\n\nexport function canvas(w, h, type) {\n return domCanvas(w, h) || nodeCanvas(w, h, type) || null;\n}\n\nexport function image() {\n return domImage() || nodeImage() || null;\n}\n","import {image} from 'vega-canvas';\nimport {loader} from 'vega-loader';\n\nexport default function ResourceLoader(customLoader) {\n this._pending = 0;\n this._loader = customLoader || loader();\n}\n\nvar prototype = ResourceLoader.prototype;\n\nprototype.pending = function() {\n return this._pending;\n};\n\nfunction increment(loader) {\n loader._pending += 1;\n}\n\nfunction decrement(loader) {\n loader._pending -= 1;\n}\n\nprototype.sanitizeURL = function(uri) {\n var loader = this;\n increment(loader);\n\n return loader._loader.sanitize(uri, {context:'href'})\n .then(function(opt) {\n decrement(loader);\n return opt;\n })\n .catch(function() {\n decrement(loader);\n return null;\n });\n};\n\nprototype.loadImage = function(uri) {\n var loader = this,\n Image = image();\n increment(loader);\n\n return loader._loader\n .sanitize(uri, {context: 'image'})\n .then(function(opt) {\n var url = opt.href;\n if (!url || !Image) throw {url: url};\n\n var img = new Image();\n\n img.onload = function() {\n decrement(loader);\n img.loaded = true;\n };\n\n img.onerror = function() {\n decrement(loader);\n img.loaded = false;\n }\n\n img.src = url;\n return img;\n })\n .catch(function(e) {\n decrement(loader);\n return {loaded: false, width: 0, height: 0, src: e && e.url || ''};\n });\n};\n\nprototype.ready = function() {\n var loader = this;\n return new Promise(function(accept) {\n function poll(value) {\n if (!loader.pending()) accept(value);\n else setTimeout(function() { poll(true); }, 10);\n }\n poll(false);\n });\n};\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport line from \"./line\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","import {pi, tau} from \"../math\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle\";\nimport cross from \"./symbol/cross\";\nimport diamond from \"./symbol/diamond\";\nimport star from \"./symbol/star\";\nimport square from \"./symbol/square\";\nimport triangle from \"./symbol/triangle\";\nimport wye from \"./symbol/wye\";\nimport constant from \"./constant\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop\";\nimport {point} from \"./basis\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop\";\nimport {point} from \"./cardinal\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed\";\nimport noop from \"../noop\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import noop from \"../noop\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","import {\n curveBasis,\n curveBasisClosed,\n curveBasisOpen,\n curveBundle,\n curveCardinal,\n curveCardinalClosed,\n curveCardinalOpen,\n curveCatmullRom,\n curveCatmullRomClosed,\n curveCatmullRomOpen,\n curveLinear,\n curveLinearClosed,\n curveMonotoneX,\n curveMonotoneY,\n curveNatural,\n curveStep,\n curveStepAfter,\n curveStepBefore\n} from 'd3-shape';\n\nvar lookup = {\n 'basis': {\n curve: curveBasis\n },\n 'basis-closed': {\n curve: curveBasisClosed\n },\n 'basis-open': {\n curve: curveBasisOpen\n },\n 'bundle': {\n curve: curveBundle,\n tension: 'beta',\n value: 0.85\n },\n 'cardinal': {\n curve: curveCardinal,\n tension: 'tension',\n value: 0\n },\n 'cardinal-open': {\n curve: curveCardinalOpen,\n tension: 'tension',\n value: 0\n },\n 'cardinal-closed': {\n curve: curveCardinalClosed,\n tension: 'tension',\n value: 0\n },\n 'catmull-rom': {\n curve: curveCatmullRom,\n tension: 'alpha',\n value: 0.5\n },\n 'catmull-rom-closed': {\n curve: curveCatmullRomClosed,\n tension: 'alpha',\n value: 0.5\n },\n 'catmull-rom-open': {\n curve: curveCatmullRomOpen,\n tension: 'alpha',\n value: 0.5\n },\n 'linear': {\n curve: curveLinear\n },\n 'linear-closed': {\n curve: curveLinearClosed\n },\n 'monotone': {\n horizontal: curveMonotoneY,\n vertical: curveMonotoneX\n },\n 'natural': {\n curve: curveNatural\n },\n 'step': {\n curve: curveStep\n },\n 'step-after': {\n curve: curveStepAfter\n },\n 'step-before': {\n curve: curveStepBefore\n }\n};\n\nexport default function curves(type, orientation, tension) {\n var entry = lookup.hasOwnProperty(type) && lookup[type],\n curve = null;\n\n if (entry) {\n curve = entry.curve || entry[orientation || 'vertical'];\n if (entry.tension && tension != null) {\n curve = curve[entry.tension](tension);\n }\n }\n\n return curve;\n}\n","// Path parsing and rendering code adapted from fabric.js -- Thanks!\nvar cmdlen = { m:2, l:2, h:1, v:1, c:6, s:4, q:4, t:2, a:7 },\n regexp = [/([MLHVCSQTAZmlhvcsqtaz])/g, /###/, /(\\d)([-+])/g, /\\s|,|###/];\n\nexport default function(pathstr) {\n var result = [],\n path,\n curr,\n chunks,\n parsed, param,\n cmd, len, i, j, n, m;\n\n // First, break path into command sequence\n path = pathstr\n .slice()\n .replace(regexp[0], '###$1')\n .split(regexp[1])\n .slice(1);\n\n // Next, parse each command in turn\n for (i=0, n=path.length; i len) {\n for (j=1, m=parsed.length; j 1) {\n pl = Math.sqrt(pl);\n rx *= pl;\n ry *= pl;\n }\n\n var a00 = cos_th / rx;\n var a01 = sin_th / rx;\n var a10 = (-sin_th) / ry;\n var a11 = (cos_th) / ry;\n var x0 = a00 * ox + a01 * oy;\n var y0 = a10 * ox + a11 * oy;\n var x1 = a00 * x + a01 * y;\n var y1 = a10 * x + a11 * y;\n\n var d = (x1-x0) * (x1-x0) + (y1-y0) * (y1-y0);\n var sfactor_sq = 1 / d - 0.25;\n if (sfactor_sq < 0) sfactor_sq = 0;\n var sfactor = Math.sqrt(sfactor_sq);\n if (sweep == large) sfactor = -sfactor;\n var xc = 0.5 * (x0 + x1) - sfactor * (y1-y0);\n var yc = 0.5 * (y0 + y1) + sfactor * (x1-x0);\n\n var th0 = Math.atan2(y0-yc, x0-xc);\n var th1 = Math.atan2(y1-yc, x1-xc);\n\n var th_arc = th1-th0;\n if (th_arc < 0 && sweep === 1) {\n th_arc += Tau;\n } else if (th_arc > 0 && sweep === 0) {\n th_arc -= Tau;\n }\n\n var segs = Math.ceil(Math.abs(th_arc / (HalfPi + 0.001)));\n var result = [];\n for (var i=0; i circleThreshold) {\n add(cx - r, cy - r);\n add(cx + r, cy + r);\n return;\n }\n\n var xmin = Infinity, xmax = -Infinity,\n ymin = Infinity, ymax = -Infinity,\n s, i, x, y;\n\n function update(a) {\n x = r * Math.cos(a);\n y = r * Math.sin(a);\n if (x < xmin) xmin = x;\n if (x > xmax) xmax = x;\n if (y < ymin) ymin = y;\n if (y > ymax) ymax = y;\n }\n\n // Sample end points and interior points aligned with 90 degrees\n update(sa);\n update(ea);\n\n if (ea !== sa) {\n sa = sa % Tau; if (sa < 0) sa += Tau;\n ea = ea % Tau; if (ea < 0) ea += Tau;\n\n if (ea < sa) {\n ccw = !ccw; // flip direction\n s = sa; sa = ea; ea = s; // swap end-points\n }\n\n if (ccw) {\n ea -= Tau;\n s = sa - (sa % HalfPi);\n for (i=0; i<4 && s>ea; ++i, s-=HalfPi) update(s);\n } else {\n s = sa - (sa % HalfPi) + HalfPi;\n for (i=0; i<4 && s t1) return false;\n else if (r > t0) t0 = r;\n } else if (p > 0) {\n if (r < t0) return false;\n else if (r < t1) t1 = r;\n }\n }\n\n return true;\n}\n","export default function(context, gradient, bounds) {\n const w = bounds.width(),\n h = bounds.height(),\n stop = gradient.stops,\n n = stop.length;\n\n const canvasGradient = gradient.gradient === 'radial'\n ? context.createRadialGradient(\n bounds.x1 + (gradient.x1 || 0.5) * w,\n bounds.y1 + (gradient.y1 || 0.5) * h,\n Math.max(w, h) * (gradient.r1 || 0),\n bounds.x1 + (gradient.x2 || 0.5) * w,\n bounds.y1 + (gradient.y2 || 0.5) * h,\n Math.max(w, h) * (gradient.r2 || 0.5)\n )\n : context.createLinearGradient(\n bounds.x1 + (gradient.x1 || 0) * w,\n bounds.y1 + (gradient.y1 || 0) * h,\n bounds.x1 + (gradient.x2 || 1) * w,\n bounds.y1 + (gradient.y2 || 0) * h\n );\n\n for (let i=0; i 0) {\n context.globalAlpha = opacity;\n context.fillStyle = color(context, item, item.fill);\n return true;\n } else {\n return false;\n }\n}\n","import color from './color';\n\nvar Empty = [];\n\nexport default function(context, item, opacity) {\n var lw = (lw = item.strokeWidth) != null ? lw : 1;\n\n if (lw <= 0) return false;\n\n opacity *= (item.strokeOpacity==null ? 1 : item.strokeOpacity);\n if (opacity > 0) {\n context.globalAlpha = opacity;\n context.strokeStyle = color(context, item, item.stroke);\n\n context.lineWidth = lw;\n context.lineCap = item.strokeCap || 'butt';\n context.lineJoin = item.strokeJoin || 'miter';\n context.miterLimit = item.strokeMiterLimit || 10;\n\n if (context.setLineDash) {\n context.setLineDash(item.strokeDash || Empty);\n context.lineDashOffset = item.strokeDashOffset || 0;\n }\n return true;\n } else {\n return false;\n }\n}\n","function compare(a, b) {\n return a.zindex - b.zindex || a.index - b.index;\n}\n\nexport function zorder(scene) {\n if (!scene.zdirty) return scene.zitems;\n\n var items = scene.items,\n output = [], item, i, n;\n\n for (i=0, n=items.length; i= 0;) {\n if (hit = visitor(items[i])) return hit;\n }\n\n if (items === zitems) {\n for (items=scene.items, i=items.length; --i >= 0;) {\n if (!items[i].zindex) {\n if (hit = visitor(items[i])) return hit;\n }\n }\n }\n\n return null;\n}\n","import fill from './fill';\nimport stroke from './stroke';\nimport {visit} from '../visit';\n\nexport function drawAll(path) {\n return function(context, scene, bounds) {\n visit(scene, function(item) {\n if (!bounds || bounds.intersects(item.bounds)) {\n drawPath(path, context, item, item);\n }\n });\n };\n}\n\nexport function drawOne(path) {\n return function(context, scene, bounds) {\n if (scene.items.length && (!bounds || bounds.intersects(scene.bounds))) {\n drawPath(path, context, scene.items[0], scene.items);\n }\n };\n}\n\nfunction drawPath(path, context, item, items) {\n var opacity = item.opacity == null ? 1 : item.opacity;\n if (opacity === 0) return;\n\n if (path(context, items)) return;\n\n if (item.fill && fill(context, item, opacity)) {\n context.fill();\n }\n\n if (item.stroke && stroke(context, item, opacity)) {\n context.stroke();\n }\n}\n","import {pickVisit} from '../visit';\nimport {truthy} from 'vega-util';\n\nexport function pick(test) {\n test = test || truthy;\n\n return function(context, scene, x, y, gx, gy) {\n x *= context.pixelRatio;\n y *= context.pixelRatio;\n\n return pickVisit(scene, function(item) {\n var b = item.bounds;\n // first hit test against bounding box\n if ((b && !b.contains(gx, gy)) || !b) return;\n // if in bounding box, perform more careful test\n if (test(context, item, x, y, gx, gy)) return item;\n });\n };\n}\n\nexport function hitPath(path, filled) {\n return function(context, o, x, y) {\n var item = Array.isArray(o) ? o[0] : o,\n fill = (filled == null) ? item.fill : filled,\n stroke = item.stroke && context.isPointInStroke, lw, lc;\n\n if (stroke) {\n lw = item.strokeWidth;\n lc = item.strokeCap;\n context.lineWidth = lw != null ? lw : 1;\n context.lineCap = lc != null ? lc : 'butt';\n }\n\n return path(context, o) ? false :\n (fill && context.isPointInPath(x, y)) ||\n (stroke && context.isPointInStroke(x, y));\n };\n}\n\nexport function pickPath(path) {\n return pick(hitPath(path));\n}\n","export function translate(x, y) {\n return 'translate(' + x + ',' + y + ')';\n}\n\nexport function rotate(a) {\n return 'rotate(' + a + ')';\n}\n\nexport function translateItem(item) {\n return translate(item.x || 0, item.y || 0);\n}\n\nexport function transformItem(item) {\n return translate(item.x || 0, item.y || 0)\n + (item.angle ? ' ' + rotate(item.angle) : '');\n}\n","import boundStroke from '../bound/boundStroke';\nimport context from '../bound/boundContext';\nimport {intersectPath} from '../util/intersect';\nimport {drawAll} from '../util/canvas/draw';\nimport {pickPath} from '../util/canvas/pick';\nimport {transformItem} from '../util/svg/transform';\nimport {DegToRad} from '../util/constants';\n\nexport default function(type, shape, isect) {\n\n function attr(emit, item) {\n emit('transform', transformItem(item));\n emit('d', shape(null, item));\n }\n\n function bound(bounds, item) {\n var x = item.x || 0,\n y = item.y || 0;\n\n shape(context(bounds), item);\n boundStroke(bounds, item).translate(x, y);\n if (item.angle) {\n bounds.rotate(item.angle * DegToRad, x, y);\n }\n\n return bounds;\n }\n\n function draw(context, item) {\n var x = item.x || 0,\n y = item.y || 0,\n a = item.angle || 0;\n\n context.translate(x, y);\n if (a) context.rotate(a *= DegToRad);\n context.beginPath();\n shape(context, item);\n if (a) context.rotate(-a);\n context.translate(-x, -y);\n }\n\n return {\n type: type,\n tag: 'path',\n nested: false,\n attr: attr,\n bound: bound,\n draw: drawAll(draw),\n pick: pickPath(draw),\n isect: isect || intersectPath(draw)\n };\n\n}\n","import {arc} from '../path/shapes';\nimport markItemPath from './markItemPath';\n\nexport default markItemPath('arc', arc);\n","export function pickArea(a, p) {\n var v = a[0].orient === 'horizontal' ? p[1] : p[0],\n z = a[0].orient === 'horizontal' ? 'y' : 'x',\n i = a.length,\n min = +Infinity, hit, d;\n\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n d = Math.abs(a[i][z] - v);\n if (d < min) {\n min = d;\n hit = a[i];\n }\n }\n\n return hit;\n}\n\nexport function pickLine(a, p) {\n var t = Math.pow(a[0].strokeWidth || 1, 2),\n i = a.length, dx, dy, dd;\n\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n dx = a[i].x - p[0];\n dy = a[i].y - p[1];\n dd = dx * dx + dy * dy;\n if (dd < t) return a[i];\n }\n\n return null;\n}\n\nexport function pickTrail(a, p) {\n var i = a.length, dx, dy, dd;\n\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n dx = a[i].x - p[0];\n dy = a[i].y - p[1];\n dd = dx * dx + dy * dy;\n dx = a[i].size || 1;\n if (dd < dx*dx) return a[i];\n }\n\n return null;\n}\n","import boundStroke from '../bound/boundStroke';\nimport context from '../bound/boundContext';\nimport {intersectPoint} from '../util/intersect';\nimport {drawOne} from '../util/canvas/draw';\nimport {hitPath} from '../util/canvas/pick';\n\nexport default function(type, shape, tip) {\n\n function attr(emit, item) {\n var items = item.mark.items;\n if (items.length) emit('d', shape(null, items));\n }\n\n function bound(bounds, mark) {\n var items = mark.items;\n if (items.length === 0) {\n return bounds;\n } else {\n shape(context(bounds), items);\n return boundStroke(bounds, items[0]);\n }\n }\n\n function draw(context, items) {\n context.beginPath();\n shape(context, items);\n }\n\n var hit = hitPath(draw);\n\n function pick(context, scene, x, y, gx, gy) {\n var items = scene.items,\n b = scene.bounds;\n\n if (!items || !items.length || b && !b.contains(gx, gy)) {\n return null;\n }\n\n x *= context.pixelRatio;\n y *= context.pixelRatio;\n return hit(context, items, x, y) ? items[0] : null;\n }\n\n return {\n type: type,\n tag: 'path',\n nested: true,\n attr: attr,\n bound: bound,\n draw: drawOne(draw),\n pick: pick,\n isect: intersectPoint,\n tip: tip\n };\n\n}\n\n\n","import {area} from '../path/shapes';\nimport {pickArea} from '../util/pickPath';\nimport markMultiItemPath from './markMultiItemPath';\n\nexport default markMultiItemPath('area', area, pickArea);\n","import {isFunction} from 'vega-util';\n\nvar clip_id = 1;\n\nexport function resetSVGClipId() {\n clip_id = 1;\n}\n\nexport default function(renderer, item, size) {\n var clip = item.clip,\n defs = renderer._defs,\n id = item.clip_id || (item.clip_id = 'clip' + clip_id++),\n c = defs.clipping[id] || (defs.clipping[id] = {id: id});\n\n if (isFunction(clip)) {\n c.path = clip(null);\n } else {\n c.width = size.width || 0;\n c.height = size.height || 0;\n }\n\n return 'url(#' + id + ')';\n}\n","import {rectangle} from '../path/shapes';\nimport boundStroke from '../bound/boundStroke';\nimport {intersectRect} from '../util/intersect';\nimport {visit, pickVisit} from '../util/visit';\nimport stroke from '../util/canvas/stroke';\nimport fill from '../util/canvas/fill';\nimport {hitPath} from '../util/canvas/pick';\nimport clip from '../util/svg/clip';\nimport {translateItem} from '../util/svg/transform';\n\nvar StrokeOffset = 0.5;\n\nfunction attr(emit, item) {\n emit('transform', translateItem(item));\n}\n\nfunction background(emit, item) {\n var offset = item.stroke ? StrokeOffset : 0;\n emit('class', 'background');\n emit('d', rectangle(null, item, offset, offset));\n}\n\nfunction foreground(emit, item, renderer) {\n var url = item.clip ? clip(renderer, item, item) : null;\n emit('clip-path', url);\n}\n\nfunction bound(bounds, group) {\n if (!group.clip && group.items) {\n var items = group.items;\n for (var j=0, m=items.length; j 0) {\n backgroundPath(context, group);\n if (group.fill && fill(context, group, opacity)) {\n context.fill();\n }\n if (group.stroke && stroke(context, group, opacity)) {\n context.stroke();\n }\n }\n }\n\n // set clip and bounds\n if (group.clip) {\n context.beginPath();\n context.rect(0, 0, w, h);\n context.clip();\n }\n if (bounds) bounds.translate(-gx, -gy);\n\n // draw group contents\n visit(group, function(item) {\n renderer.draw(context, item, bounds);\n });\n\n // restore graphics context\n if (bounds) bounds.translate(gx, gy);\n context.restore();\n });\n}\n\nfunction pick(context, scene, x, y, gx, gy) {\n if (scene.bounds && !scene.bounds.contains(gx, gy) || !scene.items) {\n return null;\n }\n\n var handler = this,\n cx = x * context.pixelRatio,\n cy = y * context.pixelRatio;\n\n return pickVisit(scene, function(group) {\n var hit, dx, dy, b;\n\n // first hit test against bounding box\n // if a group is clipped, that should be handled by the bounds check.\n b = group.bounds;\n if (b && !b.contains(gx, gy)) return;\n\n // passed bounds check, so test sub-groups\n dx = (group.x || 0);\n dy = (group.y || 0);\n\n context.save();\n context.translate(dx, dy);\n\n dx = gx - dx;\n dy = gy - dy;\n\n // hit test against contained marks\n hit = pickVisit(group, function(mark) {\n return pickMark(mark, dx, dy)\n ? handler.pick(mark, x, y, dx, dy)\n : null;\n });\n\n // hit test against group background\n if (!hit && scene.interactive !== false\n && (group.fill || group.stroke)\n && hitBackground(context, group, cx, cy)) {\n hit = group;\n }\n\n context.restore();\n return hit || null;\n });\n}\n\nfunction pickMark(mark, x, y) {\n return (mark.interactive !== false || mark.marktype === 'group')\n && mark.bounds && mark.bounds.contains(x, y);\n}\n\nexport default {\n type: 'group',\n tag: 'g',\n nested: false,\n attr: attr,\n bound: bound,\n draw: draw,\n pick: pick,\n isect: intersectRect,\n background: background,\n foreground: foreground\n};\n","import {visit} from '../util/visit';\nimport {pick} from '../util/canvas/pick';\nimport {translate} from '../util/svg/transform';\nimport {truthy} from 'vega-util';\n\nfunction getImage(item, renderer) {\n var image = item.image;\n if (!image || image.url !== item.url) {\n image = {loaded: false, width: 0, height: 0};\n renderer.loadImage(item.url).then(function(image) {\n item.image = image;\n item.image.url = item.url;\n });\n }\n return image;\n}\n\nfunction imageXOffset(align, w) {\n return align === 'center' ? w / 2 : align === 'right' ? w : 0;\n}\n\nfunction imageYOffset(baseline, h) {\n return baseline === 'middle' ? h / 2 : baseline === 'bottom' ? h : 0;\n}\n\nfunction attr(emit, item, renderer) {\n var image = getImage(item, renderer),\n x = item.x || 0,\n y = item.y || 0,\n w = (item.width != null ? item.width : image.width) || 0,\n h = (item.height != null ? item.height : image.height) || 0,\n a = item.aspect === false ? 'none' : 'xMidYMid';\n\n x -= imageXOffset(item.align, w);\n y -= imageYOffset(item.baseline, h);\n\n emit('href', image.src || '', 'http://www.w3.org/1999/xlink', 'xlink:href');\n emit('transform', translate(x, y));\n emit('width', w);\n emit('height', h);\n emit('preserveAspectRatio', a);\n}\n\nfunction bound(bounds, item) {\n var image = item.image,\n x = item.x || 0,\n y = item.y || 0,\n w = (item.width != null ? item.width : (image && image.width)) || 0,\n h = (item.height != null ? item.height : (image && image.height)) || 0;\n\n x -= imageXOffset(item.align, w);\n y -= imageYOffset(item.baseline, h);\n\n return bounds.set(x, y, x + w, y + h);\n}\n\nfunction draw(context, scene, bounds) {\n var renderer = this;\n\n visit(scene, function(item) {\n if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n\n var image = getImage(item, renderer),\n x = item.x || 0,\n y = item.y || 0,\n w = (item.width != null ? item.width : image.width) || 0,\n h = (item.height != null ? item.height : image.height) || 0,\n opacity, ar0, ar1, t;\n\n x -= imageXOffset(item.align, w);\n y -= imageYOffset(item.baseline, h);\n\n if (item.aspect !== false) {\n ar0 = image.width / image.height;\n ar1 = item.width / item.height;\n if (ar0 === ar0 && ar1 === ar1 && ar0 !== ar1) {\n if (ar1 < ar0) {\n t = w / ar0;\n y += (h - t) / 2;\n h = t;\n } else {\n t = h * ar0;\n x += (w - t) / 2;\n w = t;\n }\n }\n }\n\n if (image.loaded) {\n context.globalAlpha = (opacity = item.opacity) != null ? opacity : 1;\n context.drawImage(image, x, y, w, h);\n }\n });\n}\n\nexport default {\n type: 'image',\n tag: 'image',\n nested: false,\n attr: attr,\n bound: bound,\n draw: draw,\n pick: pick(),\n isect: truthy, // bounds check is sufficient\n get: getImage,\n xOffset: imageXOffset,\n yOffset: imageYOffset\n};\n","import {line} from '../path/shapes';\nimport {pickLine} from '../util/pickPath';\nimport markMultiItemPath from './markMultiItemPath';\n\nexport default markMultiItemPath('line', line, pickLine);\n","import boundStroke from '../bound/boundStroke';\nimport context from '../bound/boundContext';\nimport pathParse from '../path/parse';\nimport pathRender from '../path/render';\nimport {intersectPath} from '../util/intersect';\nimport {drawAll} from '../util/canvas/draw';\nimport {pickPath} from '../util/canvas/pick';\nimport {translateItem} from '../util/svg/transform';\n\nfunction attr(emit, item) {\n emit('transform', translateItem(item));\n emit('d', item.path);\n}\n\nfunction path(context, item) {\n var path = item.path;\n if (path == null) return true;\n\n var cache = item.pathCache;\n if (!cache || cache.path !== path) {\n (item.pathCache = cache = pathParse(path)).path = path;\n }\n pathRender(context, cache, item.x, item.y);\n}\n\nfunction bound(bounds, item) {\n return path(context(bounds), item)\n ? bounds.set(0, 0, 0, 0)\n : boundStroke(bounds, item);\n}\n\nexport default {\n type: 'path',\n tag: 'path',\n nested: false,\n attr: attr,\n bound: bound,\n draw: drawAll(path),\n pick: pickPath(path),\n isect: intersectPath(path)\n};\n","import boundStroke from '../bound/boundStroke';\nimport {rectangle} from '../path/shapes';\nimport {intersectRect} from '../util/intersect';\nimport {drawAll} from '../util/canvas/draw';\nimport {pickPath} from '../util/canvas/pick';\n\nfunction attr(emit, item) {\n emit('d', rectangle(null, item));\n}\n\nfunction bound(bounds, item) {\n var x, y;\n return boundStroke(bounds.set(\n x = item.x || 0,\n y = item.y || 0,\n (x + item.width) || 0,\n (y + item.height) || 0\n ), item);\n}\n\nfunction draw(context, item) {\n context.beginPath();\n rectangle(context, item);\n}\n\nexport default {\n type: 'rect',\n tag: 'path',\n nested: false,\n attr: attr,\n bound: bound,\n draw: drawAll(draw),\n pick: pickPath(draw),\n isect: intersectRect\n};\n","import boundStroke from '../bound/boundStroke';\nimport {intersectRule} from '../util/intersect';\nimport {visit} from '../util/visit';\nimport {pick} from '../util/canvas/pick';\nimport stroke from '../util/canvas/stroke';\nimport {translateItem} from '../util/svg/transform';\n\nfunction attr(emit, item) {\n emit('transform', translateItem(item));\n emit('x2', item.x2 != null ? item.x2 - (item.x || 0) : 0);\n emit('y2', item.y2 != null ? item.y2 - (item.y || 0) : 0);\n}\n\nfunction bound(bounds, item) {\n var x1, y1;\n return boundStroke(bounds.set(\n x1 = item.x || 0,\n y1 = item.y || 0,\n item.x2 != null ? item.x2 : x1,\n item.y2 != null ? item.y2 : y1\n ), item);\n}\n\nfunction path(context, item, opacity) {\n var x1, y1, x2, y2;\n\n if (item.stroke && stroke(context, item, opacity)) {\n x1 = item.x || 0;\n y1 = item.y || 0;\n x2 = item.x2 != null ? item.x2 : x1;\n y2 = item.y2 != null ? item.y2 : y1;\n context.beginPath();\n context.moveTo(x1, y1);\n context.lineTo(x2, y2);\n return true;\n }\n return false;\n}\n\nfunction draw(context, scene, bounds) {\n visit(scene, function(item) {\n if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n var opacity = item.opacity == null ? 1 : item.opacity;\n if (opacity && path(context, item, opacity)) {\n context.stroke();\n }\n });\n}\n\nfunction hit(context, item, x, y) {\n if (!context.isPointInStroke) return false;\n return path(context, item, 1) && context.isPointInStroke(x, y);\n}\n\nexport default {\n type: 'rule',\n tag: 'line',\n nested: false,\n attr: attr,\n bound: bound,\n draw: draw,\n pick: pick(hit),\n isect: intersectRule\n};\n","import {shape} from '../path/shapes';\nimport markItemPath from './markItemPath';\n\nexport default markItemPath('shape', shape);\n","import {symbol} from '../path/shapes';\nimport {intersectPoint} from '../util/intersect';\nimport markItemPath from './markItemPath';\n\nexport default markItemPath('symbol', symbol, intersectPoint);\n","import {context} from './canvas/context';\n\nvar currFontHeight;\n\nexport var textMetrics = {\n height: fontSize,\n measureWidth: measureWidth,\n estimateWidth: estimateWidth,\n width: estimateWidth,\n canvas: useCanvas\n};\n\nuseCanvas(true);\n\n// make dumb, simple estimate if no canvas is available\nfunction estimateWidth(item) {\n currFontHeight = fontSize(item);\n return estimate(textValue(item));\n}\n\nfunction estimate(text) {\n return ~~(0.8 * text.length * currFontHeight);\n}\n\n// measure text width if canvas is available\nfunction measureWidth(item) {\n return fontSize(item) <= 0 ? 0\n : (context.font = font(item), measure(textValue(item)));\n}\n\nfunction measure(text) {\n return context.measureText(text).width;\n}\n\nexport function fontSize(item) {\n return item.fontSize != null ? item.fontSize : 11;\n}\n\nfunction useCanvas(use) {\n textMetrics.width = (use && context) ? measureWidth : estimateWidth;\n}\n\nexport function textValue(item) {\n var s = item.text;\n if (s == null) {\n return '';\n } else {\n return item.limit > 0 ? truncate(item) : s + '';\n }\n}\n\nexport function truncate(item) {\n var limit = +item.limit,\n text = item.text + '',\n width;\n\n if (textMetrics.width === measureWidth) {\n // we are using canvas\n context.font = font(item);\n width = measure;\n } else {\n // we are relying on estimates\n currFontHeight = fontSize(item);\n width = estimate;\n }\n\n if (width(text) < limit) return text;\n\n var ellipsis = item.ellipsis || '\\u2026',\n rtl = item.dir === 'rtl',\n lo = 0,\n hi = text.length, mid;\n\n limit -= width(ellipsis);\n\n if (rtl) {\n while (lo < hi) {\n mid = (lo + hi >>> 1);\n if (width(text.slice(mid)) > limit) lo = mid + 1;\n else hi = mid;\n }\n return ellipsis + text.slice(lo);\n } else {\n while (lo < hi) {\n mid = 1 + (lo + hi >>> 1);\n if (width(text.slice(0, mid)) < limit) lo = mid;\n else hi = mid - 1;\n }\n return text.slice(0, lo) + ellipsis;\n }\n}\n\nexport function fontFamily(item, quote) {\n var font = item.font;\n return (quote && font\n ? String(font).replace(/\"/g, '\\'')\n : font) || 'sans-serif';\n}\n\nexport function font(item, quote) {\n return '' +\n (item.fontStyle ? item.fontStyle + ' ' : '') +\n (item.fontVariant ? item.fontVariant + ' ' : '') +\n (item.fontWeight ? item.fontWeight + ' ' : '') +\n fontSize(item) + 'px ' +\n fontFamily(item, quote);\n}\n\nexport function offset(item) {\n // perform our own font baseline calculation\n // why? not all browsers support SVG 1.1 'alignment-baseline' :(\n var baseline = item.baseline,\n h = fontSize(item);\n return Math.round(\n baseline === 'top' ? 0.79*h :\n baseline === 'middle' ? 0.30*h :\n baseline === 'bottom' ? -0.21*h : 0\n );\n}\n","import Bounds from '../Bounds';\nimport {DegToRad, HalfPi} from '../util/constants';\nimport {font, offset, textMetrics, textValue} from '../util/text';\nimport {intersectBoxLine} from '../util/intersect';\nimport {visit} from '../util/visit';\nimport fill from '../util/canvas/fill';\nimport {pick} from '../util/canvas/pick';\nimport stroke from '../util/canvas/stroke';\nimport {translate, rotate} from '../util/svg/transform';\n\nvar textAlign = {\n 'left': 'start',\n 'center': 'middle',\n 'right': 'end'\n};\n\nvar tempBounds = new Bounds();\n\nfunction anchorPoint(item) {\n var x = item.x || 0,\n y = item.y || 0,\n r = item.radius || 0, t;\n\n if (r) {\n t = (item.theta || 0) - HalfPi;\n x += r * Math.cos(t);\n y += r * Math.sin(t);\n }\n\n tempBounds.x1 = x;\n tempBounds.y1 = y;\n return tempBounds;\n}\n\nfunction attr(emit, item) {\n var dx = item.dx || 0,\n dy = (item.dy || 0) + offset(item),\n p = anchorPoint(item),\n x = p.x1,\n y = p.y1,\n a = item.angle || 0, t;\n\n emit('text-anchor', textAlign[item.align] || 'start');\n\n if (a) {\n t = translate(x, y) + ' ' + rotate(a);\n if (dx || dy) t += ' ' + translate(dx, dy);\n } else {\n t = translate(x + dx, y + dy);\n }\n emit('transform', t);\n}\n\nfunction bound(bounds, item, mode) {\n var h = textMetrics.height(item),\n a = item.align,\n p = anchorPoint(item),\n x = p.x1,\n y = p.y1,\n dx = item.dx || 0,\n dy = (item.dy || 0) + offset(item) - Math.round(0.8*h), // use 4/5 offset\n w;\n\n // horizontal alignment\n w = textMetrics.width(item);\n if (a === 'center') {\n dx -= (w / 2);\n } else if (a === 'right') {\n dx -= w;\n } else {\n // left by default, do nothing\n }\n\n bounds.set(dx+=x, dy+=y, dx+w, dy+h);\n if (item.angle && !mode) {\n bounds.rotate(item.angle * DegToRad, x, y);\n } else if (mode === 2) {\n return bounds.rotatedPoints(item.angle * DegToRad, x, y);\n }\n return bounds;\n}\n\nfunction draw(context, scene, bounds) {\n visit(scene, function(item) {\n var opacity, p, x, y, str;\n if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n if (!(str = textValue(item))) return; // get text string\n\n opacity = item.opacity == null ? 1 : item.opacity;\n if (opacity === 0 || item.fontSize <= 0) return;\n\n context.font = font(item);\n context.textAlign = item.align || 'left';\n\n p = anchorPoint(item);\n x = p.x1,\n y = p.y1;\n\n if (item.angle) {\n context.save();\n context.translate(x, y);\n context.rotate(item.angle * DegToRad);\n x = y = 0; // reset x, y\n }\n x += (item.dx || 0);\n y += (item.dy || 0) + offset(item);\n\n if (item.fill && fill(context, item, opacity)) {\n context.fillText(str, x, y);\n }\n if (item.stroke && stroke(context, item, opacity)) {\n context.strokeText(str, x, y);\n }\n if (item.angle) context.restore();\n });\n}\n\nfunction hit(context, item, x, y, gx, gy) {\n if (item.fontSize <= 0) return false;\n if (!item.angle) return true; // bounds sufficient if no rotation\n\n // project point into space of unrotated bounds\n var p = anchorPoint(item),\n ax = p.x1,\n ay = p.y1,\n b = bound(tempBounds, item, 1),\n a = -item.angle * DegToRad,\n cos = Math.cos(a),\n sin = Math.sin(a),\n px = cos * gx - sin * gy + (ax - cos * ax + sin * ay),\n py = sin * gx + cos * gy + (ay - sin * ax - cos * ay);\n\n return b.contains(px, py);\n}\n\nfunction intersectText(item, box) {\n var p = bound(tempBounds, item, 2);\n return intersectBoxLine(box, p[0], p[1], p[2], p[3])\n || intersectBoxLine(box, p[0], p[1], p[4], p[5])\n || intersectBoxLine(box, p[4], p[5], p[6], p[7])\n || intersectBoxLine(box, p[2], p[3], p[6], p[7]);\n}\n\nexport default {\n type: 'text',\n tag: 'text',\n nested: false,\n attr: attr,\n bound: bound,\n draw: draw,\n pick: pick(hit),\n isect: intersectText\n};\n","import {trail} from '../path/shapes';\nimport {pickTrail} from '../util/pickPath';\nimport markMultiItemPath from './markMultiItemPath';\n\nexport default markMultiItemPath('trail', trail, pickTrail);\n","import arc from './arc';\nimport area from './area';\nimport group from './group';\nimport image from './image';\nimport line from './line';\nimport path from './path';\nimport rect from './rect';\nimport rule from './rule';\nimport shape from './shape';\nimport symbol from './symbol';\nimport text from './text';\nimport trail from './trail';\n\nexport default {\n arc: arc,\n area: area,\n group: group,\n image: image,\n line: line,\n path: path,\n rect: rect,\n rule: rule,\n shape: shape,\n symbol: symbol,\n text: text,\n trail: trail\n};\n","import Bounds from '../Bounds';\nimport marks from '../marks/index';\n\nexport default function(item, func, opt) {\n var type = marks[item.mark.marktype],\n bound = func || type.bound;\n if (type.nested) item = item.mark;\n\n return bound(item.bounds || (item.bounds = new Bounds()), item, opt);\n}\n","import Bounds from '../Bounds';\nimport boundItem from './boundItem';\nimport marks from '../marks/index';\n\nvar DUMMY = {mark: null};\n\nexport default function(mark, bounds, opt) {\n var type = marks[mark.marktype],\n bound = type.bound,\n items = mark.items,\n hasItems = items && items.length,\n i, n, item, b;\n\n if (type.nested) {\n if (hasItems) {\n item = items[0];\n } else {\n // no items, fake it\n DUMMY.mark = mark;\n item = DUMMY;\n }\n b = boundItem(item, bound, opt);\n bounds = bounds && bounds.union(b) || b;\n return bounds;\n }\n\n bounds = bounds\n || mark.bounds && mark.bounds.clear()\n || new Bounds();\n\n if (hasItems) {\n for (i=0, n=items.length; i index) el.removeChild(nodes[--curr]);\n return el;\n}\n\n// generate css class name for mark\nexport function cssClass(mark) {\n return 'mark-' + mark.marktype\n + (mark.role ? ' role-' + mark.role : '')\n + (mark.name ? ' ' + mark.name : '');\n}\n","export default function(event, el) {\n var rect = el.getBoundingClientRect();\n return [\n event.clientX - rect.left - (el.clientLeft || 0),\n event.clientY - rect.top - (el.clientTop || 0)\n ];\n}\n","import marks from '../marks/index';\nimport point from './point';\n\nexport default function(item, event, el, origin) {\n var mark = item && item.mark,\n mdef, p;\n\n if (mark && (mdef = marks[mark.marktype]).tip) {\n p = point(event, el);\n p[0] -= origin[0];\n p[1] -= origin[1];\n while (item = item.mark.group) {\n p[0] -= item.x || 0;\n p[1] -= item.y || 0;\n }\n item = mdef.tip(mark.items, p);\n }\n\n return item;\n}\n","import {domCreate} from './util/dom';\nimport resolveItem from './util/resolveItem';\nimport {loader} from 'vega-loader';\n\n/**\n * Create a new Handler instance.\n * @param {object} [customLoader] - Optional loader instance for\n * href URL sanitization. If not specified, a standard loader\n * instance will be generated.\n * @param {function} [customTooltip] - Optional tooltip handler\n * function for custom tooltip display.\n * @constructor\n */\nexport default function Handler(customLoader, customTooltip) {\n this._active = null;\n this._handlers = {};\n this._loader = customLoader || loader();\n this._tooltip = customTooltip || defaultTooltip;\n}\n\n// The default tooltip display handler.\n// Sets the HTML title attribute on the visualization container.\nfunction defaultTooltip(handler, event, item, value) {\n handler.element().setAttribute('title', value || '');\n}\n\nvar prototype = Handler.prototype;\n\n/**\n * Initialize a new Handler instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {object} [obj] - Optional context object that should serve as\n * the \"this\" context for event callbacks.\n * @return {Handler} - This handler instance.\n */\nprototype.initialize = function(el, origin, obj) {\n this._el = el;\n this._obj = obj || null;\n return this.origin(origin);\n};\n\n/**\n * Returns the parent container element for a visualization.\n * @return {DOMElement} - The containing DOM element.\n */\nprototype.element = function() {\n return this._el;\n};\n\n/**\n * Returns the scene element (e.g., canvas or SVG) of the visualization\n * Subclasses must override if the first child is not the scene element.\n * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n */\nprototype.canvas = function() {\n return this._el && this._el.firstChild;\n};\n\n/**\n * Get / set the origin coordinates of the visualization.\n */\nprototype.origin = function(origin) {\n if (arguments.length) {\n this._origin = origin || [0, 0];\n return this;\n } else {\n return this._origin.slice();\n }\n};\n\n/**\n * Get / set the scenegraph root.\n */\nprototype.scene = function(scene) {\n if (!arguments.length) return this._scene;\n this._scene = scene;\n return this;\n};\n\n/**\n * Add an event handler. Subclasses should override this method.\n */\nprototype.on = function(/*type, handler*/) {};\n\n/**\n * Remove an event handler. Subclasses should override this method.\n */\nprototype.off = function(/*type, handler*/) {};\n\n/**\n * Utility method for finding the array index of an event handler.\n * @param {Array} h - An array of registered event handlers.\n * @param {string} type - The event type.\n * @param {function} handler - The event handler instance to find.\n * @return {number} - The handler's array index or -1 if not registered.\n */\nprototype._handlerIndex = function(h, type, handler) {\n for (var i = h ? h.length : 0; --i>=0;) {\n if (h[i].type === type && (!handler || h[i].handler === handler)) {\n return i;\n }\n }\n return -1;\n};\n\n/**\n * Returns an array with registered event handlers.\n * @param {string} [type] - The event type to query. Any annotations\n * are ignored; for example, for the argument \"click.foo\", \".foo\" will\n * be ignored and the method returns all \"click\" handlers. If type is\n * null or unspecified, this method returns handlers for all types.\n * @return {Array} - A new array containing all registered event handlers.\n */\nprototype.handlers = function(type) {\n var h = this._handlers, a = [], k;\n if (type) {\n a.push.apply(a, h[this.eventName(type)]);\n } else {\n for (k in h) { a.push.apply(a, h[k]); }\n }\n return a;\n};\n\n/**\n * Parses an event name string to return the specific event type.\n * For example, given \"click.foo\" returns \"click\"\n * @param {string} name - The input event type string.\n * @return {string} - A string with the event type only.\n */\nprototype.eventName = function(name) {\n var i = name.indexOf('.');\n return i < 0 ? name : name.slice(0,i);\n};\n\n/**\n * Handle hyperlink navigation in response to an item.href value.\n * @param {Event} event - The event triggering hyperlink navigation.\n * @param {Item} item - The scenegraph item.\n * @param {string} href - The URL to navigate to.\n */\nprototype.handleHref = function(event, item, href) {\n this._loader\n .sanitize(href, {context:'href'})\n .then(function(opt) {\n var e = new MouseEvent(event.type, event),\n a = domCreate(null, 'a');\n for (var name in opt) a.setAttribute(name, opt[name]);\n a.dispatchEvent(e);\n })\n .catch(function() { /* do nothing */ });\n};\n\n/**\n * Handle tooltip display in response to an item.tooltip value.\n * @param {Event} event - The event triggering tooltip display.\n * @param {Item} item - The scenegraph item.\n * @param {boolean} show - A boolean flag indicating whether\n * to show or hide a tooltip for the given item.\n */\nprototype.handleTooltip = function(event, item, show) {\n if (item && item.tooltip != null) {\n item = resolveItem(item, event, this.canvas(), this._origin);\n var value = (show && item && item.tooltip) || null;\n this._tooltip.call(this._obj, this, event, item, value);\n }\n};\n\n/**\n * Returns the size of a scenegraph item and its position relative\n * to the viewport.\n * @param {Item} item - The scenegraph item.\n * @return {object} - A bounding box object (compatible with the\n * DOMRect type) consisting of x, y, width, heigh, top, left,\n * right, and bottom properties.\n */\nprototype.getItemBoundingClientRect = function(item) {\n if (!(el = this.canvas())) return;\n\n var el, rect = el.getBoundingClientRect(),\n origin = this._origin,\n itemBounds = item.bounds,\n x = itemBounds.x1 + origin[0] + rect.left,\n y = itemBounds.y1 + origin[1] + rect.top,\n w = itemBounds.width(),\n h = itemBounds.height();\n\n // translate coordinate for each parent group\n while (item.mark && (item = item.mark.group)) {\n x += item.x || 0;\n y += item.y || 0;\n }\n\n // return DOMRect-compatible bounding box\n return {\n x: x,\n y: y,\n width: w,\n height: h,\n left: x,\n top: y,\n right: x + w,\n bottom: y + h\n };\n};\n","import ResourceLoader from './ResourceLoader';\n\n/**\n * Create a new Renderer instance.\n * @param {object} [loader] - Optional loader instance for\n * image and href URL sanitization. If not specified, a\n * standard loader instance will be generated.\n * @constructor\n */\nexport default function Renderer(loader) {\n this._el = null;\n this._bgcolor = null;\n this._loader = new ResourceLoader(loader);\n}\n\nvar prototype = Renderer.prototype;\n\n/**\n * Initialize a new Renderer instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {number} width - The coordinate width of the display, in pixels.\n * @param {number} height - The coordinate height of the display, in pixels.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {Renderer} - This renderer instance.\n */\nprototype.initialize = function(el, width, height, origin, scaleFactor) {\n this._el = el;\n return this.resize(width, height, origin, scaleFactor);\n};\n\n/**\n * Returns the parent container element for a visualization.\n * @return {DOMElement} - The containing DOM element.\n */\nprototype.element = function() {\n return this._el;\n};\n\n/**\n * Returns the scene element (e.g., canvas or SVG) of the visualization\n * Subclasses must override if the first child is not the scene element.\n * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n */\nprototype.canvas = function() {\n return this._el && this._el.firstChild;\n};\n\n/**\n * Get / set the background color.\n */\nprototype.background = function(bgcolor) {\n if (arguments.length === 0) return this._bgcolor;\n this._bgcolor = bgcolor;\n return this;\n};\n\n/**\n * Resize the display.\n * @param {number} width - The new coordinate width of the display, in pixels.\n * @param {number} height - The new coordinate height of the display, in pixels.\n * @param {Array} origin - The new origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {Renderer} - This renderer instance;\n */\nprototype.resize = function(width, height, origin, scaleFactor) {\n this._width = width;\n this._height = height;\n this._origin = origin || [0, 0];\n this._scale = scaleFactor || 1;\n return this;\n};\n\n/**\n * Report a dirty item whose bounds should be redrawn.\n * This base class method does nothing. Subclasses that perform\n * incremental should implement this method.\n * @param {Item} item - The dirty item whose bounds should be redrawn.\n */\nprototype.dirty = function(/*item*/) {\n};\n\n/**\n * Render an input scenegraph, potentially with a set of dirty items.\n * This method will perform an immediate rendering with available resources.\n * The renderer may also need to perform image loading to perform a complete\n * render. This process can lead to asynchronous re-rendering of the scene\n * after this method returns. To receive notification when rendering is\n * complete, use the renderAsync method instead.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @return {Renderer} - This renderer instance.\n */\nprototype.render = function(scene) {\n var r = this;\n\n // bind arguments into a render call, and cache it\n // this function may be subsequently called for async redraw\n r._call = function() { r._render(scene); };\n\n // invoke the renderer\n r._call();\n\n // clear the cached call for garbage collection\n // async redraws will stash their own copy\n r._call = null;\n\n return r;\n};\n\n/**\n * Internal rendering method. Renderer subclasses should override this\n * method to actually perform rendering.\n * @param {object} scene - The root mark of a scenegraph to render.\n */\nprototype._render = function(/*scene*/) {\n // subclasses to override\n};\n\n/**\n * Asynchronous rendering method. Similar to render, but returns a Promise\n * that resolves when all rendering is completed. Sometimes a renderer must\n * perform image loading to get a complete rendering. The returned\n * Promise will not resolve until this process completes.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @return {Promise} - A Promise that resolves when rendering is complete.\n */\nprototype.renderAsync = function(scene) {\n var r = this.render(scene);\n return this._ready\n ? this._ready.then(function() { return r; })\n : Promise.resolve(r);\n};\n\n/**\n * Internal method for asynchronous resource loading.\n * Proxies method calls to the ImageLoader, and tracks loading\n * progress to invoke a re-render once complete.\n * @param {string} method - The method name to invoke on the ImageLoader.\n * @param {string} uri - The URI for the requested resource.\n * @return {Promise} - A Promise that resolves to the requested resource.\n */\nprototype._load = function(method, uri) {\n var r = this,\n p = r._loader[method](uri);\n\n if (!r._ready) {\n // re-render the scene when loading completes\n var call = r._call;\n r._ready = r._loader.ready()\n .then(function(redraw) {\n if (redraw) call();\n r._ready = null;\n });\n }\n\n return p;\n};\n\n/**\n * Sanitize a URL to include as a hyperlink in the rendered scene.\n * This method proxies a call to ImageLoader.sanitizeURL, but also tracks\n * image loading progress and invokes a re-render once complete.\n * @param {string} uri - The URI string to sanitize.\n * @return {Promise} - A Promise that resolves to the sanitized URL.\n */\nprototype.sanitizeURL = function(uri) {\n return this._load('sanitizeURL', uri);\n};\n\n/**\n * Requests an image to include in the rendered scene.\n * This method proxies a call to ImageLoader.loadImage, but also tracks\n * image loading progress and invokes a re-render once complete.\n * @param {string} uri - The URI string of the image.\n * @return {Promise} - A Promise that resolves to the loaded Image.\n */\nprototype.loadImage = function(uri) {\n return this._load('loadImage', uri);\n};\n","export var Events = [\n 'keydown',\n 'keypress',\n 'keyup',\n 'dragenter',\n 'dragleave',\n 'dragover',\n 'mousedown',\n 'mouseup',\n 'mousemove',\n 'mouseout',\n 'mouseover',\n 'click',\n 'dblclick',\n 'wheel',\n 'mousewheel',\n 'touchstart',\n 'touchmove',\n 'touchend'\n];\n\nexport var TooltipShowEvent = 'mousemove';\n\nexport var TooltipHideEvent = 'mouseout';\n\nexport var HrefEvent = 'click';\n","import Handler from './Handler';\nimport Marks from './marks/index';\nimport {Events, HrefEvent, TooltipShowEvent, TooltipHideEvent} from './util/events';\nimport point from './util/point';\nimport {domFind} from './util/dom';\nimport {inherits} from 'vega-util';\n\nexport default function CanvasHandler(loader, tooltip) {\n Handler.call(this, loader, tooltip);\n this._down = null;\n this._touch = null;\n this._first = true;\n}\n\nvar prototype = inherits(CanvasHandler, Handler);\n\nprototype.initialize = function(el, origin, obj) {\n // add event listeners\n var canvas = this._canvas = el && domFind(el, 'canvas');\n if (canvas) {\n var that = this;\n this.events.forEach(function(type) {\n canvas.addEventListener(type, function(evt) {\n if (prototype[type]) {\n prototype[type].call(that, evt);\n } else {\n that.fire(type, evt);\n }\n });\n });\n }\n\n return Handler.prototype.initialize.call(this, el, origin, obj);\n};\n\n// return the backing canvas instance\nprototype.canvas = function() {\n return this._canvas;\n};\n\n// retrieve the current canvas context\nprototype.context = function() {\n return this._canvas.getContext('2d');\n};\n\n// supported events\nprototype.events = Events;\n\n// to keep old versions of firefox happy\nprototype.DOMMouseScroll = function(evt) {\n this.fire('mousewheel', evt);\n};\n\nfunction move(moveEvent, overEvent, outEvent) {\n return function(evt) {\n var a = this._active,\n p = this.pickEvent(evt);\n\n if (p === a) {\n // active item and picked item are the same\n this.fire(moveEvent, evt); // fire move\n } else {\n // active item and picked item are different\n if (!a || !a.exit) {\n // fire out for prior active item\n // suppress if active item was removed from scene\n this.fire(outEvent, evt);\n }\n this._active = p; // set new active item\n this.fire(overEvent, evt); // fire over for new active item\n this.fire(moveEvent, evt); // fire move for new active item\n }\n };\n}\n\nfunction inactive(type) {\n return function(evt) {\n this.fire(type, evt);\n this._active = null;\n };\n}\n\nprototype.mousemove = move('mousemove', 'mouseover', 'mouseout');\nprototype.dragover = move('dragover', 'dragenter', 'dragleave');\n\nprototype.mouseout = inactive('mouseout');\nprototype.dragleave = inactive('dragleave');\n\nprototype.mousedown = function(evt) {\n this._down = this._active;\n this.fire('mousedown', evt);\n};\n\nprototype.click = function(evt) {\n if (this._down === this._active) {\n this.fire('click', evt);\n this._down = null;\n }\n};\n\nprototype.touchstart = function(evt) {\n this._touch = this.pickEvent(evt.changedTouches[0]);\n\n if (this._first) {\n this._active = this._touch;\n this._first = false;\n }\n\n this.fire('touchstart', evt, true);\n};\n\nprototype.touchmove = function(evt) {\n this.fire('touchmove', evt, true);\n};\n\nprototype.touchend = function(evt) {\n this.fire('touchend', evt, true);\n this._touch = null;\n};\n\n// fire an event\nprototype.fire = function(type, evt, touch) {\n var a = touch ? this._touch : this._active,\n h = this._handlers[type], i, len;\n\n // set event type relative to scenegraph items\n evt.vegaType = type;\n\n // handle hyperlinks and tooltips first\n if (type === HrefEvent && a && a.href) {\n this.handleHref(evt, a, a.href);\n } else if (type === TooltipShowEvent || type === TooltipHideEvent) {\n this.handleTooltip(evt, a, type !== TooltipHideEvent);\n }\n\n // invoke all registered handlers\n if (h) {\n for (i=0, len=h.length; i= 0) {\n h.splice(i, 1);\n }\n\n return this;\n};\n\nprototype.pickEvent = function(evt) {\n var p = point(evt, this._canvas),\n o = this._origin;\n return this.pick(this._scene, p[0], p[1], p[0] - o[0], p[1] - o[1]);\n};\n\n// find the scenegraph item at the current mouse position\n// x, y -- the absolute x, y mouse coordinates on the canvas element\n// gx, gy -- the relative coordinates within the current group\nprototype.pick = function(scene, x, y, gx, gy) {\n var g = this.context(),\n mark = Marks[scene.marktype];\n return mark.pick.call(this, g, scene, x, y, gx, gy);\n};\n","import {isFunction} from 'vega-util';\n\nexport default function(context, scene) {\n var clip = scene.clip;\n\n context.save();\n context.beginPath();\n\n if (isFunction(clip)) {\n clip(context);\n } else {\n var group = scene.group;\n context.rect(0, 0, group.width || 0, group.height || 0);\n }\n\n context.clip();\n}\n","function devicePixelRatio() {\n return typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1;\n}\n\nvar pixelRatio = devicePixelRatio();\n\nexport default function(canvas, width, height, origin, scaleFactor, opt) {\n var inDOM = typeof HTMLElement !== 'undefined'\n && canvas instanceof HTMLElement\n && canvas.parentNode != null;\n\n var context = canvas.getContext('2d'),\n ratio = inDOM ? pixelRatio : scaleFactor,\n key;\n\n canvas.width = width * ratio;\n canvas.height = height * ratio;\n\n for (key in opt) {\n context[key] = opt[key];\n }\n\n if (inDOM && ratio !== 1) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n\n context.pixelRatio = ratio;\n context.setTransform(\n ratio, 0, 0, ratio,\n ratio * origin[0],\n ratio * origin[1]\n );\n\n return canvas;\n}\n","import Renderer from './Renderer';\nimport Bounds from './Bounds';\nimport marks from './marks/index';\n\nimport {domClear} from './util/dom';\nimport clip from './util/canvas/clip';\nimport resize from './util/canvas/resize';\nimport {canvas} from 'vega-canvas';\nimport {inherits} from 'vega-util';\n\nexport default function CanvasRenderer(loader) {\n Renderer.call(this, loader);\n this._redraw = false;\n this._dirty = new Bounds();\n}\n\nvar prototype = inherits(CanvasRenderer, Renderer),\n base = Renderer.prototype,\n tempBounds = new Bounds();\n\nprototype.initialize = function(el, width, height, origin, scaleFactor, options) {\n this._options = options;\n this._canvas = canvas(1, 1, options && options.type); // instantiate a small canvas\n\n if (el) {\n domClear(el, 0).appendChild(this._canvas);\n this._canvas.setAttribute('class', 'marks');\n }\n // this method will invoke resize to size the canvas appropriately\n return base.initialize.call(this, el, width, height, origin, scaleFactor);\n};\n\nprototype.resize = function(width, height, origin, scaleFactor) {\n base.resize.call(this, width, height, origin, scaleFactor);\n resize(this._canvas, this._width, this._height,\n this._origin, this._scale, this._options && this._options.context);\n this._redraw = true;\n return this;\n};\n\nprototype.canvas = function() {\n return this._canvas;\n};\n\nprototype.context = function() {\n return this._canvas ? this._canvas.getContext('2d') : null;\n};\n\nprototype.dirty = function(item) {\n var b = translate(item.bounds, item.mark.group);\n this._dirty.union(b);\n};\n\nfunction clipToBounds(g, b, origin) {\n // expand bounds by 1 pixel, then round to pixel boundaries\n b.expand(1).round();\n\n // to avoid artifacts translate if origin has fractional pixels\n b.translate(-(origin[0] % 1), -(origin[1] % 1));\n\n // set clipping path\n g.beginPath();\n g.rect(b.x1, b.y1, b.width(), b.height());\n g.clip();\n\n return b;\n}\n\nfunction translate(bounds, group) {\n if (group == null) return bounds;\n var b = tempBounds.clear().union(bounds);\n for (; group != null; group = group.mark.group) {\n b.translate(group.x || 0, group.y || 0);\n }\n return b;\n}\n\nprototype._render = function(scene) {\n var g = this.context(),\n o = this._origin,\n w = this._width,\n h = this._height,\n b = this._dirty;\n\n // setup\n g.save();\n if (this._redraw || b.empty()) {\n this._redraw = false;\n b = null;\n } else {\n b = clipToBounds(g, b, o);\n }\n\n this.clear(-o[0], -o[1], w, h);\n\n // render\n this.draw(g, scene, b);\n\n // takedown\n g.restore();\n\n this._dirty.clear();\n return this;\n};\n\nprototype.draw = function(ctx, scene, bounds) {\n var mark = marks[scene.marktype];\n if (scene.clip) clip(ctx, scene);\n mark.draw.call(this, ctx, scene, bounds);\n if (scene.clip) ctx.restore();\n};\n\nprototype.clear = function(x, y, w, h) {\n var g = this.context();\n g.clearRect(x, y, w, h);\n if (this._bgcolor != null) {\n g.fillStyle = this._bgcolor;\n g.fillRect(x, y, w, h);\n }\n};\n","import Handler from './Handler';\nimport {domFind} from './util/dom';\nimport {HrefEvent, TooltipShowEvent, TooltipHideEvent} from './util/events';\nimport {inherits} from 'vega-util';\n\nexport default function SVGHandler(loader, tooltip) {\n Handler.call(this, loader, tooltip);\n var h = this;\n h._hrefHandler = listener(h, function(evt, item) {\n if (item && item.href) h.handleHref(evt, item, item.href);\n });\n h._tooltipHandler = listener(h, function(evt, item) {\n h.handleTooltip(evt, item, evt.type !== TooltipHideEvent);\n });\n}\n\nvar prototype = inherits(SVGHandler, Handler);\n\nprototype.initialize = function(el, origin, obj) {\n var svg = this._svg;\n if (svg) {\n svg.removeEventListener(HrefEvent, this._hrefHandler);\n svg.removeEventListener(TooltipShowEvent, this._tooltipHandler);\n svg.removeEventListener(TooltipHideEvent, this._tooltipHandler);\n }\n this._svg = svg = el && domFind(el, 'svg');\n if (svg) {\n svg.addEventListener(HrefEvent, this._hrefHandler);\n svg.addEventListener(TooltipShowEvent, this._tooltipHandler);\n svg.addEventListener(TooltipHideEvent, this._tooltipHandler);\n }\n return Handler.prototype.initialize.call(this, el, origin, obj);\n};\n\nprototype.canvas = function() {\n return this._svg;\n};\n\n// wrap an event listener for the SVG DOM\nfunction listener(context, handler) {\n return function(evt) {\n var target = evt.target,\n item = target.__data__;\n evt.vegaType = evt.type;\n item = Array.isArray(item) ? item[0] : item;\n handler.call(context._obj, evt, item);\n };\n}\n\n// add an event handler\nprototype.on = function(type, handler) {\n var name = this.eventName(type),\n h = this._handlers,\n i = this._handlerIndex(h[name], type, handler);\n\n if (i < 0) {\n var x = {\n type: type,\n handler: handler,\n listener: listener(this, handler)\n };\n\n (h[name] || (h[name] = [])).push(x);\n if (this._svg) {\n this._svg.addEventListener(name, x.listener);\n }\n }\n\n return this;\n};\n\n// remove an event handler\nprototype.off = function(type, handler) {\n var name = this.eventName(type),\n h = this._handlers[name],\n i = this._handlerIndex(h, type, handler);\n\n if (i >= 0) {\n if (this._svg) {\n this._svg.removeEventListener(name, h[i].listener);\n }\n h.splice(i, 1);\n }\n\n return this;\n};\n","// generate string for an opening xml tag\n// tag: the name of the xml tag\n// attr: hash of attribute name-value pairs to include\n// raw: additional raw string to include in tag markup\nexport function openTag(tag, attr, raw) {\n var s = '<' + tag, key, val;\n if (attr) {\n for (key in attr) {\n val = attr[key];\n if (val != null) {\n s += ' ' + key + '=\"' + val + '\"';\n }\n }\n }\n if (raw) s += ' ' + raw;\n return s + '>';\n}\n\n// generate string for closing xml tag\n// tag: the name of the xml tag\nexport function closeTag(tag) {\n return '';\n}\n","export default {\n 'version': '1.1',\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'xmlns:xlink': 'http://www.w3.org/1999/xlink'\n};","export var styles = {\n 'fill': 'fill',\n 'fillOpacity': 'fill-opacity',\n 'stroke': 'stroke',\n 'strokeOpacity': 'stroke-opacity',\n 'strokeWidth': 'stroke-width',\n 'strokeCap': 'stroke-linecap',\n 'strokeJoin': 'stroke-linejoin',\n 'strokeDash': 'stroke-dasharray',\n 'strokeDashOffset': 'stroke-dashoffset',\n 'strokeMiterLimit': 'stroke-miterlimit',\n 'opacity': 'opacity'\n};\n\nexport var styleProperties = Object.keys(styles);\n","import Renderer from './Renderer';\nimport {gradientRef, isGradient, patternPrefix} from './Gradient';\nimport marks from './marks/index';\nimport {domChild, domClear, domCreate, cssClass} from './util/dom';\nimport {openTag, closeTag} from './util/tags';\nimport {fontFamily, fontSize, textValue} from './util/text';\nimport {visit} from './util/visit';\nimport clip from './util/svg/clip';\nimport metadata from './util/svg/metadata';\nimport {styles, styleProperties} from './util/svg/styles';\nimport {inherits} from 'vega-util';\n\nvar ns = metadata.xmlns;\n\nexport default function SVGRenderer(loader) {\n Renderer.call(this, loader);\n this._dirtyID = 1;\n this._dirty = [];\n this._svg = null;\n this._root = null;\n this._defs = null;\n}\n\nvar prototype = inherits(SVGRenderer, Renderer);\nvar base = Renderer.prototype;\n\nprototype.initialize = function(el, width, height, padding) {\n if (el) {\n this._svg = domChild(el, 0, 'svg', ns);\n this._svg.setAttribute('class', 'marks');\n domClear(el, 1);\n // set the svg root group\n this._root = domChild(this._svg, 0, 'g', ns);\n domClear(this._svg, 1);\n }\n\n // create the svg definitions cache\n this._defs = {\n gradient: {},\n clipping: {}\n };\n\n // set background color if defined\n this.background(this._bgcolor);\n\n return base.initialize.call(this, el, width, height, padding);\n};\n\nprototype.background = function(bgcolor) {\n if (arguments.length && this._svg) {\n this._svg.style.setProperty('background-color', bgcolor);\n }\n return base.background.apply(this, arguments);\n};\n\nprototype.resize = function(width, height, origin, scaleFactor) {\n base.resize.call(this, width, height, origin, scaleFactor);\n\n if (this._svg) {\n this._svg.setAttribute('width', this._width * this._scale);\n this._svg.setAttribute('height', this._height * this._scale);\n this._svg.setAttribute('viewBox', '0 0 ' + this._width + ' ' + this._height);\n this._root.setAttribute('transform', 'translate(' + this._origin + ')');\n }\n\n this._dirty = [];\n\n return this;\n};\n\nprototype.canvas = function() {\n return this._svg;\n};\n\nprototype.svg = function() {\n if (!this._svg) return null;\n\n var attr = {\n class: 'marks',\n width: this._width * this._scale,\n height: this._height * this._scale,\n viewBox: '0 0 ' + this._width + ' ' + this._height\n };\n for (var key in metadata) {\n attr[key] = metadata[key];\n }\n\n var bg = !this._bgcolor ? ''\n : (openTag('rect', {\n width: this._width,\n height: this._height,\n style: 'fill: ' + this._bgcolor + ';'\n }) + closeTag('rect'));\n\n return openTag('svg', attr) + bg + this._svg.innerHTML + closeTag('svg');\n};\n\n\n// -- Render entry point --\n\nprototype._render = function(scene) {\n // perform spot updates and re-render markup\n if (this._dirtyCheck()) {\n if (this._dirtyAll) this._resetDefs();\n this.draw(this._root, scene);\n domClear(this._root, 1);\n }\n\n this.updateDefs();\n\n this._dirty = [];\n ++this._dirtyID;\n\n return this;\n};\n\n// -- Manage SVG definitions ('defs') block --\n\nprototype.updateDefs = function() {\n var svg = this._svg,\n defs = this._defs,\n el = defs.el,\n index = 0, id;\n\n for (id in defs.gradient) {\n if (!el) defs.el = (el = domChild(svg, 0, 'defs', ns));\n index = updateGradient(el, defs.gradient[id], index);\n }\n\n for (id in defs.clipping) {\n if (!el) defs.el = (el = domChild(svg, 0, 'defs', ns));\n index = updateClipping(el, defs.clipping[id], index);\n }\n\n // clean-up\n if (el) {\n if (index === 0) {\n svg.removeChild(el);\n defs.el = null;\n } else {\n domClear(el, index);\n }\n }\n};\n\nfunction updateGradient(el, grad, index) {\n var i, n, stop;\n\n if (grad.gradient === 'radial') {\n // SVG radial gradients automatically transform to normalized bbox\n // coordinates, in a way that is cumbersome to replicate in canvas.\n // So we wrap the radial gradient in a pattern element, allowing us\n // to mantain a circular gradient that matches what canvas provides.\n var pt = domChild(el, index++, 'pattern', ns);\n pt.setAttribute('id', patternPrefix + grad.id);\n pt.setAttribute('viewBox', '0,0,1,1');\n pt.setAttribute('width', '100%');\n pt.setAttribute('height', '100%');\n pt.setAttribute('preserveAspectRatio', 'xMidYMid slice');\n\n pt = domChild(pt, 0, 'rect', ns);\n pt.setAttribute('width', '1');\n pt.setAttribute('height', '1');\n pt.setAttribute('fill', 'url(' + href() + '#' + grad.id + ')');\n\n el = domChild(el, index++, 'radialGradient', ns);\n el.setAttribute('id', grad.id);\n el.setAttribute('fx', grad.x1);\n el.setAttribute('fy', grad.y1);\n el.setAttribute('fr', grad.r1);\n el.setAttribute('cx', grad.x2);\n el.setAttribute('cy', grad.y2);\n el.setAttribute( 'r', grad.r2);\n } else {\n el = domChild(el, index++, 'linearGradient', ns);\n el.setAttribute('id', grad.id);\n el.setAttribute('x1', grad.x1);\n el.setAttribute('x2', grad.x2);\n el.setAttribute('y1', grad.y1);\n el.setAttribute('y2', grad.y2);\n }\n\n for (i=0, n=grad.stops.length; i 1;\n}\n\n\n// -- Set attributes & styles on SVG elements ---\n\nvar element = null, // temp var for current SVG element\n values = null; // temp var for current values hash\n\n// Extra configuration for certain mark types\nvar mark_extras = {\n group: function(mdef, el, item) {\n values = el.__values__; // use parent's values hash\n\n element = el.childNodes[1];\n mdef.foreground(emit, item, this);\n\n element = el.childNodes[0];\n mdef.background(emit, item, this);\n\n var value = item.mark.interactive === false ? 'none' : null;\n if (value !== values.events) {\n element.style.setProperty('pointer-events', value);\n values.events = value;\n }\n },\n text: function(mdef, el, item) {\n var value;\n\n value = textValue(item);\n if (value !== values.text) {\n el.textContent = value;\n values.text = value;\n }\n\n setStyle(el, 'font-family', fontFamily(item));\n setStyle(el, 'font-size', fontSize(item) + 'px');\n setStyle(el, 'font-style', item.fontStyle);\n setStyle(el, 'font-variant', item.fontVariant);\n setStyle(el, 'font-weight', item.fontWeight);\n }\n};\n\nfunction setStyle(el, name, value) {\n if (value !== values[name]) {\n if (value == null) {\n el.style.removeProperty(name);\n } else {\n el.style.setProperty(name, value + '');\n }\n values[name] = value;\n }\n}\n\nprototype._update = function(mdef, el, item) {\n // set dom element and values cache\n // provides access to emit method\n element = el;\n values = el.__values__;\n\n // apply svg attributes\n mdef.attr(emit, item, this);\n\n // some marks need special treatment\n var extra = mark_extras[mdef.type];\n if (extra) extra.call(this, mdef, el, item);\n\n // apply svg css styles\n // note: element may be modified by 'extra' method\n this.style(element, item);\n};\n\nfunction emit(name, value, ns) {\n // early exit if value is unchanged\n if (value === values[name]) return;\n\n if (value != null) {\n // if value is provided, update DOM attribute\n if (ns) {\n element.setAttributeNS(ns, name, value);\n } else {\n element.setAttribute(name, value);\n }\n } else {\n // else remove DOM attribute\n if (ns) {\n element.removeAttributeNS(ns, name);\n } else {\n element.removeAttribute(name);\n }\n }\n\n // note current value for future comparison\n values[name] = value;\n}\n\nprototype.style = function(el, o) {\n if (o == null) return;\n var i, n, prop, name, value;\n\n for (i=0, n=styleProperties.length; i 0) ? openTag('defs') + defs + closeTag('defs') : '';\n};\n\nvar object;\n\nfunction emit(name, value, ns, prefixed) {\n object[prefixed || name] = value;\n}\n\nprototype.attributes = function(attr, item) {\n object = {};\n attr(emit, item, this);\n return object;\n};\n\nprototype.href = function(item) {\n var that = this,\n href = item.href,\n attr;\n\n if (href) {\n if (attr = that._hrefs && that._hrefs[href]) {\n return attr;\n } else {\n that.sanitizeURL(href).then(function(attr) {\n // rewrite to use xlink namespace\n // note that this will be deprecated in SVG 2.0\n attr['xlink:href'] = attr.href;\n attr.href = null;\n (that._hrefs || (that._hrefs = {}))[href] = attr;\n });\n }\n }\n return null;\n};\n\nprototype.mark = function(scene) {\n var renderer = this,\n mdef = marks[scene.marktype],\n tag = mdef.tag,\n defs = this._defs,\n str = '',\n style;\n\n if (tag !== 'g' && scene.interactive === false) {\n style = 'style=\"pointer-events: none;\"';\n }\n\n // render opening group tag\n str += openTag('g', {\n 'class': cssClass(scene),\n 'clip-path': scene.clip ? clip(renderer, scene, scene.group) : null\n }, style);\n\n // render contained elements\n function process(item) {\n var href = renderer.href(item);\n if (href) str += openTag('a', href);\n\n style = (tag !== 'g') ? applyStyles(item, scene, tag, defs) : null;\n str += openTag(tag, renderer.attributes(mdef.attr, item), style);\n\n if (tag === 'text') {\n str += escape_text(textValue(item));\n } else if (tag === 'g') {\n str += openTag('path', renderer.attributes(mdef.background, item),\n applyStyles(item, scene, 'bgrect', defs)) + closeTag('path');\n\n str += openTag('g', renderer.attributes(mdef.foreground, item))\n + renderer.markGroup(item)\n + closeTag('g');\n }\n\n str += closeTag(tag);\n if (href) str += closeTag('a');\n }\n\n if (mdef.nested) {\n if (scene.items && scene.items.length) process(scene.items[0]);\n } else {\n visit(scene, process);\n }\n\n // render closing group tag\n return str + closeTag('g');\n};\n\nprototype.markGroup = function(scene) {\n var renderer = this,\n str = '';\n\n visit(scene, function(item) {\n str += renderer.mark(item);\n });\n\n return str;\n};\n\nfunction applyStyles(o, mark, tag, defs) {\n if (o == null) return '';\n var i, n, prop, name, value, s = '';\n\n if (tag === 'bgrect' && mark.interactive === false) {\n s += 'pointer-events: none; ';\n }\n\n if (tag === 'text') {\n s += 'font-family: ' + fontFamily(o) + '; ';\n s += 'font-size: ' + fontSize(o) + 'px; ';\n if (o.fontStyle) s += 'font-style: ' + o.fontStyle + '; ';\n if (o.fontVariant) s += 'font-variant: ' + o.fontVariant + '; ';\n if (o.fontWeight) s += 'font-weight: ' + o.fontWeight + '; ';\n }\n\n for (i=0, n=styleProperties.length; i/g, '>');\n}\n","import CanvasHandler from './CanvasHandler';\nimport CanvasRenderer from './CanvasRenderer';\nimport SVGHandler from './SVGHandler';\nimport SVGRenderer from './SVGRenderer';\nimport SVGStringRenderer from './SVGStringRenderer';\n\nvar Canvas = 'canvas';\nvar PNG = 'png';\nvar SVG = 'svg';\nvar None = 'none';\n\nexport var RenderType = {\n Canvas: Canvas,\n PNG: PNG,\n SVG: SVG,\n None: None\n};\n\nvar modules = {};\n\nmodules[Canvas] = modules[PNG] = {\n renderer: CanvasRenderer,\n headless: CanvasRenderer,\n handler: CanvasHandler\n};\n\nmodules[SVG] = {\n renderer: SVGRenderer,\n headless: SVGStringRenderer,\n handler: SVGHandler\n};\n\nmodules[None] = {};\n\nexport function renderModule(name, _) {\n name = String(name || '').toLowerCase();\n if (arguments.length > 1) {\n modules[name] = _;\n return this;\n } else {\n return modules[name];\n }\n}\n","import Marks from './marks/index';\nimport {error} from 'vega-util';\nimport Bounds from './Bounds';\n\nexport function intersect(scene, bounds, filter) {\n const hits = [], // intersection results\n box = new Bounds().union(bounds), // defensive copy\n type = scene.marktype;\n\n return type ? intersectMark(scene, box, filter, hits)\n : type === 'group' ? intersectGroup(scene, box, filter, hits)\n : error('Intersect scene must be mark node or group item.');\n}\n\nfunction intersectMark(mark, box, filter, hits) {\n if (visitMark(mark, box, filter)) {\n const items = mark.items,\n type = mark.marktype,\n n = items.length;\n\n let i = 0;\n\n if (type === 'group') {\n for (; i re-bound all items\n // updates group bounds in response to modified group content\n pulse.visit(pulse.MOD, function(item) { view.dirty(item); });\n markBounds.clear();\n mark.items.forEach(function(item) {\n markBounds.union(boundItem(item, bound));\n });\n\n // force reflow for legends to propagate any layout changes\n // suppress other types to prevent overall layout jumpiness\n if (mark.role === LegendRole) pulse.reflow();\n }\n\n else {\n // incrementally update bounds, re-bound mark as needed\n rebound = pulse.changed(pulse.REM);\n\n pulse.visit(pulse.ADD, function(item) {\n markBounds.union(boundItem(item, bound));\n });\n\n pulse.visit(pulse.MOD, function(item) {\n rebound = rebound || markBounds.alignsWith(item.bounds);\n view.dirty(item);\n markBounds.union(boundItem(item, bound));\n });\n\n if (rebound) {\n markBounds.clear();\n mark.items.forEach(function(item) { markBounds.union(item.bounds); });\n }\n }\n\n // ensure mark bounds do not exceed any clipping region\n boundClip(mark);\n\n return pulse.modifies('bounds');\n};\n\nfunction boundItem(item, bound, opt) {\n return bound(item.bounds.clear(), item, opt);\n}\n","import {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\nvar COUNTER_NAME = ':vega_identifier:';\n\n/**\n * Adds a unique identifier to all added tuples.\n * This transform creates a new signal that serves as an id counter.\n * As a result, the id counter is shared across all instances of this\n * transform, generating unique ids across multiple data streams. In\n * addition, this signal value can be included in a snapshot of the\n * dataflow state, enabling correct resumption of id allocation.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.as - The field name for the generated identifier.\n */\nexport default function Identifier(params) {\n Transform.call(this, 0, params);\n}\n\nIdentifier.Definition = {\n \"type\": \"Identifier\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"as\", \"type\": \"string\", \"required\": true }\n ]\n};\n\nvar prototype = inherits(Identifier, Transform);\n\nprototype.transform = function(_, pulse) {\n var counter = getCounter(pulse.dataflow),\n id = counter.value,\n as = _.as;\n\n pulse.visit(pulse.ADD, function(t) {\n if (!t[as]) t[as] = ++id;\n });\n\n counter.set(this.value = id);\n return pulse;\n};\n\nfunction getCounter(view) {\n var counter = view._signals[COUNTER_NAME];\n if (!counter) {\n view._signals[COUNTER_NAME] = (counter = view.add(0));\n }\n return counter;\n}\n","import {Group} from './constants';\nimport {Transform} from 'vega-dataflow';\nimport {Item, GroupItem} from 'vega-scenegraph';\nimport {inherits} from 'vega-util';\n\n/**\n * Bind scenegraph items to a scenegraph mark instance.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.markdef - The mark definition for creating the mark.\n * This is an object of legal scenegraph mark properties which *must* include\n * the 'marktype' property.\n */\nexport default function Mark(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(Mark, Transform);\n\nprototype.transform = function(_, pulse) {\n var mark = this.value;\n\n // acquire mark on first invocation, bind context and group\n if (!mark) {\n mark = pulse.dataflow.scenegraph().mark(_.markdef, lookup(_), _.index);\n mark.group.context = _.context;\n if (!_.context.group) _.context.group = mark.group;\n mark.source = this;\n mark.clip = _.clip;\n mark.interactive = _.interactive;\n this.value = mark;\n }\n\n // initialize entering items\n var Init = mark.marktype === Group ? GroupItem : Item;\n pulse.visit(pulse.ADD, function(item) { Init.call(item, mark); });\n\n // update clipping and/or interactive status\n if (_.modified('clip') || _.modified('interactive')) {\n mark.clip = _.clip;\n mark.interactive = !!_.interactive;\n mark.zdirty = true; // force scenegraph re-eval\n pulse.reflow();\n }\n\n // bind items array to scenegraph mark\n mark.items = pulse.source;\n return pulse;\n};\n\nfunction lookup(_) {\n var g = _.groups, p = _.parent;\n return g && g.size === 1 ? g.get(Object.keys(g.object)[0])\n : g && p ? g.lookup(p)\n : null;\n}\n","import {Top, Bottom} from './constants';\nimport {Transform} from 'vega-dataflow';\nimport {Bounds} from 'vega-scenegraph';\nimport {inherits, peek} from 'vega-util';\n\n/**\n * Analyze items for overlap, changing opacity to hide items with\n * overlapping bounding boxes. This transform will preserve at least\n * two items (e.g., first and last) even if overlap persists.\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator\n * function for sorting items.\n * @param {object} [params.method] - The overlap removal method to apply.\n * One of 'parity' (default, hide every other item until there is no\n * more overlap) or 'greedy' (sequentially scan and hide and items that\n * overlap with the last visible item).\n * @param {object} [params.boundScale] - A scale whose range should be used\n * to bound the items. Items exceeding the bounds of the scale range\n * will be treated as overlapping. If null or undefined, no bounds check\n * will be applied.\n * @param {object} [params.boundOrient] - The orientation of the scale\n * (top, bottom, left, or right) used to bound items. This parameter is\n * ignored if boundScale is null or undefined.\n * @param {object} [params.boundTolerance] - The tolerance in pixels for\n * bound inclusion testing (default 1). This specifies by how many pixels\n * an item's bounds may exceed the scale range bounds and not be culled.\n * @constructor\n */\nexport default function Overlap(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(Overlap, Transform);\n\nvar methods = {\n parity: function(items) {\n return items.filter((item, i) => i % 2 ? (item.opacity = 0) : 1);\n },\n greedy: function(items, sep) {\n var a;\n return items.filter((b, i) => {\n if (!i || !intersect(a.bounds, b.bounds, sep)) {\n a = b;\n return 1;\n } else {\n return b.opacity = 0;\n }\n });\n }\n};\n\n// compute bounding box intersection\n// including padding pixels of separation\nfunction intersect(a, b, sep) {\n return sep > Math.max(\n b.x1 - a.x2,\n a.x1 - b.x2,\n b.y1 - a.y2,\n a.y1 - b.y2\n );\n}\n\nfunction hasOverlap(items, pad) {\n for (var i=1, n=items.length, a=items[0].bounds, b; i 1 && b.height() > 1;\n}\n\nfunction boundTest(scale, orient, tolerance) {\n var range = scale.range(),\n b = new Bounds();\n\n if (orient === Top || orient === Bottom) {\n b.set(range[0], -Infinity, range[1], +Infinity);\n } else {\n b.set(-Infinity, range[0], +Infinity, range[1]);\n }\n b.expand(tolerance || 1);\n\n return item => b.encloses(item.bounds);\n}\n\n// reset all items to be fully opaque\nfunction reset(source) {\n source.forEach(item => item.opacity = 1);\n return source;\n}\n\n// add all tuples to mod, fork pulse if parameters were modified\n// fork prevents cross-stream tuple pollution (e.g., pulse from scale)\nfunction reflow(pulse, _) {\n return pulse.reflow(_.modified()).modifies('opacity');\n}\n\nprototype.transform = function(_, pulse) {\n var reduce = methods[_.method] || methods.parity,\n source = pulse.materialize(pulse.SOURCE).source,\n sep = _.separation || 0,\n items, test, bounds;\n\n if (!source || !source.length) return;\n\n if (!_.method) {\n // early exit if method is falsy\n if (_.modified('method')) {\n reset(source);\n pulse = reflow(pulse, _);\n }\n return pulse;\n }\n\n if (_.sort) {\n source = source.slice().sort(_.sort);\n }\n\n // skip labels with no content\n source = source.filter(hasBounds);\n\n items = reset(source);\n pulse = reflow(pulse, _);\n\n if (items.length >= 3 && hasOverlap(items, sep)) {\n do {\n items = reduce(items, sep);\n } while (items.length >= 3 && hasOverlap(items, sep));\n\n if (items.length < 3 && !peek(source).opacity) {\n if (items.length > 1) peek(items).opacity = 0;\n peek(source).opacity = 1;\n }\n }\n\n if (_.boundScale && _.boundTolerance >= 0) {\n test = boundTest(_.boundScale, _.boundOrient, +_.boundTolerance);\n source.forEach(item => {\n if (!test(item)) item.opacity = 0;\n });\n }\n\n // re-calculate mark bounds\n bounds = items[0].mark.bounds.clear();\n source.forEach(item => {\n if (item.opacity) bounds.union(item.bounds);\n });\n\n return pulse;\n};\n","import {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Queue modified scenegraph items for rendering.\n * @constructor\n */\nexport default function Render(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(Render, Transform);\n\nprototype.transform = function(_, pulse) {\n var view = pulse.dataflow;\n\n pulse.visit(pulse.ALL, function(item) { view.dirty(item); });\n\n // set z-index dirty flag as needed\n if (pulse.fields && pulse.fields['zindex']) {\n var item = pulse.source && pulse.source[0];\n if (item) item.mark.zdirty = true;\n }\n};\n","import {Bounds} from 'vega-scenegraph';\n\nexport const tempBounds = new Bounds();\n\nexport function set(item, property, value) {\n return item[property] === value ? 0\n : (item[property] = value, 1);\n}","import {Top, Bottom, Left, Right} from '../constants';\nimport {set, tempBounds} from './util';\nimport {boundStroke} from 'vega-scenegraph';\n\nconst AxisOffset = 0.5;\n\nexport function isYAxis(mark) {\n var orient = mark.items[0].datum.orient;\n return orient === Left || orient === Right;\n}\n\nfunction axisIndices(datum) {\n var index = +datum.grid;\n return [\n datum.ticks ? index++ : -1, // ticks index\n datum.labels ? index++ : -1, // labels index\n index + (+datum.domain) // title index\n ];\n}\n\nexport function axisLayout(view, axis, width, height) {\n var item = axis.items[0],\n datum = item.datum,\n orient = datum.orient,\n indices = axisIndices(datum),\n range = item.range,\n offset = item.offset,\n position = item.position,\n minExtent = item.minExtent,\n maxExtent = item.maxExtent,\n title = datum.title && item.items[indices[2]].items[0],\n titlePadding = item.titlePadding,\n bounds = item.bounds,\n x = 0, y = 0, i, s;\n\n tempBounds.clear().union(bounds);\n bounds.clear();\n if ((i=indices[0]) > -1) bounds.union(item.items[i].bounds);\n if ((i=indices[1]) > -1) bounds.union(item.items[i].bounds);\n\n // position axis group and title\n switch (orient) {\n case Top:\n x = position || 0;\n y = -offset;\n s = Math.max(minExtent, Math.min(maxExtent, -bounds.y1));\n if (title) s = axisTitleLayout(title, s, titlePadding, 0, -1, bounds);\n bounds.add(0, -s).add(range, 0);\n break;\n case Left:\n x = -offset;\n y = position || 0;\n s = Math.max(minExtent, Math.min(maxExtent, -bounds.x1));\n if (title) s = axisTitleLayout(title, s, titlePadding, 1, -1, bounds);\n bounds.add(-s, 0).add(0, range);\n break;\n case Right:\n x = width + offset;\n y = position || 0;\n s = Math.max(minExtent, Math.min(maxExtent, bounds.x2));\n if (title) s = axisTitleLayout(title, s, titlePadding, 1, 1, bounds);\n bounds.add(0, 0).add(s, range);\n break;\n case Bottom:\n x = position || 0;\n y = height + offset;\n s = Math.max(minExtent, Math.min(maxExtent, bounds.y2));\n if (title) s = axisTitleLayout(title, s, titlePadding, 0, 1, bounds);\n bounds.add(0, 0).add(range, s);\n break;\n default:\n x = item.x;\n y = item.y;\n }\n\n // update bounds\n boundStroke(bounds.translate(x, y), item);\n\n if (set(item, 'x', x + AxisOffset) | set(item, 'y', y + AxisOffset)) {\n item.bounds = tempBounds;\n view.dirty(item);\n item.bounds = bounds;\n view.dirty(item);\n }\n\n return item.mark.bounds.clear().union(bounds);\n}\n\nfunction axisTitleLayout(title, offset, pad, isYAxis, sign, bounds) {\n var b = title.bounds, dx = 0, dy = 0;\n\n if (title.auto) {\n offset += pad;\n\n isYAxis\n ? dx = (title.x || 0) - (title.x = sign * offset)\n : dy = (title.y || 0) - (title.y = sign * offset);\n\n b.translate(-dx, -dy);\n title.mark.bounds.set(b.x1, b.y1, b.x2, b.y2);\n\n if (isYAxis) {\n bounds.add(0, b.y1).add(0, b.y2);\n offset += b.width();\n } else {\n bounds.add(b.x1, 0).add(b.x2, 0);\n offset += b.height();\n }\n } else {\n bounds.union(b);\n }\n\n return offset;\n}\n","import {\n All, Each, Flush, Column, X, Y, Row, Middle, End,\n Group, AxisRole, LegendRole,\n RowHeader, RowFooter, RowTitle,\n ColHeader, ColFooter, ColTitle\n} from '../constants';\nimport {tempBounds} from './util';\nimport {Bounds} from 'vega-scenegraph';\nimport {isObject} from 'vega-util';\n\nfunction gridLayoutGroups(group) {\n var groups = group.items,\n n = groups.length,\n i = 0, mark, items;\n\n var views = {\n marks: [],\n rowheaders: [],\n rowfooters: [],\n colheaders: [],\n colfooters: [],\n rowtitle: null,\n coltitle: null\n };\n\n // layout axes, gather legends, collect bounds\n for (; i 1) {\n for (i=0; i 0) dx[i] += x / 2;\n }\n }\n\n // perform vertical centering\n if (alignRow && get(opt.center, Row) && ncols !== 1) {\n for (i=0; i 0) dy[i] += y / 2;\n }\n }\n\n // position grid relative to anchor\n for (i=0; i limit) {\n view.warn('Grid headers exceed limit: ' + limit);\n headers = headers.slice(0, limit);\n }\n\n // apply offset\n init += offset;\n\n // clear mark bounds for all headers\n for (j=0, m=headers.length; j= 0 && (g = groups[k]) == null; k-=back);\n\n // assign coordinates and update bounds\n if (isX) {\n x = band == null ? g.x : Math.round(g.bounds.x1 + band * g.bounds.width());\n y = init;\n } else {\n x = init;\n y = band == null ? g.y : Math.round(g.bounds.y1 + band * g.bounds.height());\n }\n b.union(h.bounds.translate(x - (h.x || 0), y - (h.y || 0)));\n h.x = x;\n h.y = y;\n view.dirty(h);\n\n // update current edge of layout bounds\n edge = agg(edge, b[bf]);\n }\n\n return edge;\n}\n\nfunction layoutTitle(view, g, offset, isX, bounds, band) {\n if (!g) return;\n view.dirty(g);\n\n // compute title coordinates\n var x = offset, y = offset;\n isX\n ? (x = Math.round(bounds.x1 + band * bounds.width()))\n : (y = Math.round(bounds.y1 + band * bounds.height()));\n\n // assign coordinates and update bounds\n g.bounds.translate(x - (g.x || 0), y - (g.y || 0));\n g.mark.bounds.clear().union(g.bounds);\n g.x = x;\n g.y = y;\n\n // queue title for redraw\n view.dirty(g);\n}\n","import {\n Symbols, Start, Middle, End, Top, Bottom, Left, Right,\n TopLeft, TopRight, BottomLeft, BottomRight, None,\n Each, Flush\n} from '../constants';\nimport {boundStroke} from 'vega-scenegraph';\n\n// utility for looking up legend layout configuration\nfunction lookup(config, orient) {\n const opt = config[orient] || {};\n return (key, d) => opt[key] != null ? opt[key]\n : config[key] != null ? config[key]\n : d;\n}\n\n// if legends specify offset directly, use the maximum specified value\nfunction offsets(legends, value) {\n var max = -Infinity;\n legends.forEach(item => {\n if (item.offset != null) max = Math.max(max, item.offset);\n });\n return max > -Infinity ? max : value;\n}\n\nexport function legendParams(g, orient, config, xb, yb, w, h) {\n const _ = lookup(config, orient),\n offset = offsets(g, _('offset', 0)),\n anchor = _('anchor', Start),\n mult = anchor === End ? 1 : anchor === Middle ? 0.5 : 0;\n\n const p = {\n align: Each,\n bounds: _('bounds', Flush),\n columns: _('direction') === 'vertical' ? 1 : g.length,\n padding: _('margin', 8),\n center: _('center'),\n nodirty: true\n };\n\n switch (orient) {\n case Left:\n p.anchor = {\n x: Math.floor(xb.x1) - offset, column: End,\n y: mult * (h || xb.height() + 2 * xb.y1), row: anchor\n };\n break;\n case Right:\n p.anchor = {\n x: Math.ceil(xb.x2) + offset,\n y: mult * (h || xb.height() + 2 * xb.y1), row: anchor\n };\n break;\n case Top:\n p.anchor = {\n y: Math.floor(yb.y1) - offset, row: End,\n x: mult * (w || yb.width() + 2 * yb.x1), column: anchor\n };\n break;\n case Bottom:\n p.anchor = {\n y: Math.ceil(yb.y2) + offset,\n x: mult * (w || yb.width() + 2 * yb.x1), column: anchor\n };\n break;\n case TopLeft:\n p.anchor = {x: offset, y: offset};\n break;\n case TopRight:\n p.anchor = {x: w - offset, y: offset, column: End};\n break;\n case BottomLeft:\n p.anchor = {x: offset, y: h - offset, row: End};\n break;\n case BottomRight:\n p.anchor = {x: w - offset, y: h - offset, column: End, row: End};\n break;\n }\n\n return p;\n}\n\nexport function legendLayout(view, legend) {\n var item = legend.items[0],\n datum = item.datum,\n orient = item.orient,\n bounds = item.bounds,\n x = item.x, y = item.y, w, h;\n\n // cache current bounds for later comparison\n item._bounds\n ? item._bounds.clear().union(bounds)\n : item._bounds = bounds.clone();\n bounds.clear();\n\n // adjust legend to accommodate padding and title\n legendGroupLayout(view, item, item.items[0].items[0]);\n\n // aggregate bounds to determine size, and include origin\n bounds = legendBounds(item, bounds);\n w = 2 * item.padding;\n h = 2 * item.padding;\n if (!bounds.empty()) {\n w = Math.ceil(bounds.width() + w);\n h = Math.ceil(bounds.height() + h);\n }\n\n if (datum.type === Symbols) {\n legendEntryLayout(item.items[0].items[0].items[0].items);\n }\n\n if (orient !== None) {\n item.x = x = 0;\n item.y = y = 0;\n }\n item.width = w;\n item.height = h;\n boundStroke(bounds.set(x, y, x + w, y + h), item);\n item.mark.bounds.clear().union(bounds);\n\n return item;\n}\n\nfunction legendBounds(item, b) {\n // aggregate item bounds\n item.items.forEach(_ => b.union(_.bounds));\n\n // anchor to legend origin\n b.x1 = item.padding;\n b.y1 = item.padding;\n\n return b;\n}\n\nfunction legendGroupLayout(view, item, entry) {\n var pad = item.padding,\n ex = pad - entry.x,\n ey = pad - entry.y;\n\n if (!item.datum.title) {\n if (ex || ey) translate(view, entry, ex, ey);\n } else {\n var title = item.items[1].items[0],\n anchor = title.anchor,\n tpad = item.titlePadding || 0,\n tx = pad - title.x,\n ty = pad - title.y;\n\n switch (title.orient) {\n case Left:\n ex += Math.ceil(title.bounds.width()) + tpad;\n break;\n case Right:\n case Bottom:\n break;\n default:\n ey += title.fontSize + tpad;\n }\n if (ex || ey) translate(view, entry, ex, ey);\n\n switch (title.orient) {\n case Left:\n ty += legendTitleOffset(item, entry, title, anchor, 0, 1);\n break;\n case Right:\n tx += legendTitleOffset(item, entry, title, End, 1, 0) + tpad;\n ty += legendTitleOffset(item, entry, title, anchor, 0, 1);\n break;\n case Bottom:\n tx += legendTitleOffset(item, entry, title, anchor, 1, 0);\n ty += legendTitleOffset(item, entry, title, End, 0, 0, 1) + tpad;\n break;\n default:\n tx += legendTitleOffset(item, entry, title, anchor, 1, 0);\n }\n if (tx || ty) translate(view, title, tx, ty);\n\n // translate legend if title pushes into negative coordinates\n if ((tx = Math.round(title.bounds.x1 - pad)) < 0) {\n translate(view, entry, -tx, 0);\n translate(view, title, -tx, 0);\n }\n }\n}\n\nfunction legendTitleOffset(item, entry, title, anchor, x, lr, noBar) {\n const grad = item.datum.type !== 'symbol',\n vgrad = title.datum.vgrad,\n e = grad && (lr || !vgrad) && !noBar ? entry.items[0] : entry,\n s = e.bounds[x ? 'x2' : 'y2'] - item.padding,\n u = vgrad && lr ? s : 0,\n v = vgrad && lr ? 0 : s;\n\n return Math.round(anchor === Start ? u : anchor === End ? v : 0.5 * s);\n}\n\nfunction translate(view, item, dx, dy) {\n item.x += dx;\n item.y += dy;\n item.bounds.translate(dx, dy);\n item.mark.bounds.translate(dx, dy);\n view.dirty(item);\n}\n\nfunction legendEntryLayout(entries) {\n // get max widths for each column\n var widths = entries.reduce(function(w, g) {\n w[g.column] = Math.max(g.bounds.x2 - g.x, w[g.column] || 0);\n return w;\n }, {});\n\n // set dimensions of legend entry groups\n entries.forEach(function(g) {\n g.width = widths[g.column];\n g.height = g.bounds.y2 - g.y;\n });\n}\n","import {Top, Bottom, Left, Right, Start, End, Group} from '../constants';\nimport {set, tempBounds} from './util';\n\nexport function titleLayout(view, title, width, height, viewBounds) {\n var item = title.items[0],\n frame = item.frame,\n orient = item.orient,\n anchor = item.anchor,\n offset = item.offset,\n bounds = item.bounds,\n vertical = (orient === Left || orient === Right),\n start = 0,\n end = vertical ? height : width,\n x = 0, y = 0, pos;\n\n if (frame !== Group) {\n orient === Left ? (start = viewBounds.y2, end = viewBounds.y1)\n : orient === Right ? (start = viewBounds.y1, end = viewBounds.y2)\n : (start = viewBounds.x1, end = viewBounds.x2);\n } else if (orient === Left) {\n start = height, end = 0;\n }\n\n pos = (anchor === Start) ? start\n : (anchor === End) ? end\n : (start + end) / 2;\n\n tempBounds.clear().union(bounds);\n\n // position title text\n switch (orient) {\n case Top:\n x = pos;\n y = viewBounds.y1 - offset;\n break;\n case Left:\n x = viewBounds.x1 - offset;\n y = pos;\n break;\n case Right:\n x = viewBounds.x2 + offset;\n y = pos;\n break;\n case Bottom:\n x = pos;\n y = viewBounds.y2 + offset;\n break;\n default:\n x = item.x;\n y = item.y;\n }\n\n bounds.translate(x - (item.x || 0), y - (item.y || 0));\n if (set(item, 'x', x) | set(item, 'y', y)) {\n item.bounds = tempBounds;\n view.dirty(item);\n item.bounds = bounds;\n view.dirty(item);\n }\n\n // update bounds\n return title.bounds.clear().union(bounds);\n}\n","import {\n AxisRole, LegendRole, TitleRole, FrameRole, ScopeRole,\n RowHeader, RowFooter, RowTitle, ColHeader, ColFooter, ColTitle,\n Top, Bottom, Left, Right,\n Fit, FitX, FitY, Pad, None, Padding\n} from './constants';\n\nimport {axisLayout, isYAxis} from './layout/axis';\nimport {gridLayout, trellisLayout} from './layout/grid';\nimport {legendLayout, legendParams} from './layout/legend';\nimport {titleLayout} from './layout/title';\n\nimport {Transform} from 'vega-dataflow';\nimport {Bounds} from 'vega-scenegraph';\nimport {inherits} from 'vega-util';\n\n/**\n * Layout view elements such as axes and legends.\n * Also performs size adjustments.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.mark - Scenegraph mark of groups to layout.\n */\nexport default function ViewLayout(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(ViewLayout, Transform);\n\nprototype.transform = function(_, pulse) {\n // TODO incremental update, output?\n var view = pulse.dataflow;\n _.mark.items.forEach(function(group) {\n if (_.layout) trellisLayout(view, group, _.layout);\n layoutGroup(view, group, _);\n });\n if (_.modified()) pulse.reflow();\n return pulse;\n};\n\nfunction layoutGroup(view, group, _) {\n var items = group.items,\n width = Math.max(0, group.width || 0),\n height = Math.max(0, group.height || 0),\n viewBounds = new Bounds().set(0, 0, width, height),\n xBounds = viewBounds.clone(),\n yBounds = viewBounds.clone(),\n legends = [], title,\n mark, orient, b, i, n;\n\n // layout axes, gather legends, collect bounds\n for (i=0, n=items.length; i {\n orient = item.orient || Right;\n if (orient !== None) (l[orient] || (l[orient] = [])).push(item);\n });\n\n // perform grid layout for each orient group\n for (let orient in l) {\n const g = l[orient];\n gridLayout(view, g, legendParams(\n g, orient, _.legends, xBounds, yBounds, width, height\n ));\n }\n\n // update view bounds\n legends.forEach(item => {\n const b = item.bounds;\n\n if (!b.equals(item._bounds)) {\n item.bounds = item._bounds;\n view.dirty(item); // dirty previous location\n item.bounds = b;\n view.dirty(item);\n }\n\n if (_.autosize && _.autosize.type === Fit) {\n // For autosize fit, incorporate the orthogonal dimension only.\n // Legends that overrun the chart area will then be clipped;\n // otherwise the chart area gets reduced to nothing!\n switch(item.orient) {\n case Left:\n case Right:\n viewBounds.add(b.x1, 0).add(b.x2, 0);\n break;\n case Top:\n case Bottom:\n viewBounds.add(0, b.y1).add(0, b.y2);\n }\n } else {\n viewBounds.union(b);\n }\n });\n }\n\n // combine bounding boxes\n viewBounds.union(xBounds).union(yBounds);\n\n // layout title, adjust bounds\n if (title) {\n viewBounds.union(titleLayout(view, title, width, height, viewBounds));\n }\n\n // perform size adjustment\n viewSizeLayout(view, group, viewBounds, _);\n}\n\nfunction viewSizeLayout(view, group, viewBounds, _) {\n var auto = _.autosize || {},\n type = auto.type,\n viewWidth = view._width,\n viewHeight = view._height,\n padding = view.padding();\n\n if (view._autosize < 1 || !type) return;\n\n var width = Math.max(0, group.width || 0),\n left = Math.max(0, Math.ceil(-viewBounds.x1)),\n right = Math.max(0, Math.ceil(viewBounds.x2 - width)),\n height = Math.max(0, group.height || 0),\n top = Math.max(0, Math.ceil(-viewBounds.y1)),\n bottom = Math.max(0, Math.ceil(viewBounds.y2 - height));\n\n if (auto.contains === Padding) {\n viewWidth -= padding.left + padding.right;\n viewHeight -= padding.top + padding.bottom;\n }\n\n if (type === None) {\n left = 0;\n top = 0;\n width = viewWidth;\n height = viewHeight;\n }\n\n else if (type === Fit) {\n width = Math.max(0, viewWidth - left - right);\n height = Math.max(0, viewHeight - top - bottom);\n }\n\n else if (type === FitX) {\n width = Math.max(0, viewWidth - left - right);\n viewHeight = height + top + bottom;\n }\n\n else if (type === FitY) {\n viewWidth = width + left + right;\n height = Math.max(0, viewHeight - top - bottom);\n }\n\n else if (type === Pad) {\n viewWidth = width + left + right;\n viewHeight = height + top + bottom;\n }\n\n view._resizeView(\n viewWidth, viewHeight,\n width, height,\n [left, top],\n auto.resize\n );\n}\n","export default function(count, paddingInner, paddingOuter) {\n var space = count - paddingInner + paddingOuter * 2;\n return count ? (space > 0 ? space : 1) : 0;\n}\n","export const Identity = 'identity';\n\nexport const Linear = 'linear';\nexport const Log = 'log';\nexport const Pow = 'pow';\nexport const Sqrt = 'sqrt';\nexport const Symlog = 'symlog';\n\nexport const Time = 'time';\nexport const UTC = 'utc';\n\nexport const Sequential = 'sequential';\nexport const Diverging = 'diverging';\n\nexport const Quantile = 'quantile';\nexport const Quantize = 'quantize';\nexport const Threshold = 'threshold';\n\nexport const Ordinal = 'ordinal';\nexport const Point = 'point';\nexport const Band = 'band';\nexport const BinOrdinal = 'bin-ordinal';\n\nexport function isValidScaleType(type) {\n switch (type) {\n case Identity:\n case Linear:\n case Log:\n case Pow:\n case Sqrt:\n case Symlog:\n case Time:\n case UTC:\n case Sequential:\n case Quantile:\n case Quantize:\n case Threshold:\n case Ordinal:\n case Point:\n case Band:\n case BinOrdinal:\n return true;\n }\n return false;\n}\n\nexport function isTemporal(key) {\n return key === Time || key === UTC;\n}\n\nexport function isBinned(key) {\n return key === BinOrdinal;\n}\n\nexport function isQuantile(key) {\n return key === Quantile;\n}\n\nexport function isSequential(key) {\n return key && key.startsWith(Sequential);\n}\n\nexport function isDiverging(key) {\n return key && key.startsWith(Diverging);\n}\n\nexport function isInterpolating(key) {\n return isSequential(key) || isDiverging(key);\n}\n\nexport function isLogarithmic(key) {\n return key === Log || key.endsWith('-log');\n}\n\nexport function isContinuous(key) {\n switch (key) {\n case Linear:\n case Log:\n case Pow:\n case Sqrt:\n case Symlog:\n case Time:\n case UTC:\n case Sequential:\n return true;\n }\n return false;\n}\n\nexport function isDiscrete(key) {\n return key === BinOrdinal\n || key === Ordinal\n || key === Band\n || key === Point;\n}\n\nexport function isDiscretizing(key) {\n return key === BinOrdinal\n || key === Quantile\n || key === Quantize\n || key === Threshold;\n}\n","import {UTC} from './types';\n\nimport {\n timeMillisecond, utcMillisecond,\n timeSecond, utcSecond,\n timeMinute, utcMinute,\n timeHour, utcHour,\n timeDay, utcDay,\n timeWeek, utcWeek,\n timeMonth, utcMonth,\n timeYear, utcYear\n} from 'd3-time';\n\nvar time = {\n millisecond: timeMillisecond,\n second: timeSecond,\n minute: timeMinute,\n hour: timeHour,\n day: timeDay,\n week: timeWeek,\n month: timeMonth,\n year: timeYear\n};\n\nvar utc = {\n millisecond: utcMillisecond,\n second: utcSecond,\n minute: utcMinute,\n hour: utcHour,\n day: utcDay,\n week: utcWeek,\n month: utcMonth,\n year: utcYear\n}\n\nexport function timeInterval(unit, type) {\n const t = (type === UTC ? utc : time);\n return t.hasOwnProperty(unit) && t[unit];\n}\n","export default function(scale) {\n return function(_) {\n var lo = _[0],\n hi = _[1],\n t;\n\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n\n return [\n scale.invert(lo),\n scale.invert(hi)\n ];\n }\n}\n","export default function(scale) {\n return function(_) {\n var range = scale.range(),\n lo = _[0],\n hi = _[1],\n min = -1, max, t, i, n;\n\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n\n for (i=0, n=range.length; i= lo && range[i] <= hi) {\n if (min < 0) min = i;\n max = i;\n }\n }\n\n if (min < 0) return undefined;\n\n lo = scale.invertExtent(range[min]);\n hi = scale.invertExtent(range[max]);\n\n return [\n lo[0] === undefined ? lo[1] : lo[0],\n hi[1] === undefined ? hi[0] : hi[1]\n ];\n }\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","import number from \"./number.js\";\n\nexport default function quantile(values, p, valueof = number) {\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.interpolator(domain); break;\n default: this.interpolator(interpolator).domain(domain); break;\n }\n return this;\n}\n","import {initRange} from \"./init\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new Map(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new Map();\n for (const value of _) {\n const key = value + \"\";\n if (index.has(key)) continue;\n index.set(key, domain.push(value));\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex3 = /^#([0-9a-f]{3})$/,\n reHex6 = /^#([0-9a-f]{6})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: function() {\n return this.rgb().hex();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n});\n\nexport default function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (0 <= this.r && this.r <= 255)\n && (0 <= this.g && this.g <= 255)\n && (0 <= this.b && this.b <= 255)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: function() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n },\n toString: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\n// https://beta.observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb: function() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return labConvert(this).rgb();\n }\n}));\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import {basis} from \"./basis\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis\";\nimport basisClosed from \"./basisClosed\";\nimport nogamma, {gamma} from \"./color\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","import value from \"./value\";\n\nexport default function(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b -= a, function(t) {\n return d.setTime(a + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return a + b * t;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb\";\nimport array from \"./array\";\nimport date from \"./date\";\nimport number from \"./number\";\nimport object from \"./object\";\nimport string from \"./string\";\nimport constant from \"./constant\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : Array.isArray(b) ? array\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n","import {hue} from \"./color\";\n\nexport default function(a, b) {\n var i = hue(+a, +b);\n return function(t) {\n var x = i(t);\n return x - 360 * Math.floor(x / 360);\n };\n}\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return Math.round(a + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number\";\nimport {parseCss, parseSvg} from \"./parse\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {lab as colorLab} from \"d3-color\";\nimport color from \"./color\";\n\nexport default function lab(start, end) {\n var l = color((start = colorLab(start)).l, (end = colorLab(end)).l),\n a = color(start.a, end.a),\n b = color(start.b, end.b),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.l = l(t);\n start.a = a(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n}\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function piecewise(interpolate, values) {\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(domain) {\n var a = domain[0], b = domain[domain.length - 1], t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), clamp === identity || (clamp = clamper(domain)), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? clamper(domain) : identity, scale) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous(transform, untransform) {\n return transformer()(transform, untransform);\n}\n","// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimal(1.23) returns [\"123\", 0].\nexport default function(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n this.fill = match[1] || \" \";\n this.align = match[2] || \">\";\n this.sign = match[3] || \"-\";\n this.symbol = match[4] || \"\";\n this.zero = !!match[5];\n this.width = match[6] && +match[6];\n this.comma = !!match[7];\n this.precision = match[8] && +match[8].slice(1);\n this.trim = !!match[9];\n this.type = match[10] || \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width == null ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision == null ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatPrefixAuto from \"./formatPrefixAuto\";\nimport formatRounded from \"./formatRounded\";\n\nexport default {\n \"%\": function(x, p) { return (x * 100).toFixed(p); },\n \"b\": function(x) { return Math.round(x).toString(2); },\n \"c\": function(x) { return x + \"\"; },\n \"d\": function(x) { return Math.round(x).toString(10); },\n \"e\": function(x, p) { return x.toExponential(p); },\n \"f\": function(x, p) { return x.toFixed(p); },\n \"g\": function(x, p) { return x.toPrecision(p); },\n \"o\": function(x) { return Math.round(x).toString(8); },\n \"p\": function(x, p) { return formatRounded(x * 100, p); },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n \"x\": function(x) { return Math.round(x).toString(16); }\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent\";\nimport formatGroup from \"./formatGroup\";\nimport formatNumerals from \"./formatNumerals\";\nimport formatSpecifier from \"./formatSpecifier\";\nimport formatTrim from \"./formatTrim\";\nimport formatTypes from \"./formatTypes\";\nimport {prefixExponent} from \"./formatPrefixAuto\";\nimport identity from \"./identity\";\n\nvar prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal,\n numerals = locale.numerals ? formatNumerals(locale.numerals) : identity,\n percent = locale.percent || \"%\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currency[0] : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currency[1] : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision == null ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Perform the initial formatting.\n var valueNegative = value < 0;\n value = formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero during formatting, treat as positive.\n if (valueNegative && +value === 0) valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import exponent from \"./exponent\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy, identity} from \"./continuous\";\nimport {initRange} from \"./init\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(identity, identity);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","import {linearish} from \"./linear\";\nimport number from \"./number\";\n\nexport default function identity(domain) {\n var unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = Array.from(_, number), scale) : domain.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return identity(domain).unknown(unknown);\n };\n\n domain = arguments.length ? Array.from(domain, number) : [0, 1];\n\n return linearish(scale);\n}\n","export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport nice from \"./nice\";\nimport {copy, transformer} from \"./continuous\";\nimport {initRange} from \"./init\";\n\nfunction transformLog(x) {\n return Math.log(x);\n}\n\nfunction transformExp(x) {\n return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport function loggish(transform) {\n var scale = transform(transformLog, transformExp),\n domain = scale.domain,\n base = 10,\n logs,\n pows;\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) {\n logs = reflect(logs), pows = reflect(pows);\n transform(transformLogn, transformExpn);\n } else {\n transform(transformLog, transformExp);\n }\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n return scale;\n}\n\nexport default function log() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, log()).base(scale.base());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","import {linearish} from \"./linear\";\nimport {copy, transformer} from \"./continuous\";\nimport {initRange} from \"./init\";\n\nfunction transformSymlog(c) {\n return function(x) {\n return Math.sign(x) * Math.log1p(Math.abs(x / c));\n };\n}\n\nfunction transformSymexp(c) {\n return function(x) {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n };\n}\n\nexport function symlogish(transform) {\n var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n scale.constant = function(_) {\n return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n };\n\n return linearish(scale);\n}\n\nexport default function symlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, symlog()).constant(scale.constant());\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {linearish} from \"./linear\";\nimport {copy, identity, transformer} from \"./continuous\";\nimport {initRange} from \"./init\";\n\nfunction transformPow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction transformSqrt(x) {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n var scale = transform(identity, identity),\n exponent = 1;\n\n function rescale() {\n return exponent === 1 ? transform(identity, identity)\n : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n : transform(transformPow(exponent), transformPow(1 / exponent));\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, rescale()) : exponent;\n };\n\n return linearish(scale);\n}\n\nexport default function pow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, pow()).exponent(scale.exponent());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\nexport function sqrt() {\n return pow.apply(null, arguments).exponent(0.5);\n}\n","import {ascending, bisect, quantile as threshold} from \"d3-array\";\nimport {initRange} from \"./init\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [],\n unknown;\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {linearish} from \"./linear\";\nimport {initRange} from \"./init\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1],\n unknown;\n\n function scale(x) {\n return x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : scale;\n };\n\n scale.thresholds = function() {\n return domain.slice();\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(linearish(scale), arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {initRange} from \"./init\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n unknown,\n n = 1;\n\n function scale(x) {\n return x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {bisector, tickStep} from \"d3-array\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy, identity} from \"./continuous\";\nimport {initRange} from \"./init\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(identity, identity),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return initRange.apply(calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","import {calendar} from \"./time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcMillisecond} from \"d3-time\";\nimport {initRange} from \"./init\";\n\nexport default function() {\n return initRange.apply(calendar(utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcMillisecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n","import {identity} from \"./continuous\";\nimport {initInterpolator} from \"./init\";\nimport {linearish} from \"./linear\";\nimport {loggish} from \"./log\";\nimport {symlogish} from \"./symlog\";\nimport {powish} from \"./pow\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 1,\n t0,\n t1,\n k10,\n transform,\n interpolator = identity,\n clamp = false,\n unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n return scale;\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .interpolator(source.interpolator())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport default function sequential() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, sequential());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialLog() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, sequentialLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSqrt() {\n return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n","import {identity} from \"./continuous\";\nimport {initInterpolator} from \"./init\";\nimport {linearish} from \"./linear\";\nimport {loggish} from \"./log\";\nimport {copy} from \"./sequential\";\nimport {symlogish} from \"./symlog\";\nimport {powish} from \"./pow\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 0.5,\n x2 = 1,\n t0,\n t1,\n t2,\n k10,\n k21,\n interpolator = identity,\n transform,\n clamp = false,\n unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (x < t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), scale) : [x0, x1, x2];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1);\n return scale;\n };\n}\n\nexport default function diverging() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, diverging());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingLog() {\n var scale = loggish(transformer()).domain([0.1, 1, 10]);\n\n scale.copy = function() {\n return copy(scale, divergingLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSqrt() {\n return divergingPow.apply(null, arguments).exponent(0.5);\n}\n","import bandSpace from './bandSpace';\nimport {range as sequence, bisectRight} from 'd3-array';\nimport {scaleOrdinal as ordinal} from 'd3-scale';\n\nexport function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse],\n space = bandSpace(n, paddingInner, paddingOuter);\n\n step = (stop - start) / (space || 1);\n if (round) {\n step = Math.floor(step);\n }\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) {\n start = Math.round(start);\n bandwidth = Math.round(bandwidth);\n }\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n if (arguments.length) {\n domain(_);\n return rescale();\n } else {\n return domain();\n }\n };\n\n scale.range = function(_) {\n if (arguments.length) {\n range = [+_[0], +_[1]];\n return rescale();\n } else {\n return range.slice();\n }\n };\n\n scale.rangeRound = function(_) {\n range = [+_[0], +_[1]];\n round = true;\n return rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n if (arguments.length) {\n round = !!_;\n return rescale();\n } else {\n return round;\n }\n };\n\n scale.padding = function(_) {\n if (arguments.length) {\n paddingOuter = Math.max(0, Math.min(1, _));\n paddingInner = paddingOuter;\n return rescale();\n } else {\n return paddingInner;\n }\n };\n\n scale.paddingInner = function(_) {\n if (arguments.length) {\n paddingInner = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return paddingInner;\n }\n };\n\n scale.paddingOuter = function(_) {\n if (arguments.length) {\n paddingOuter = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return paddingOuter;\n }\n };\n\n scale.align = function(_) {\n if (arguments.length) {\n align = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return align;\n }\n };\n\n scale.invertRange = function(_) {\n // bail if range has null or undefined values\n if (_[0] == null || _[1] == null) return;\n\n var lo = +_[0],\n hi = +_[1],\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1, a, b, t;\n\n // bail if either range endpoint is invalid\n if (lo !== lo || hi !== hi) return;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n if (hi < values[0] || lo > range[1-reverse]) return;\n\n // binary search to index into scale range\n a = Math.max(0, bisectRight(values, lo) - 1);\n b = lo===hi ? a : bisectRight(values, hi) - 1;\n\n // increment index a if lo is within padding gap\n if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n if (reverse) {\n // map + swap\n t = a;\n a = n - b;\n b = n - t;\n }\n return (a > b) ? undefined : domain().slice(a, b+1);\n };\n\n scale.invert = function(_) {\n var value = scale.invertRange([_, _]);\n return value ? value[0] : value;\n };\n\n scale.copy = function() {\n return band()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return rescale();\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band().paddingInner(1));\n}\n","var map = Array.prototype.map;\n\nexport function numbers(_) {\n return map.call(_, function(x) { return +x; });\n}\n","export var slice = Array.prototype.slice;\n","import {bisect} from 'd3-array';\nimport {tickFormat} from 'd3-scale';\nimport {peek} from 'vega-util';\nimport {numbers} from './numbers';\nimport {slice} from './slice';\n\nexport function scaleBinOrdinal() {\n var domain = [],\n range = [];\n\n function scale(x) {\n return x == null || x !== x\n ? undefined\n : range[(bisect(domain, x) - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (arguments.length) {\n domain = numbers(_);\n return scale;\n } else {\n return domain.slice();\n }\n };\n\n scale.range = function(_) {\n if (arguments.length) {\n range = slice.call(_);\n return scale;\n } else {\n return range.slice();\n }\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain[0], peek(domain), count == null ? 10 : count, specifier);\n };\n\n scale.copy = function() {\n return scaleBinOrdinal().domain(scale.domain()).range(scale.range());\n };\n\n return scale;\n}","import invertRange from './scales/invertRange';\nimport invertRangeExtent from './scales/invertRangeExtent';\n\nimport {\n Identity,\n Linear, Log, Pow, Sqrt, Symlog,\n Time, UTC, Sequential, Diverging,\n Quantile, Quantize, Threshold,\n BinOrdinal, Ordinal, Band, Point\n} from './scales/types';\n\nimport {\n band as scaleBand,\n point as scalePoint\n} from './scales/scaleBand';\n\nimport {\n scaleBinOrdinal\n} from './scales/scaleBinOrdinal';\n\nimport * as $ from 'd3-scale';\n\n/**\n * Augment scales with their type and needed inverse methods.\n */\nfunction create(type, constructor) {\n return function scale() {\n var s = constructor();\n\n if (!s.invertRange) {\n s.invertRange = s.invert ? invertRange(s)\n : s.invertExtent ? invertRangeExtent(s)\n : undefined;\n }\n\n s.type = type;\n return s;\n };\n}\n\nexport default function scale(type, scale) {\n if (arguments.length > 1) {\n scales[type] = create(type, scale);\n return this;\n } else {\n return scales.hasOwnProperty(type) ? scales[type] : undefined;\n }\n}\n\nvar scales = {\n // identity scale\n [Identity]: $.scaleIdentity,\n\n // continuous scales\n [Linear]: $.scaleLinear,\n [Log]: $.scaleLog,\n [Pow]: $.scalePow,\n [Sqrt]: $.scaleSqrt,\n [Symlog]: $.scaleSymlog,\n [Time]: $.scaleTime,\n [UTC]: $.scaleUtc,\n\n // sequential scales\n [Sequential]: $.scaleSequential, // backwards compat\n [Sequential+'-'+Linear]: $.scaleSequential,\n [Sequential+'-'+Log]: $.scaleSequentialLog,\n [Sequential+'-'+Pow]: $.scaleSequentialPow,\n [Sequential+'-'+Sqrt]: $.scaleSequentialSqrt,\n [Sequential+'-'+Symlog]: $.scaleSequentialSymlog,\n\n // diverging scales\n [Diverging+'-'+Linear]: $.scaleDiverging,\n [Diverging+'-'+Log]: $.scaleDivergingLog,\n [Diverging+'-'+Pow]: $.scaleDivergingPow,\n [Diverging+'-'+Sqrt]: $.scaleDivergingSqrt,\n [Diverging+'-'+Symlog]: $.scaleDivergingSymlog,\n\n // discretizing scales\n [Quantile]: $.scaleQuantile,\n [Quantize]: $.scaleQuantize,\n [Threshold]: $.scaleThreshold,\n\n // discrete scales\n [BinOrdinal]: scaleBinOrdinal,\n [Ordinal]: $.scaleOrdinal,\n [Band]: scaleBand,\n [Point]: scalePoint\n};\n\nfor (var key in scales) {\n scale(key, scales[key]);\n}\n","import getScale from './scales';\nimport {constant, peek} from 'vega-util';\nimport * as $ from 'd3-interpolate';\n\nconst scaleProps = ['clamp', 'base', 'constant', 'exponent'];\n\nexport function interpolateRange(interpolator, range) {\n var start = range[0],\n span = peek(range) - start;\n return function(i) { return interpolator(start + i * span); };\n}\n\nexport function interpolateColors(colors, type, gamma) {\n return $.piecewise(interpolate(type || 'rgb', gamma), colors);\n}\n\nexport function quantizeInterpolator(interpolator, count) {\n var samples = new Array(count),\n n = count + 1;\n for (var i = 0; i < count;) samples[i] = interpolator(++i / n);\n return samples;\n}\n\nexport function scaleCopy(scale) {\n const t = scale.type,\n s = scale.copy();\n s.type = t;\n return s;\n}\n\nexport function scaleFraction(scale, min, max) {\n var delta = max - min, i, t, s;\n\n if (!delta || !isFinite(delta)) {\n return constant(0.5);\n } else {\n i = (t = scale.type).indexOf('-');\n t = i < 0 ? t : t.slice(i + 1);\n s = getScale(t)().domain([min, max]).range([0, 1]);\n scaleProps.forEach(m => scale[m] ? s[m](scale[m]()) : 0);\n return s;\n }\n}\n\nexport function interpolate(type, gamma) {\n var interp = $[method(type)];\n return (gamma != null && interp && interp.gamma)\n ? interp.gamma(gamma)\n : interp;\n}\n\nfunction method(type) {\n return 'interpolate' + type.toLowerCase()\n .split('-')\n .map(function(s) { return s[0].toUpperCase() + s.slice(1); })\n .join('');\n}\n","export const continuous = {\n blues: 'cfe1f2bed8eca8cee58fc1de74b2d75ba3cf4592c63181bd206fb2125ca40a4a90',\n greens: 'd3eecdc0e6baabdda594d3917bc77d60ba6c46ab5e329a512089430e7735036429',\n greys: 'e2e2e2d4d4d4c4c4c4b1b1b19d9d9d8888887575756262624d4d4d3535351e1e1e',\n oranges: 'fdd8b3fdc998fdb87bfda55efc9244f87f2cf06b18e4580bd14904b93d029f3303',\n purples: 'e2e1efd4d4e8c4c5e0b4b3d6a3a0cc928ec3827cb97566ae684ea25c3696501f8c',\n reds: 'fdc9b4fcb49afc9e80fc8767fa7051f6573fec3f2fdc2a25c81b1db21218970b13',\n\n blueGreen: 'd5efedc1e8e0a7ddd18bd2be70c6a958ba9144ad77319c5d2089460e7736036429',\n bluePurple: 'ccddecbad0e4a8c2dd9ab0d4919cc98d85be8b6db28a55a6873c99822287730f71',\n greenBlue: 'd3eecec5e8c3b1e1bb9bd8bb82cec269c2ca51b2cd3c9fc7288abd1675b10b60a1',\n orangeRed: 'fddcaffdcf9bfdc18afdad77fb9562f67d53ee6545e24932d32d1ebf130da70403',\n purpleBlue: 'dbdaebc8cee4b1c3de97b7d87bacd15b9fc93a90c01e7fb70b70ab056199045281',\n purpleBlueGreen: 'dbd8eac8cee4b0c3de93b7d872acd1549fc83892bb1c88a3097f8702736b016353',\n purpleRed: 'dcc9e2d3b3d7ce9eccd186c0da6bb2e14da0e23189d91e6fc61159ab07498f023a',\n redPurple: 'fccfccfcbec0faa9b8f98faff571a5ec539ddb3695c41b8aa908808d0179700174',\n yellowGreen: 'e4f4acd1eca0b9e2949ed68880c97c62bb6e47aa5e3297502083440e723b036034',\n yellowOrangeBrown: 'feeaa1fedd84fecc63feb746fca031f68921eb7215db5e0bc54c05ab3d038f3204',\n yellowOrangeRed: 'fee087fed16ffebd59fea849fd903efc7335f9522bee3423de1b20ca0b22af0225',\n\n blueOrange: '134b852f78b35da2cb9dcae1d2e5eff2f0ebfce0bafbbf74e8932fc5690d994a07',\n brownBlueGreen: '704108a0651ac79548e3c78af3e6c6eef1eac9e9e48ed1c74da79e187a72025147',\n purpleGreen: '5b1667834792a67fb6c9aed3e6d6e8eff0efd9efd5aedda971bb75368e490e5e29',\n purpleOrange: '4114696647968f83b7b9b4d6dadbebf3eeeafce0bafbbf74e8932fc5690d994a07',\n redBlue: '8c0d25bf363adf745ef4ae91fbdbc9f2efeed2e5ef9dcae15da2cb2f78b3134b85',\n redGrey: '8c0d25bf363adf745ef4ae91fcdccbfaf4f1e2e2e2c0c0c0969696646464343434',\n yellowGreenBlue: 'eff9bddbf1b4bde5b594d5b969c5be45b4c22c9ec02182b82163aa23479c1c3185',\n redYellowBlue: 'a50026d4322cf16e43fcac64fedd90faf8c1dcf1ecabd6e875abd04a74b4313695',\n redYellowGreen: 'a50026d4322cf16e43fcac63fedd8df9f7aed7ee8ea4d86e64bc6122964f006837',\n pinkYellowGreen: '8e0152c0267edd72adf0b3d6faddedf5f3efe1f2cab6de8780bb474f9125276419',\n spectral: '9e0142d13c4bf0704afcac63fedd8dfbf8b0e0f3a1a9dda269bda94288b55e4fa2',\n\n viridis: '440154470e61481a6c482575472f7d443a834144873d4e8a39568c35608d31688e2d708e2a788e27818e23888e21918d1f988b1fa08822a8842ab07f35b77943bf7154c56866cc5d7ad1518fd744a5db36bcdf27d2e21be9e51afde725',\n magma: '0000040404130b0924150e3720114b2c11603b0f704a107957157e651a80721f817f24828c29819a2e80a8327db6377ac43c75d1426fde4968e95462f1605df76f5cfa7f5efc8f65fe9f6dfeaf78febf84fece91fddea0fcedaffcfdbf',\n inferno: '0000040403130c0826170c3b240c4f330a5f420a68500d6c5d126e6b176e781c6d86216b932667a12b62ae305cbb3755c73e4cd24644dd513ae65c30ed6925f3771af8850ffb9506fca50afcb519fac62df6d645f2e661f3f484fcffa4',\n plasma: '0d088723069033059742039d5002a25d01a66a00a87801a88405a7900da49c179ea72198b12a90ba3488c33d80cb4779d35171da5a69e16462e76e5bed7953f2834cf68f44fa9a3dfca636fdb32ffec029fcce25f9dc24f5ea27f0f921',\n\n rainbow: '6e40aa883eb1a43db3bf3cafd83fa4ee4395fe4b83ff576eff6659ff7847ff8c38f3a130e2b72fcfcc36bee044aff05b8ff4576ff65b52f6673af27828ea8d1ddfa319d0b81cbecb23abd82f96e03d82e14c6edb5a5dd0664dbf6e40aa',\n sinebow: 'ff4040fc582af47218e78d0bd5a703bfbf00a7d5038de70b72f41858fc2a40ff402afc5818f4720be78d03d5a700bfbf03a7d50b8de71872f42a58fc4040ff582afc7218f48d0be7a703d5bf00bfd503a7e70b8df41872fc2a58ff4040',\n\n browns: 'eedbbdecca96e9b97ae4a865dc9856d18954c7784cc0673fb85536ad44339f3632',\n tealBlues: 'bce4d89dd3d181c3cb65b3c245a2b9368fae347da0306a932c5985',\n teals: 'bbdfdfa2d4d58ac9c975bcbb61b0af4da5a43799982b8b8c1e7f7f127273006667',\n warmGreys: 'dcd4d0cec5c1c0b8b4b3aaa7a59c9998908c8b827f7e7673726866665c5a59504e',\n\n goldGreen: 'f4d166d5ca60b6c35c98bb597cb25760a6564b9c533f8f4f33834a257740146c36',\n goldOrange: 'f4d166f8be5cf8aa4cf5983bf3852aef701be2621fd65322c54923b142239e3a26',\n goldRed: 'f4d166f6be59f9aa51fc964ef6834bee734ae56249db5247cf4244c43141b71d3e',\n\n lightGreyRed: 'efe9e6e1dad7d5cbc8c8bdb9bbaea9cd967ddc7b43e15f19df4011dc000b',\n lightGreyTeal: 'e4eaead6dcddc8ced2b7c2c7a6b4bc64b0bf22a6c32295c11f85be1876bc',\n lightMulti: 'e0f1f2c4e9d0b0de9fd0e181f6e072f6c053f3993ef77440ef4a3c',\n lightOrange: 'f2e7daf7d5baf9c499fab184fa9c73f68967ef7860e8645bde515bd43d5b',\n lightTealBlue: 'e3e9e0c0dccf9aceca7abfc859afc0389fb9328dad2f7ca0276b95255988',\n\n darkBlue: '3232322d46681a5c930074af008cbf05a7ce25c0dd38daed50f3faffffff',\n darkGold: '3c3c3c584b37725e348c7631ae8b2bcfa424ecc31ef9de30fff184ffffff',\n darkGreen: '3a3a3a215748006f4d048942489e4276b340a6c63dd2d836ffeb2cffffaa',\n darkMulti: '3737371f5287197d8c29a86995ce3fffe800ffffff',\n darkRed: '3434347036339e3c38cc4037e75d1eec8620eeab29f0ce32ffeb2c'\n};\n\nexport const discrete = {\n category10: '1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf',\n category20: '1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5',\n category20b: '393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6',\n category20c: '3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9',\n tableau10: '4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac',\n tableau20: '4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5',\n accent: '7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666',\n dark2: '1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666',\n paired: 'a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928',\n pastel1: 'fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2',\n pastel2: 'b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc',\n set1: 'e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999',\n set2: '66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3',\n set3: '8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f'\n};\n","import {discrete, continuous} from './palettes';\nimport {interpolateColors} from './interpolate';\n\nfunction colors(palette) {\n var n = palette.length / 6 | 0, c = new Array(n), i = 0;\n while (i < n) c[i] = '#' + palette.slice(i * 6, ++i * 6);\n return c;\n}\n\nfunction apply(_, f) {\n for (let k in _) scheme(k, f(_[k]));\n}\n\nconst schemes = {};\napply(discrete, colors);\napply(continuous, _ => interpolateColors(colors(_)));\n\nexport function scheme(name, scheme) {\n name = name && name.toLowerCase();\n if (arguments.length > 1) {\n schemes[name] = scheme;\n return this;\n } else {\n return schemes[name];\n }\n}\n","import {isLogarithmic, timeInterval, Time} from 'vega-scale';\nimport {error, isNumber, isObject, isString, peek, span} from 'vega-util';\nimport {timeFormat} from 'd3-time-format';\nimport {\n format as numberFormat,\n formatSpecifier\n} from 'd3-format';\n\n/**\n * Determine the tick count or interval function.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} count - The desired tick count or interval specifier.\n * @param {number} minStep - The desired minimum step between tick values.\n * @return {*} - The tick count or interval function.\n */\nexport function tickCount(scale, count, minStep) {\n var step;\n\n if (isNumber(count) && minStep != null) {\n count = Math.min(count, ~~(span(scale.domain()) / minStep) || 1);\n }\n\n if (isObject(count)) {\n step = count.step;\n count = count.interval;\n }\n\n if (isString(count)) {\n count = timeInterval(count, scale.type)\n || error('Only time and utc scales accept interval strings.');\n if (step) count = count.every(step);\n }\n\n return count;\n}\n\n/**\n * Filter a set of candidate tick values, ensuring that only tick values\n * that lie within the scale range are included.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {Array<*>} ticks - The candidate tick values.\n * @param {*} count - The tick count or interval function.\n * @return {Array<*>} - The filtered tick values.\n */\nexport function validTicks(scale, ticks, count) {\n var range = scale.range(),\n lo = Math.floor(range[0]),\n hi = Math.ceil(peek(range));\n\n if (lo > hi) {\n range = hi;\n hi = lo;\n lo = range;\n }\n\n ticks = ticks.filter(function(v) {\n v = scale(v);\n return lo <= v && v <= hi;\n });\n\n if (count > 0 && ticks.length > 1) {\n var endpoints = [ticks[0], peek(ticks)];\n while (ticks.length > count && ticks.length >= 3) {\n ticks = ticks.filter(function(_, i) { return !(i % 2); });\n }\n if (ticks.length < 3) {\n ticks = endpoints;\n }\n }\n\n return ticks;\n}\n\n/**\n * Generate tick values for the given scale and approximate tick count or\n * interval value. If the scale has a 'ticks' method, it will be used to\n * generate the ticks, with the count argument passed as a parameter. If the\n * scale lacks a 'ticks' method, the full scale domain will be returned.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} [count] - The approximate number of desired ticks.\n * @return {Array<*>} - The generated tick values.\n */\nexport function tickValues(scale, count) {\n return scale.bins ? validTicks(scale, binValues(scale.bins, count))\n : scale.ticks ? scale.ticks(count)\n : scale.domain();\n}\n\n/**\n * Generate tick values for an array of bin values.\n * @param {Array<*>} bins - An array of bin boundaries.\n * @param {Number} [count] - The approximate number of desired ticks.\n * @return {Array<*>} - The generated tick values.\n */\nfunction binValues(bins, count) {\n var n = bins.length,\n stride = ~~(n / (count || n));\n\n return stride < 2\n ? bins.slice()\n : bins.filter(function(x, i) { return !(i % stride); });\n}\n\n/**\n * Generate a label format function for a scale. If the scale has a\n * 'tickFormat' method, it will be used to generate the formatter, with the\n * count and specifier arguments passed as parameters. If the scale lacks a\n * 'tickFormat' method, the returned formatter performs simple string coercion.\n * If the input scale is a logarithmic scale and the format specifier does not\n * indicate a desired decimal precision, a special variable precision formatter\n * that automatically trims trailing zeroes will be generated.\n * @param {Scale} scale - The scale for which to generate the label formatter.\n * @param {*} [count] - The approximate number of desired ticks.\n * @param {string} [specifier] - The format specifier. Must be a legal d3\n * specifier string (see https://github.com/d3/d3-format#formatSpecifier).\n * @return {function(*):string} - The generated label formatter.\n */\nexport function tickFormat(scale, count, specifier, formatType) {\n var format = scale.tickFormat ? scale.tickFormat(count, specifier)\n : specifier && formatType === Time ? timeFormat(specifier)\n : specifier ? numberFormat(specifier)\n : String;\n\n if (isLogarithmic(scale.type)) {\n var logfmt = variablePrecision(specifier);\n format = scale.bins ? logfmt : filter(format, logfmt);\n }\n\n return format;\n}\n\nfunction filter(sourceFormat, targetFormat) {\n return function(_) {\n return sourceFormat(_) ? targetFormat(_) : '';\n };\n}\n\nfunction variablePrecision(specifier) {\n var s = formatSpecifier(specifier || ',');\n\n if (s.precision == null) {\n s.precision = 12;\n switch (s.type) {\n case '%': s.precision -= 2; break;\n case 'e': s.precision -= 1; break;\n }\n return trimZeroes(\n numberFormat(s), // number format\n numberFormat('.1f')(1)[1] // decimal point character\n );\n } else {\n return numberFormat(s);\n }\n}\n\nfunction trimZeroes(format, decimalChar) {\n return function(x) {\n var str = format(x),\n dec = str.indexOf(decimalChar),\n idx, end;\n\n if (dec < 0) return str;\n\n idx = rightmostDigit(str, dec);\n end = idx < str.length ? str.slice(idx) : '';\n while (--idx > dec) if (str[idx] !== '0') { ++idx; break; }\n\n return str.slice(0, idx) + end;\n };\n}\n\nfunction rightmostDigit(str, dec) {\n var i = str.lastIndexOf('e'), c;\n if (i > 0) return i;\n for (i=str.length; --i > dec;) {\n c = str.charCodeAt(i);\n if (c >= 48 && c <= 57) return i + 1; // is digit\n }\n}\n","import {tickCount, tickFormat, tickValues, validTicks} from './ticks';\nimport {Transform, ingest} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Generates axis ticks for visualizing a spatial scale.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Scale} params.scale - The scale to generate ticks for.\n * @param {*} [params.count=10] - The approximate number of ticks, or\n * desired tick interval, to use.\n * @param {Array<*>} [params.values] - The exact tick values to use.\n * These must be legal domain values for the provided scale.\n * If provided, the count argument is ignored.\n * @param {function(*):string} [params.formatSpecifier] - A format specifier\n * to use in conjunction with scale.tickFormat. Legal values are\n * any valid d3 4.0 format specifier.\n * @param {function(*):string} [params.format] - The format function to use.\n * If provided, the formatSpecifier argument is ignored.\n */\nexport default function AxisTicks(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(AxisTicks, Transform);\n\nprototype.transform = function(_, pulse) {\n if (this.value && !_.modified()) {\n return pulse.StopPropagation;\n }\n\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n ticks = this.value,\n scale = _.scale,\n tally = _.count == null ? (_.values ? _.values.length : 10) : _.count,\n count = tickCount(scale, tally, _.minstep),\n format = _.format || tickFormat(scale, count, _.formatSpecifier, _.formatType),\n values = _.values ? validTicks(scale, _.values, count) : tickValues(scale, count);\n\n if (ticks) out.rem = ticks;\n\n ticks = values.map(function(value, i) {\n return ingest({\n index: i / (values.length - 1 || 1),\n value: value,\n label: format(value)\n });\n });\n\n if (_.extra && ticks.length) {\n // add an extra tick pegged to the initial domain value\n // this is used to generate axes with 'binned' domains\n ticks.push(ingest({\n index: -1,\n extra: {value: ticks[0].value},\n label: ''\n }));\n }\n\n out.source = ticks;\n out.add = ticks;\n this.value = ticks;\n\n return out;\n};\n","import {Transform, ingest, tupleid} from 'vega-dataflow';\nimport {error, fastmap, inherits, isArray} from 'vega-util';\n\n/**\n * Joins a set of data elements against a set of visual items.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): object} [params.item] - An item generator function.\n * @param {function(object): *} [params.key] - The key field associating data and visual items.\n */\nexport default function DataJoin(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(DataJoin, Transform);\n\nfunction defaultItemCreate() {\n return ingest({});\n}\n\nfunction isExit(t) {\n return t.exit;\n}\n\nprototype.transform = function(_, pulse) {\n var df = pulse.dataflow,\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n item = _.item || defaultItemCreate,\n key = _.key || tupleid,\n map = this.value;\n\n // prevent transient (e.g., hover) requests from\n // cascading across marks derived from marks\n if (isArray(out.encode)) {\n out.encode = null;\n }\n\n if (map && (_.modified('key') || pulse.modified(key))) {\n error('DataJoin does not support modified key function or fields.');\n }\n\n if (!map) {\n pulse = pulse.addAll();\n this.value = map = fastmap().test(isExit);\n map.lookup = function(t) { return map.get(key(t)); };\n }\n\n pulse.visit(pulse.ADD, function(t) {\n var k = key(t),\n x = map.get(k);\n\n if (x) {\n if (x.exit) {\n map.empty--;\n out.add.push(x);\n } else {\n out.mod.push(x);\n }\n } else {\n map.set(k, (x = item(t)));\n out.add.push(x);\n }\n\n x.datum = t;\n x.exit = false;\n });\n\n pulse.visit(pulse.MOD, function(t) {\n var k = key(t),\n x = map.get(k);\n\n if (x) {\n x.datum = t;\n out.mod.push(x);\n }\n });\n\n pulse.visit(pulse.REM, function(t) {\n var k = key(t),\n x = map.get(k);\n\n if (t === x.datum && !x.exit) {\n out.rem.push(x);\n x.exit = true;\n ++map.empty;\n }\n });\n\n if (pulse.changed(pulse.ADD_MOD)) out.modifies('datum');\n\n if (_.clean && map.empty > df.cleanThreshold) df.runAfter(map.clean);\n\n return out;\n};\n","import {Transform} from 'vega-dataflow';\nimport {falsy, inherits, isArray} from 'vega-util';\n\n/**\n * Invokes encoding functions for visual items.\n * @constructor\n * @param {object} params - The parameters to the encoding functions. This\n * parameter object will be passed through to all invoked encoding functions.\n * @param {object} [params.mod=false] - Flag indicating if tuples in the input\n * mod set that are unmodified by encoders should be included in the output.\n * @param {object} param.encoders - The encoding functions\n * @param {function(object, object): boolean} [param.encoders.update] - Update encoding set\n * @param {function(object, object): boolean} [param.encoders.enter] - Enter encoding set\n * @param {function(object, object): boolean} [param.encoders.exit] - Exit encoding set\n */\nexport default function Encode(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(Encode, Transform);\n\nprototype.transform = function(_, pulse) {\n var out = pulse.fork(pulse.ADD_REM),\n fmod = _.mod || false,\n encoders = _.encoders,\n encode = pulse.encode;\n\n // if an array, the encode directive includes additional sets\n // that must be defined in order for the primary set to be invoked\n // e.g., only run the update set if the hover set is defined\n if (isArray(encode)) {\n if (out.changed() || encode.every(function(e) { return encoders[e]; })) {\n encode = encode[0];\n out.encode = null; // consume targeted encode directive\n } else {\n return pulse.StopPropagation;\n }\n }\n\n // marshall encoder functions\n var reenter = encode === 'enter',\n update = encoders.update || falsy,\n enter = encoders.enter || falsy,\n exit = encoders.exit || falsy,\n set = (encode && !reenter ? encoders[encode] : update) || falsy;\n\n if (pulse.changed(pulse.ADD)) {\n pulse.visit(pulse.ADD, function(t) { enter(t, _); update(t, _); });\n out.modifies(enter.output);\n out.modifies(update.output);\n if (set !== falsy && set !== update) {\n pulse.visit(pulse.ADD, function(t) { set(t, _); });\n out.modifies(set.output);\n }\n }\n\n if (pulse.changed(pulse.REM) && exit !== falsy) {\n pulse.visit(pulse.REM, function(t) { exit(t, _); });\n out.modifies(exit.output);\n }\n\n if (reenter || set !== falsy) {\n var flag = pulse.MOD | (_.modified() ? pulse.REFLOW : 0);\n if (reenter) {\n pulse.visit(flag, function(t) {\n var mod = enter(t, _) || fmod;\n if (set(t, _) || mod) out.mod.push(t);\n });\n if (out.mod.length) out.modifies(enter.output);\n } else {\n pulse.visit(flag, function(t) {\n if (set(t, _) || fmod) out.mod.push(t);\n });\n }\n if (out.mod.length) out.modifies(set.output);\n }\n\n return out.changed() ? out : pulse.StopPropagation;\n};\n","export var Symbols = 'symbol';\nexport var Discrete = 'discrete';\nexport var Gradient = 'gradient';\n","import {Symbols, Discrete} from './legend-types';\nimport {tickFormat, tickValues} from './ticks';\n\nimport {\n Quantile,\n Quantize,\n Threshold,\n tickFormat as spanFormat,\n Time\n} from 'vega-scale';\nimport {peek} from 'vega-util';\n\nconst symbols = {\n [Quantile]: 'quantiles',\n [Quantize]: 'thresholds',\n [Threshold]: 'domain'\n};\n\nconst formats = {\n [Quantile]: 'quantiles',\n [Quantize]: 'domain'\n};\n\nexport function labelValues(scale, count) {\n return scale.bins ? binValues(scale.bins)\n : symbols[scale.type] ? thresholdValues(scale[symbols[scale.type]]())\n : tickValues(scale, count);\n}\n\nexport function thresholdFormat(scale, specifier) {\n var _ = scale[formats[scale.type]](),\n n = _.length,\n d = n > 1 ? _[1] - _[0] : _[0], i;\n\n for (i=1; i} [params.values] - The exact tick values to use.\n * These must be legal domain values for the provided scale.\n * If provided, the count argument is ignored.\n * @param {string} [params.formatSpecifier] - A format specifier\n * to use in conjunction with scale.tickFormat. Legal values are\n * any valid D3 format specifier string.\n * @param {function(*):string} [params.format] - The format function to use.\n * If provided, the formatSpecifier argument is ignored.\n */\nexport default function LegendEntries(params) {\n Transform.call(this, [], params);\n}\n\nvar prototype = inherits(LegendEntries, Transform);\n\nprototype.transform = function(_, pulse) {\n if (this.value != null && !_.modified()) {\n return pulse.StopPropagation;\n }\n\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n items = this.value,\n type = _.type || Symbols,\n scale = _.scale,\n count = tickCount(scale, _.count == null ? 5 : _.count, _.minstep),\n format = _.format || labelFormat(scale, count, type, _.formatSpecifier, _.formatType),\n values = _.values || labelValues(scale, count, type),\n domain, fraction, size, offset;\n\n if (items) out.rem = items;\n\n if (type === Symbols) {\n if (isFunction(size = _.size)) {\n // if first value maps to size zero, remove from list (vega#717)\n if (!_.values && scale(values[0]) === 0) {\n values = values.slice(1);\n }\n // compute size offset for legend entries\n offset = values.reduce(function(max, value) {\n return Math.max(max, size(value, _));\n }, 0);\n } else {\n size = constant(offset = size || 8);\n }\n\n items = values.map(function(value, index) {\n return ingest({\n index: index,\n label: format(value, index, values),\n value: value,\n offset: offset,\n size: size(value, _)\n });\n });\n }\n\n else if (type === Gradient) {\n domain = scale.domain(),\n fraction = scaleFraction(scale, domain[0], peek(domain));\n\n // if automatic label generation produces 2 or fewer values,\n // use the domain end points instead (fixes vega/vega#1364)\n if (values.length < 3 && !_.values && domain[0] !== peek(domain)) {\n values = [domain[0], peek(domain)];\n }\n\n items = values.map(function(value, index) {\n return ingest({\n index: index,\n label: format(value, index, values),\n value: value,\n perc: fraction(value)\n });\n });\n }\n\n else {\n size = values.length - 1;\n fraction = labelFraction(scale);\n\n items = values.map(function(value, index) {\n return ingest({\n index: index,\n label: format(value, index, values),\n value: value,\n perc: index ? fraction(value) : 0,\n perc2: index === size ? 1 : fraction(values[index+1])\n });\n });\n }\n\n out.source = items;\n out.add = items;\n this.value = items;\n\n return out;\n};\n","import {Transform} from 'vega-dataflow';\nimport {error, fastmap, inherits} from 'vega-util';\n\nvar Paths = fastmap({\n 'line': line,\n 'line-radial': lineR,\n 'arc': arc,\n 'arc-radial': arcR,\n 'curve': curve,\n 'curve-radial': curveR,\n 'orthogonal-horizontal': orthoX,\n 'orthogonal-vertical': orthoY,\n 'orthogonal-radial': orthoR,\n 'diagonal-horizontal': diagonalX,\n 'diagonal-vertical': diagonalY,\n 'diagonal-radial': diagonalR\n});\n\nfunction sourceX(t) { return t.source.x; }\nfunction sourceY(t) { return t.source.y; }\nfunction targetX(t) { return t.target.x; }\nfunction targetY(t) { return t.target.y; }\n\n /**\n * Layout paths linking source and target elements.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nexport default function LinkPath(params) {\n Transform.call(this, {}, params);\n}\n\nLinkPath.Definition = {\n \"type\": \"LinkPath\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"sourceX\", \"type\": \"field\", \"default\": \"source.x\" },\n { \"name\": \"sourceY\", \"type\": \"field\", \"default\": \"source.y\" },\n { \"name\": \"targetX\", \"type\": \"field\", \"default\": \"target.x\" },\n { \"name\": \"targetY\", \"type\": \"field\", \"default\": \"target.y\" },\n { \"name\": \"orient\", \"type\": \"enum\", \"default\": \"vertical\",\n \"values\": [\"horizontal\", \"vertical\", \"radial\"] },\n { \"name\": \"shape\", \"type\": \"enum\", \"default\": \"line\",\n \"values\": [\"line\", \"arc\", \"curve\", \"diagonal\", \"orthogonal\"] },\n { \"name\": \"require\", \"type\": \"signal\" },\n { \"name\": \"as\", \"type\": \"string\", \"default\": \"path\" }\n ]\n};\n\nvar prototype = inherits(LinkPath, Transform);\n\nprototype.transform = function(_, pulse) {\n var sx = _.sourceX || sourceX,\n sy = _.sourceY || sourceY,\n tx = _.targetX || targetX,\n ty = _.targetY || targetY,\n as = _.as || 'path',\n orient = _.orient || 'vertical',\n shape = _.shape || 'line',\n path = Paths.get(shape + '-' + orient) || Paths.get(shape);\n\n if (!path) {\n error('LinkPath unsupported type: ' + _.shape\n + (_.orient ? '-' + _.orient : ''));\n }\n\n pulse.visit(pulse.SOURCE, function(t) {\n t[as] = path(sx(t), sy(t), tx(t), ty(t));\n });\n\n return pulse.reflow(_.modified()).modifies(as);\n};\n\n// -- Link Path Generation Methods -----\n\nfunction line(sx, sy, tx, ty) {\n return 'M' + sx + ',' + sy +\n 'L' + tx + ',' + ty;\n}\n\nfunction lineR(sa, sr, ta, tr) {\n return line(\n sr * Math.cos(sa), sr * Math.sin(sa),\n tr * Math.cos(ta), tr * Math.sin(ta)\n );\n}\n\nfunction arc(sx, sy, tx, ty) {\n var dx = tx - sx,\n dy = ty - sy,\n rr = Math.sqrt(dx * dx + dy * dy) / 2,\n ra = 180 * Math.atan2(dy, dx) / Math.PI;\n return 'M' + sx + ',' + sy +\n 'A' + rr + ',' + rr +\n ' ' + ra + ' 0 1' +\n ' ' + tx + ',' + ty;\n}\n\nfunction arcR(sa, sr, ta, tr) {\n return arc(\n sr * Math.cos(sa), sr * Math.sin(sa),\n tr * Math.cos(ta), tr * Math.sin(ta)\n );\n}\n\nfunction curve(sx, sy, tx, ty) {\n var dx = tx - sx,\n dy = ty - sy,\n ix = 0.2 * (dx + dy),\n iy = 0.2 * (dy - dx);\n return 'M' + sx + ',' + sy +\n 'C' + (sx+ix) + ',' + (sy+iy) +\n ' ' + (tx+iy) + ',' + (ty-ix) +\n ' ' + tx + ',' + ty;\n}\n\nfunction curveR(sa, sr, ta, tr) {\n return curve(\n sr * Math.cos(sa), sr * Math.sin(sa),\n tr * Math.cos(ta), tr * Math.sin(ta)\n );\n}\n\nfunction orthoX(sx, sy, tx, ty) {\n return 'M' + sx + ',' + sy +\n 'V' + ty + 'H' + tx;\n}\n\nfunction orthoY(sx, sy, tx, ty) {\n return 'M' + sx + ',' + sy +\n 'H' + tx + 'V' + ty;\n}\n\nfunction orthoR(sa, sr, ta, tr) {\n var sc = Math.cos(sa),\n ss = Math.sin(sa),\n tc = Math.cos(ta),\n ts = Math.sin(ta),\n sf = Math.abs(ta - sa) > Math.PI ? ta <= sa : ta > sa;\n return 'M' + (sr*sc) + ',' + (sr*ss) +\n 'A' + sr + ',' + sr + ' 0 0,' + (sf?1:0) +\n ' ' + (sr*tc) + ',' + (sr*ts) +\n 'L' + (tr*tc) + ',' + (tr*ts);\n}\n\nfunction diagonalX(sx, sy, tx, ty) {\n var m = (sx + tx) / 2;\n return 'M' + sx + ',' + sy +\n 'C' + m + ',' + sy +\n ' ' + m + ',' + ty +\n ' ' + tx + ',' + ty;\n}\n\nfunction diagonalY(sx, sy, tx, ty) {\n var m = (sy + ty) / 2;\n return 'M' + sx + ',' + sy +\n 'C' + sx + ',' + m +\n ' ' + tx + ',' + m +\n ' ' + tx + ',' + ty;\n}\n\nfunction diagonalR(sa, sr, ta, tr) {\n var sc = Math.cos(sa),\n ss = Math.sin(sa),\n tc = Math.cos(ta),\n ts = Math.sin(ta),\n mr = (sr + tr) / 2;\n return 'M' + (sr*sc) + ',' + (sr*ss) +\n 'C' + (mr*sc) + ',' + (mr*ss) +\n ' ' + (mr*tc) + ',' + (mr*ts) +\n ' ' + (tr*tc) + ',' + (tr*ts);\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","export default function sum(values, valueof) {\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n sum += value;\n }\n }\n }\n return sum;\n}\n","import {Transform} from 'vega-dataflow';\nimport {inherits, one} from 'vega-util';\nimport {range, sum} from 'd3-array';\n\n/**\n * Pie and donut chart layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size pie segments.\n * @param {number} [params.startAngle=0] - The start angle (in radians) of the layout.\n * @param {number} [params.endAngle=2π] - The end angle (in radians) of the layout.\n * @param {boolean} [params.sort] - Boolean flag for sorting sectors by value.\n */\nexport default function Pie(params) {\n Transform.call(this, null, params);\n}\n\nPie.Definition = {\n \"type\": \"Pie\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"field\", \"type\": \"field\" },\n { \"name\": \"startAngle\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"endAngle\", \"type\": \"number\", \"default\": 6.283185307179586 },\n { \"name\": \"sort\", \"type\": \"boolean\", \"default\": false },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": 2, \"default\": [\"startAngle\", \"endAngle\"] }\n ]\n};\n\nvar prototype = inherits(Pie, Transform);\n\nprototype.transform = function(_, pulse) {\n var as = _.as || ['startAngle', 'endAngle'],\n startAngle = as[0],\n endAngle = as[1],\n field = _.field || one,\n start = _.startAngle || 0,\n stop = _.endAngle != null ? _.endAngle : 2 * Math.PI,\n data = pulse.source,\n values = data.map(field),\n n = values.length,\n a = start,\n k = (stop - start) / sum(values),\n index = range(n),\n i, t, v;\n\n if (_.sort) {\n index.sort(function(a, b) {\n return values[a] - values[b];\n });\n }\n\n for (i=0; i -1) return raw;\n\n var domain = _.domain,\n type = scale.type,\n zero = _.zero || (_.zero === undefined && includeZero(scale)),\n n, mid;\n\n if (!domain) return 0;\n\n // adjust continuous domain for minimum pixel padding\n if (includePad(type) && _.padding && domain[0] !== peek(domain)) {\n domain = padDomain(type, domain, _.range, _.padding, _.exponent, _.constant);\n }\n\n // adjust domain based on zero, min, max settings\n if (zero || _.domainMin != null || _.domainMax != null || _.domainMid != null) {\n n = ((domain = domain.slice()).length - 1) || 1;\n if (zero) {\n if (domain[0] > 0) domain[0] = 0;\n if (domain[n] < 0) domain[n] = 0;\n }\n if (_.domainMin != null) domain[0] = _.domainMin;\n if (_.domainMax != null) domain[n] = _.domainMax;\n\n if (_.domainMid != null) {\n mid = _.domainMid;\n if (mid < domain[0] || mid > domain[n]) {\n df.warn('Scale domainMid exceeds domain min or max.', mid);\n }\n domain.splice(n, 0, mid);\n }\n }\n\n // set the scale domain\n scale.domain(domainCheck(type, domain, df));\n\n // if ordinal scale domain is defined, prevent implicit\n // domain construction as side-effect of scale lookup\n if (type === Ordinal) {\n scale.unknown(_.domainImplicit ? scaleImplicit : undefined);\n }\n\n // perform 'nice' adjustment as requested\n if (_.nice && scale.nice) {\n scale.nice((_.nice !== true && tickCount(scale, _.nice)) || null);\n }\n\n // return the cardinality of the domain\n return domain.length;\n}\n\nfunction rawDomain(scale, raw, df) {\n if (raw) {\n scale.domain(domainCheck(scale.type, raw, df));\n return raw.length;\n } else {\n return -1;\n }\n}\n\nfunction padDomain(type, domain, range, pad, exponent, constant) {\n var span = Math.abs(peek(range) - range[0]),\n frac = span / (span - 2 * pad),\n d = type === Log ? zoomLog(domain, null, frac)\n : type === Sqrt ? zoomPow(domain, null, frac, 0.5)\n : type === Pow ? zoomPow(domain, null, frac, exponent || 1)\n : type === Symlog ? zoomSymlog(domain, null, frac, constant || 1)\n : zoomLinear(domain, null, frac);\n\n domain = domain.slice();\n domain[0] = d[0];\n domain[domain.length-1] = d[1];\n return domain;\n}\n\nfunction domainCheck(type, domain, df) {\n if (isLogarithmic(type)) {\n // sum signs of domain values\n // if all pos or all neg, abs(sum) === domain.length\n var s = Math.abs(domain.reduce(function(s, v) {\n return s + (v < 0 ? -1 : v > 0 ? 1 : 0);\n }, 0));\n\n if (s !== domain.length) {\n df.warn('Log scale domain includes zero: ' + stringValue(domain));\n }\n }\n return domain;\n}\n\nfunction configureBins(scale, _, count) {\n let bins = _.bins;\n\n if (bins && !isArray(bins)) {\n // generate bin boundary array\n const domain = (bins.start == null || bins.stop == null) && scale.domain(),\n start = bins.start == null ? domain[0] : bins.start,\n stop = bins.stop == null ? peek(domain) : bins.stop,\n step = bins.step;\n\n if (!step) error('Scale bins parameter missing step property.');\n bins = sequence(start, stop + step, step);\n }\n\n if (bins) {\n // assign bin boundaries to scale instance\n scale.bins = bins;\n } else if (scale.bins) {\n // no current bins, remove bins if previously set\n delete scale.bins;\n }\n\n // special handling for bin-ordinal scales\n if (scale.type === BinOrdinal) {\n if (!bins) {\n // the domain specifies the bins\n scale.bins = scale.domain();\n } else if (!_.domain && !_.domainRaw) {\n // the bins specify the domain\n scale.domain(bins);\n count = bins.length;\n }\n }\n\n // return domain cardinality\n return count;\n}\n\nfunction configureRange(scale, _, count) {\n var round = _.round || false,\n range = _.range;\n\n // if range step specified, calculate full range extent\n if (_.rangeStep != null) {\n range = configureRangeStep(scale.type, _, count);\n }\n\n // else if a range scheme is defined, use that\n else if (_.scheme) {\n range = configureScheme(scale.type, _, count);\n if (isFunction(range)) return scale.interpolator(range);\n }\n\n // given a range array for an interpolating scale, convert to interpolator\n else if (range && isInterpolating(scale.type)) {\n return scale.interpolator(\n interpolateColors(flip(range, _.reverse), _.interpolate, _.interpolateGamma)\n );\n }\n\n // configure rounding / interpolation\n if (range && _.interpolate && scale.interpolate) {\n scale.interpolate(getInterpolate(_.interpolate, _.interpolateGamma));\n } else if (isFunction(scale.round)) {\n scale.round(round);\n } else if (isFunction(scale.rangeRound)) {\n scale.interpolate(round ? interpolateRound : interpolate);\n }\n\n if (range) scale.range(flip(range, _.reverse));\n}\n\nfunction configureRangeStep(type, _, count) {\n if (type !== Band && type !== Point) {\n error('Only band and point scales support rangeStep.');\n }\n\n // calculate full range based on requested step size and padding\n var outer = (_.paddingOuter != null ? _.paddingOuter : _.padding) || 0,\n inner = type === Point ? 1\n : ((_.paddingInner != null ? _.paddingInner : _.padding) || 0);\n return [0, _.rangeStep * bandSpace(count, inner, outer)];\n}\n\nfunction configureScheme(type, _, count) {\n var extent = _.schemeExtent,\n name, scheme;\n\n if (isArray(_.scheme)) {\n scheme = interpolateColors(_.scheme, _.interpolate, _.interpolateGamma);\n } else {\n name = _.scheme.toLowerCase();\n scheme = getScheme(name);\n if (!scheme) error('Unrecognized scheme name: ' + _.scheme);\n }\n\n // determine size for potential discrete range\n count = (type === Threshold) ? count + 1\n : (type === BinOrdinal) ? count - 1\n : (type === Quantile || type === Quantize) ? (+_.schemeCount || DEFAULT_COUNT)\n : count;\n\n // adjust and/or quantize scheme as appropriate\n return isInterpolating(type) ? adjustScheme(scheme, extent, _.reverse)\n : isFunction(scheme) ? quantizeInterpolator(adjustScheme(scheme, extent), count)\n : type === Ordinal ? scheme : scheme.slice(0, count);\n}\n\nfunction adjustScheme(scheme, extent, reverse) {\n return (isFunction(scheme) && (extent || reverse))\n ? interpolateRange(scheme, flip(extent || [0, 1], reverse))\n : scheme;\n}\n\nfunction flip(array, reverse) {\n return reverse ? array.slice().reverse() : array;\n}\n\n","import {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Sorts scenegraph items in the pulse source array.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator\n * function for sorting tuples.\n */\nexport default function SortItems(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(SortItems, Transform);\n\nprototype.transform = function(_, pulse) {\n var mod = _.modified('sort')\n || pulse.changed(pulse.ADD)\n || pulse.modified(_.sort.fields)\n || pulse.modified('datum');\n\n if (mod) pulse.source.sort(_.sort);\n\n this.modified(mod);\n return pulse;\n};\n","import {Transform} from 'vega-dataflow';\nimport {inherits, one} from 'vega-util';\n\nvar Zero = 'zero',\n Center = 'center',\n Normalize = 'normalize',\n DefOutput = ['y0', 'y1'];\n\n/**\n * Stack layout for visualization elements.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to stack.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {function(object,object): number} [params.sort] - A comparator for stack sorting.\n * @param {string} [offset='zero'] - One of 'zero', 'center', 'normalize'.\n */\nexport default function Stack(params) {\n Transform.call(this, null, params);\n}\n\nStack.Definition = {\n \"type\": \"Stack\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"field\", \"type\": \"field\" },\n { \"name\": \"groupby\", \"type\": \"field\", \"array\": true },\n { \"name\": \"sort\", \"type\": \"compare\" },\n { \"name\": \"offset\", \"type\": \"enum\", \"default\": Zero, \"values\": [Zero, Center, Normalize] },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": 2, \"default\": DefOutput }\n ]\n};\n\nvar prototype = inherits(Stack, Transform);\n\nprototype.transform = function(_, pulse) {\n var as = _.as || DefOutput,\n y0 = as[0],\n y1 = as[1],\n field = _.field || one,\n stack = _.offset === Center ? stackCenter\n : _.offset === Normalize ? stackNormalize\n : stackZero,\n groups, i, n, max;\n\n // partition, sum, and sort the stack groups\n groups = partition(pulse.source, _.groupby, _.sort, field);\n\n // compute stack layouts per group\n for (i=0, n=groups.length, max=groups.max; i max) max = s;\n if (sort) g.sort(sort);\n }\n groups.max = max;\n\n return groups;\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","export default function(values, valueof) {\n let min;\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n return [min, max];\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","export default function(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n min,\n max;\n\n if (valueof == null) {\n while (++i < n) { // Find the first comparable value.\n if ((value = values[i]) != null && value >= value) {\n min = max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = values[i]) != null) {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n }\n\n else {\n while (++i < n) { // Find the first comparable value.\n if ((value = valueof(values[i], i, values)) != null && value >= value) {\n min = max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = valueof(values[i], i, values)) != null) {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n }\n\n return [min, max];\n}\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","export default function(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n max;\n\n if (valueof == null) {\n while (++i < n) { // Find the first comparable value.\n if ((value = values[i]) != null && value >= value) {\n max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = values[i]) != null && value > max) {\n max = value;\n }\n }\n }\n }\n }\n\n else {\n while (++i < n) { // Find the first comparable value.\n if ((value = valueof(values[i], i, values)) != null && value >= value) {\n max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = valueof(values[i], i, values)) != null && value > max) {\n max = value;\n }\n }\n }\n }\n }\n\n return max;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\n","export default function(a, b) {\n return a - b;\n}\n","export default function(ring) {\n var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];\n while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];\n return area;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(ring, hole) {\n var i = -1, n = hole.length, c;\n while (++i < n) if (c = ringContains(ring, hole[i])) return c;\n return 0;\n}\n\nfunction ringContains(ring, point) {\n var x = point[0], y = point[1], contains = -1;\n for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1];\n if (segmentContains(pi, pj, point)) return 0;\n if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains;\n }\n return contains;\n}\n\nfunction segmentContains(a, b, c) {\n var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);\n}\n\nfunction collinear(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);\n}\n\nfunction within(p, q, r) {\n return p <= q && q <= r || r <= q && q <= p;\n}\n","export default function() {}\n","import {extent, thresholdSturges, tickStep, range} from \"d3-array\";\nimport {slice} from \"./array\";\nimport ascending from \"./ascending\";\nimport area from \"./area\";\nimport constant from \"./constant\";\nimport contains from \"./contains\";\nimport noop from \"./noop\";\n\nvar cases = [\n [],\n [[[1.0, 1.5], [0.5, 1.0]]],\n [[[1.5, 1.0], [1.0, 1.5]]],\n [[[1.5, 1.0], [0.5, 1.0]]],\n [[[1.0, 0.5], [1.5, 1.0]]],\n [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]],\n [[[1.0, 0.5], [1.0, 1.5]]],\n [[[1.0, 0.5], [0.5, 1.0]]],\n [[[0.5, 1.0], [1.0, 0.5]]],\n [[[1.0, 1.5], [1.0, 0.5]]],\n [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]],\n [[[1.5, 1.0], [1.0, 0.5]]],\n [[[0.5, 1.0], [1.5, 1.0]]],\n [[[1.0, 1.5], [1.5, 1.0]]],\n [[[0.5, 1.0], [1.0, 1.5]]],\n []\n];\n\nexport default function() {\n var dx = 1,\n dy = 1,\n threshold = thresholdSturges,\n smooth = smoothLinear;\n\n function contours(values) {\n var tz = threshold(values);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n var domain = extent(values), start = domain[0], stop = domain[1];\n tz = tickStep(start, stop, tz);\n tz = range(Math.floor(start / tz) * tz, Math.floor(stop / tz) * tz, tz);\n } else {\n tz = tz.slice().sort(ascending);\n }\n\n return tz.map(function(value) {\n return contour(values, value);\n });\n }\n\n // Accumulate, smooth contour rings, assign holes to exterior rings.\n // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js\n function contour(values, value) {\n var polygons = [],\n holes = [];\n\n isorings(values, value, function(ring) {\n smooth(ring, values, value);\n if (area(ring) > 0) polygons.push([ring]);\n else holes.push(ring);\n });\n\n holes.forEach(function(hole) {\n for (var i = 0, n = polygons.length, polygon; i < n; ++i) {\n if (contains((polygon = polygons[i])[0], hole) !== -1) {\n polygon.push(hole);\n return;\n }\n }\n });\n\n return {\n type: \"MultiPolygon\",\n value: value,\n coordinates: polygons\n };\n }\n\n // Marching squares with isolines stitched into rings.\n // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js\n function isorings(values, value, callback) {\n var fragmentByStart = new Array,\n fragmentByEnd = new Array,\n x, y, t0, t1, t2, t3;\n\n // Special case for the first row (y = -1, t2 = t3 = 0).\n x = y = -1;\n t1 = values[0] >= value;\n cases[t1 << 1].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[x + 1] >= value;\n cases[t0 | t1 << 1].forEach(stitch);\n }\n cases[t1 << 0].forEach(stitch);\n\n // General case for the intermediate rows.\n while (++y < dy - 1) {\n x = -1;\n t1 = values[y * dx + dx] >= value;\n t2 = values[y * dx] >= value;\n cases[t1 << 1 | t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t1 | t2 << 3].forEach(stitch);\n }\n\n // Special case for the last row (y = dy - 1, t0 = t1 = 0).\n x = -1;\n t2 = values[y * dx] >= value;\n cases[t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t2 << 3].forEach(stitch);\n\n function stitch(line) {\n var start = [line[0][0] + x, line[0][1] + y],\n end = [line[1][0] + x, line[1][1] + y],\n startIndex = index(start),\n endIndex = index(end),\n f, g;\n if (f = fragmentByEnd[startIndex]) {\n if (g = fragmentByStart[endIndex]) {\n delete fragmentByEnd[f.end];\n delete fragmentByStart[g.start];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)};\n }\n } else {\n delete fragmentByEnd[f.end];\n f.ring.push(end);\n fragmentByEnd[f.end = endIndex] = f;\n }\n } else if (f = fragmentByStart[endIndex]) {\n if (g = fragmentByEnd[startIndex]) {\n delete fragmentByStart[f.start];\n delete fragmentByEnd[g.end];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)};\n }\n } else {\n delete fragmentByStart[f.start];\n f.ring.unshift(start);\n fragmentByStart[f.start = startIndex] = f;\n }\n } else {\n fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]};\n }\n }\n }\n\n function index(point) {\n return point[0] * 2 + point[1] * (dx + 1) * 4;\n }\n\n function smoothLinear(ring, values, value) {\n ring.forEach(function(point) {\n var x = point[0],\n y = point[1],\n xt = x | 0,\n yt = y | 0,\n v0,\n v1 = values[yt * dx + xt];\n if (x > 0 && x < dx && xt === x) {\n v0 = values[yt * dx + xt - 1];\n point[0] = x + (value - v0) / (v1 - v0) - 0.5;\n }\n if (y > 0 && y < dy && yt === y) {\n v0 = values[(yt - 1) * dx + xt];\n point[1] = y + (value - v0) / (v1 - v0) - 0.5;\n }\n });\n }\n\n contours.contour = contour;\n\n contours.size = function(_) {\n if (!arguments.length) return [dx, dy];\n var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n if (!(_0 > 0) || !(_1 > 0)) throw new Error(\"invalid size\");\n return dx = _0, dy = _1, contours;\n };\n\n contours.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), contours) : threshold;\n };\n\n contours.smooth = function(_) {\n return arguments.length ? (smooth = _ ? smoothLinear : noop, contours) : smooth === smoothLinear;\n };\n\n return contours;\n}\n","// TODO Optimize edge cases.\n// TODO Optimize index calculation.\n// TODO Optimize arguments.\nexport function blurX(source, target, r) {\n var n = source.width,\n m = source.height,\n w = (r << 1) + 1;\n for (var j = 0; j < m; ++j) {\n for (var i = 0, sr = 0; i < n + r; ++i) {\n if (i < n) {\n sr += source.data[i + j * n];\n }\n if (i >= r) {\n if (i >= w) {\n sr -= source.data[i - w + j * n];\n }\n target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);\n }\n }\n }\n}\n\n// TODO Optimize edge cases.\n// TODO Optimize index calculation.\n// TODO Optimize arguments.\nexport function blurY(source, target, r) {\n var n = source.width,\n m = source.height,\n w = (r << 1) + 1;\n for (var i = 0; i < n; ++i) {\n for (var j = 0, sr = 0; j < m + r; ++j) {\n if (j < m) {\n sr += source.data[i + j * n];\n }\n if (j >= r) {\n if (j >= w) {\n sr -= source.data[i + (j - w) * n];\n }\n target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);\n }\n }\n }\n}\n","import {max, range, tickStep} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {blurX, blurY} from \"./blur\";\nimport constant from \"./constant\";\nimport contours from \"./contours\";\n\nfunction defaultX(d) {\n return d[0];\n}\n\nfunction defaultY(d) {\n return d[1];\n}\n\nfunction defaultWeight() {\n return 1;\n}\n\nexport default function() {\n var x = defaultX,\n y = defaultY,\n weight = defaultWeight,\n dx = 960,\n dy = 500,\n r = 20, // blur radius\n k = 2, // log2(grid cell size)\n o = r * 3, // grid offset, to pad for blur\n n = (dx + o * 2) >> k, // grid width\n m = (dy + o * 2) >> k, // grid height\n threshold = constant(20);\n\n function density(data) {\n var values0 = new Float32Array(n * m),\n values1 = new Float32Array(n * m);\n\n data.forEach(function(d, i, data) {\n var xi = (+x(d, i, data) + o) >> k,\n yi = (+y(d, i, data) + o) >> k,\n wi = +weight(d, i, data);\n if (xi >= 0 && xi < n && yi >= 0 && yi < m) {\n values0[xi + yi * n] += wi;\n }\n });\n\n // TODO Optimize.\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n\n var tz = threshold(values0);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n var stop = max(values0);\n tz = tickStep(0, stop, tz);\n tz = range(0, Math.floor(stop / tz) * tz, tz);\n tz.shift();\n }\n\n return contours()\n .thresholds(tz)\n .size([n, m])\n (values0)\n .map(transform);\n }\n\n function transform(geometry) {\n geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel.\n geometry.coordinates.forEach(transformPolygon);\n return geometry;\n }\n\n function transformPolygon(coordinates) {\n coordinates.forEach(transformRing);\n }\n\n function transformRing(coordinates) {\n coordinates.forEach(transformPoint);\n }\n\n // TODO Optimize.\n function transformPoint(coordinates) {\n coordinates[0] = coordinates[0] * Math.pow(2, k) - o;\n coordinates[1] = coordinates[1] * Math.pow(2, k) - o;\n }\n\n function resize() {\n o = r * 3;\n n = (dx + o * 2) >> k;\n m = (dy + o * 2) >> k;\n return density;\n }\n\n density.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), density) : x;\n };\n\n density.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), density) : y;\n };\n\n density.weight = function(_) {\n return arguments.length ? (weight = typeof _ === \"function\" ? _ : constant(+_), density) : weight;\n };\n\n density.size = function(_) {\n if (!arguments.length) return [dx, dy];\n var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n if (!(_0 >= 0) && !(_0 >= 0)) throw new Error(\"invalid size\");\n return dx = _0, dy = _1, resize();\n };\n\n density.cellSize = function(_) {\n if (!arguments.length) return 1 << k;\n if (!((_ = +_) >= 1)) throw new Error(\"invalid cell size\");\n return k = Math.floor(Math.log(_) / Math.LN2), resize();\n };\n\n density.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), density) : threshold;\n };\n\n density.bandwidth = function(_) {\n if (!arguments.length) return Math.sqrt(r * (r + 1));\n if (!((_ = +_) >= 0)) throw new Error(\"invalid bandwidth\");\n return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize();\n };\n\n return density;\n}\n","import {ingest, Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\nimport {extent} from 'd3-array';\nimport {contours, contourDensity} from 'd3-contour';\n\nvar CONTOUR_PARAMS = ['size', 'smooth'];\nvar DENSITY_PARAMS = ['x', 'y', 'weight', 'size', 'cellSize', 'bandwidth'];\n\n/**\n * Generate contours based on kernel-density estimation of point data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.size - The dimensions [width, height] over which to compute contours.\n * If the values parameter is provided, this must be the dimensions of the input data.\n * If density estimation is performed, this is the output view dimensions in pixels.\n * @param {Array} [params.values] - An array of numeric values representing an\n * width x height grid of values over which to compute contours. If unspecified, this\n * transform will instead attempt to compute contours for the kernel density estimate\n * using values drawn from data tuples in the input pulse.\n * @param {function(object): number} [params.x] - The pixel x-coordinate accessor for density estimation.\n * @param {function(object): number} [params.y] - The pixel y-coordinate accessor for density estimation.\n * @param {function(object): number} [params.weight] - The data point weight accessor for density estimation.\n * @param {number} [params.cellSize] - Contour density calculation cell size.\n * @param {number} [params.bandwidth] - Kernel density estimation bandwidth.\n * @param {Array} [params.thresholds] - Contour threshold array. If\n * this parameter is set, the count and nice parameters will be ignored.\n * @param {number} [params.count] - The desired number of contours.\n * @param {boolean} [params.nice] - Boolean flag indicating if the contour\n * threshold values should be automatically aligned to \"nice\"\n * human-friendly values. Setting this flag may cause the number of\n * thresholds to deviate from the specified count.\n * @param {boolean} [params.smooth] - Boolean flag indicating if the contour\n * polygons should be smoothed using linear interpolation. The default is\n * true. The parameter is ignored when using density estimation.\n */\nexport default function Contour(params) {\n Transform.call(this, null, params);\n}\n\nContour.Definition = {\n \"type\": \"Contour\",\n \"metadata\": {\"generates\": true},\n \"params\": [\n { \"name\": \"size\", \"type\": \"number\", \"array\": true, \"length\": 2, \"required\": true },\n { \"name\": \"values\", \"type\": \"number\", \"array\": true },\n { \"name\": \"x\", \"type\": \"field\" },\n { \"name\": \"y\", \"type\": \"field\" },\n { \"name\": \"weight\", \"type\": \"field\" },\n { \"name\": \"cellSize\", \"type\": \"number\" },\n { \"name\": \"bandwidth\", \"type\": \"number\" },\n { \"name\": \"count\", \"type\": \"number\" },\n { \"name\": \"smooth\", \"type\": \"boolean\" },\n { \"name\": \"nice\", \"type\": \"boolean\", \"default\": false },\n { \"name\": \"thresholds\", \"type\": \"number\", \"array\": true }\n ]\n};\n\nvar prototype = inherits(Contour, Transform);\n\nprototype.transform = function(_, pulse) {\n if (this.value && !pulse.changed() && !_.modified())\n return pulse.StopPropagation;\n\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n count = _.count || 10,\n contour, params, values;\n\n if (_.values) {\n contour = contours();\n params = CONTOUR_PARAMS;\n values = _.values;\n } else {\n contour = contourDensity();\n params = DENSITY_PARAMS;\n values = pulse.materialize(pulse.SOURCE).source;\n }\n\n // set threshold parameter\n contour.thresholds(_.thresholds || (_.nice ? count : quantize(count)));\n\n // set all other parameters\n params.forEach(function(param) {\n if (_[param] != null) contour[param](_[param]);\n });\n\n if (this.value) out.rem = this.value;\n values = values && values.length ? contour(values).map(ingest) : [];\n this.value = out.source = out.add = values;\n\n return out;\n};\n\nfunction quantize(k) {\n return function(values) {\n var ex = extent(values), x0 = ex[0], dx = ex[1] - x0,\n t = [], i = 1;\n for (; i<=k; ++i) t.push(x0 + dx * i / (k + 1));\n return t;\n };\n}\n","export var Feature = 'Feature';\nexport var FeatureCollection = 'FeatureCollection';\nexport var MultiPoint = 'MultiPoint';\n","import {Feature, FeatureCollection, MultiPoint} from './constants';\nimport {Transform} from 'vega-dataflow';\nimport {accessorFields, inherits} from 'vega-util';\n\n/**\n * Consolidate an array of [longitude, latitude] points or GeoJSON features\n * into a combined GeoJSON object. This transform is particularly useful for\n * combining geo data for a Projection's fit argument. The resulting GeoJSON\n * data is available as this transform's value. Input pulses are unchanged.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.fields] - A two-element array\n * of field accessors for the longitude and latitude values.\n * @param {function(object): *} params.geojson - A field accessor for\n * retrieving GeoJSON feature data.\n */\nexport default function GeoJSON(params) {\n Transform.call(this, null, params);\n}\n\nGeoJSON.Definition = {\n \"type\": \"GeoJSON\",\n \"metadata\": {},\n \"params\": [\n { \"name\": \"fields\", \"type\": \"field\", \"array\": true, \"length\": 2 },\n { \"name\": \"geojson\", \"type\": \"field\" },\n ]\n};\n\nvar prototype = inherits(GeoJSON, Transform);\n\nprototype.transform = function(_, pulse) {\n var features = this._features,\n points = this._points,\n fields = _.fields,\n lon = fields && fields[0],\n lat = fields && fields[1],\n geojson = _.geojson,\n flag = pulse.ADD,\n mod;\n\n mod = _.modified()\n || pulse.changed(pulse.REM)\n || pulse.modified(accessorFields(geojson))\n || (lon && (pulse.modified(accessorFields(lon))))\n || (lat && (pulse.modified(accessorFields(lat))));\n\n if (!this.value || mod) {\n flag = pulse.SOURCE;\n this._features = (features = []);\n this._points = (points = []);\n }\n\n if (geojson) {\n pulse.visit(flag, function(t) {\n features.push(geojson(t));\n });\n }\n\n if (lon && lat) {\n pulse.visit(flag, function(t) {\n var x = lon(t),\n y = lat(t);\n if (x != null && y != null && (x = +x) === x && (y = +y) === y) {\n points.push([x, y]);\n }\n });\n features = features.concat({\n type: Feature,\n geometry: {\n type: MultiPoint,\n coordinates: points\n }\n });\n }\n\n this.value = {\n type: FeatureCollection,\n features: features\n };\n};\n","// Adds floating point numbers with twice the normal precision.\n// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n// 305–363 (1997).\n// Code adapted from GeographicLib by Charles F. F. Karney,\n// http://geographiclib.sourceforge.net/\n\nexport default function() {\n return new Adder;\n}\n\nfunction Adder() {\n this.reset();\n}\n\nAdder.prototype = {\n constructor: Adder,\n reset: function() {\n this.s = // rounded value\n this.t = 0; // exact error\n },\n add: function(y) {\n add(temp, y, this.t);\n add(this, temp.s, this.s);\n if (this.s) this.t += temp.t;\n else this.s = temp.t;\n },\n valueOf: function() {\n return this.s;\n }\n};\n\nvar temp = new Adder;\n\nfunction add(adder, a, b) {\n var x = adder.s = a + b,\n bv = x - a,\n av = x - bv;\n adder.t = (a - av) + (b - bv);\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n","import adder from \"./adder\";\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math\";\nimport noop from \"./noop\";\nimport stream from \"./stream\";\n\nexport var areaRingSum = adder();\n\nvar areaSum = adder(),\n lambda00,\n phi00,\n lambda0,\n cosPhi0,\n sinPhi0;\n\nexport var areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaRingSum.reset();\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n var areaRing = +areaRingSum;\n areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n this.lineStart = this.lineEnd = this.point = noop;\n },\n sphere: function() {\n areaSum.add(tau);\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n areaStream.point = areaPoint;\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n // Spherical excess E for a spherical triangle with vertices: south pole,\n // previous point, current point. Uses a formula derived from Cagnoli’s\n // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n var dLambda = lambda - lambda0,\n sdLambda = dLambda >= 0 ? 1 : -1,\n adLambda = sdLambda * dLambda,\n cosPhi = cos(phi),\n sinPhi = sin(phi),\n k = sinPhi0 * sinPhi,\n u = cosPhi0 * cosPhi + k * cos(adLambda),\n v = k * sdLambda * sin(adLambda);\n areaRingSum.add(atan2(v, u));\n\n // Advance the previous points.\n lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nexport default function(object) {\n areaSum.reset();\n stream(object, areaStream);\n return areaSum * 2;\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math\";\n\nexport function spherical(cartesian) {\n return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","import adder from \"./adder\";\nimport {areaStream, areaRingSum} from \"./area\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian\";\nimport {abs, degrees, epsilon, radians} from \"./math\";\nimport stream from \"./stream\";\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n lambda2, // previous lambda-coordinate\n lambda00, phi00, // first point\n p0, // previous 3D point\n deltaSum = adder(),\n ranges,\n range;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: boundsLineStart,\n lineEnd: boundsLineEnd,\n polygonStart: function() {\n boundsStream.point = boundsRingPoint;\n boundsStream.lineStart = boundsRingStart;\n boundsStream.lineEnd = boundsRingEnd;\n deltaSum.reset();\n areaStream.polygonStart();\n },\n polygonEnd: function() {\n areaStream.polygonEnd();\n boundsStream.point = boundsPoint;\n boundsStream.lineStart = boundsLineStart;\n boundsStream.lineEnd = boundsLineEnd;\n if (areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n else if (deltaSum > epsilon) phi1 = 90;\n else if (deltaSum < -epsilon) phi0 = -90;\n range[0] = lambda0, range[1] = lambda1;\n }\n};\n\nfunction boundsPoint(lambda, phi) {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n var p = cartesian([lambda * radians, phi * radians]);\n if (p0) {\n var normal = cartesianCross(p0, p),\n equatorial = [normal[1], -normal[0], 0],\n inflection = cartesianCross(equatorial, normal);\n cartesianNormalizeInPlace(inflection);\n inflection = spherical(inflection);\n var delta = lambda - lambda2,\n sign = delta > 0 ? 1 : -1,\n lambdai = inflection[0] * degrees * sign,\n phii,\n antimeridian = abs(delta) > 180;\n if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = inflection[1] * degrees;\n if (phii > phi1) phi1 = phii;\n } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = -inflection[1] * degrees;\n if (phii < phi0) phi0 = phii;\n } else {\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n }\n if (antimeridian) {\n if (lambda < lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n } else {\n if (lambda1 >= lambda0) {\n if (lambda < lambda0) lambda0 = lambda;\n if (lambda > lambda1) lambda1 = lambda;\n } else {\n if (lambda > lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n }\n }\n } else {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n }\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n range[0] = lambda0, range[1] = lambda1;\n boundsStream.point = boundsPoint;\n p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n if (p0) {\n var delta = lambda - lambda2;\n deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n } else {\n lambda00 = lambda, phi00 = phi;\n }\n areaStream.point(lambda, phi);\n linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n boundsRingPoint(lambda00, phi00);\n areaStream.lineEnd();\n if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\n range[0] = lambda0, range[1] = lambda1;\n p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nexport default function(feature) {\n var i, n, a, b, merged, deltaMax, delta;\n\n phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n ranges = [];\n stream(feature, boundsStream);\n\n // First, sort ranges by their minimum longitudes.\n if (n = ranges.length) {\n ranges.sort(rangeCompare);\n\n // Then, merge any ranges that overlap.\n for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n b = ranges[i];\n if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\n }\n\n // Finally, find the largest gap between the merged ranges.\n // The final bounding box will be the inverse of this gap.\n for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n b = merged[i];\n if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n }\n }\n\n ranges = range = null;\n\n return lambda0 === Infinity || phi0 === Infinity\n ? [[NaN, NaN], [NaN, NaN]]\n : [[lambda0, phi0], [lambda1, phi1]];\n}\n","import {asin, atan2, cos, degrees, epsilon, epsilon2, radians, sin, sqrt} from \"./math\";\nimport noop from \"./noop\";\nimport stream from \"./stream\";\n\nvar W0, W1,\n X0, Y0, Z0,\n X1, Y1, Z1,\n X2, Y2, Z2,\n lambda00, phi00, // first point\n x0, y0, z0; // previous point\n\nvar centroidStream = {\n sphere: noop,\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n }\n};\n\n// Arithmetic mean of Cartesian vectors.\nfunction centroidPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi));\n}\n\nfunction centroidPointCartesian(x, y, z) {\n ++W0;\n X0 += (x - X0) / W0;\n Y0 += (y - Y0) / W0;\n Z0 += (z - Z0) / W0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidLinePointFirst;\n}\n\nfunction centroidLinePointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidStream.point = centroidLinePoint;\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLinePoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\nfunction centroidRingStart() {\n centroidStream.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd() {\n centroidRingPoint(lambda00, phi00);\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n centroidStream.point = centroidRingPoint;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidRingPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n cx = y0 * z - z0 * y,\n cy = z0 * x - x0 * z,\n cz = x0 * y - y0 * x,\n m = sqrt(cx * cx + cy * cy + cz * cz),\n w = asin(m), // line weight = angle\n v = m && -w / m; // area weight multiplier\n X2 += v * cx;\n Y2 += v * cy;\n Z2 += v * cz;\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nexport default function(object) {\n W0 = W1 =\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n stream(object, centroidStream);\n\n var x = X2,\n y = Y2,\n z = Z2,\n m = x * x + y * y + z * z;\n\n // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n if (m < epsilon2) {\n x = X1, y = Y1, z = Z1;\n // If the feature has zero length, fall back to arithmetic mean of point vectors.\n if (W1 < epsilon) x = X0, y = Y0, z = Z0;\n m = x * x + y * y + z * z;\n // If the feature still has an undefined ccentroid, then return.\n if (m < epsilon2) return [NaN, NaN];\n }\n\n return [atan2(y, x) * degrees, asin(z / sqrt(m)) * degrees];\n}\n","export default function(a, b) {\n\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n\n return compose;\n}\n","import compose from \"./compose\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math\";\n\nfunction rotationIdentity(lambda, phi) {\n return [abs(lambda) > pi ? lambda + Math.round(-lambda / tau) * tau : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n return function(lambda, phi) {\n return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos(deltaPhi),\n sinDeltaPhi = sin(deltaPhi),\n cosDeltaGamma = cos(deltaGamma),\n sinDeltaGamma = sin(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n asin(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n\n rotation.invert = function(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n asin(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n\n return rotation;\n}\n\nexport default function(rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\n\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n };\n\n return forward;\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian\";\nimport constant from \"./constant\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math\";\nimport {rotateRadians} from \"./rotation\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta) return;\n var cosRadius = cos(radius),\n sinRadius = sin(radius),\n step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * tau;\n t1 = radius - step / 2;\n } else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n }\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n stream.point(point[0], point[1]);\n }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n point = cartesian(point), point[0] -= cosRadius;\n cartesianNormalizeInPlace(point);\n var radius = acos(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n var center = constant([0, 0]),\n radius = constant(90),\n precision = constant(6),\n ring,\n rotate,\n stream = {point: point};\n\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= degrees, x[1] *= degrees;\n }\n\n function circle() {\n var c = center.apply(this, arguments),\n r = radius.apply(this, arguments) * radians,\n p = precision.apply(this, arguments) * radians;\n ring = [];\n rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n circleStream(stream, r, p, 1);\n c = {type: \"Polygon\", coordinates: [ring]};\n ring = rotate = null;\n return c;\n }\n\n circle.center = function(_) {\n return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n };\n\n circle.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n };\n\n circle.precision = function(_) {\n return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n };\n\n return circle;\n}\n","import noop from \"../noop\";\n\nexport default function() {\n var lines = [],\n line;\n return {\n point: function(x, y) {\n line.push([x, y]);\n },\n lineStart: function() {\n lines.push(line = []);\n },\n lineEnd: noop,\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n },\n result: function() {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n}\n","import {abs, epsilon} from \"./math\";\n\nexport default function(a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual\";\n\nfunction Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n], x;\n\n // If the first and last points of a segment are coincident, then treat as a\n // closed ring. TODO if all rings are closed, then the winding order of the\n // exterior ring should be checked.\n if (pointEqual(p0, p1)) {\n stream.lineStart();\n for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n\n if (!subject.length) return;\n\n clip.sort(compareIntersection);\n link(subject);\n link(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n}\n\nfunction link(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n}\n","import adder from \"./adder\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian\";\nimport {asin, atan2, cos, epsilon, halfPi, pi, quarterPi, sin, tau} from \"./math\";\n\nvar sum = adder();\n\nexport default function(polygon, point) {\n var lambda = point[0],\n phi = point[1],\n sinPhi = sin(phi),\n normal = [sin(lambda), -cos(lambda), 0],\n angle = 0,\n winding = 0;\n\n sum.reset();\n\n if (sinPhi === 1) phi = halfPi + epsilon;\n else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = point0[0],\n phi0 = point0[1] / 2 + quarterPi,\n sinPhi0 = sin(phi0),\n cosPhi0 = cos(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = point1[0],\n phi1 = point1[1] / 2 + quarterPi,\n sinPhi1 = sin(phi1),\n cosPhi1 = cos(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > pi,\n k = sinPhi0 * sinPhi1;\n\n sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n angle += antimeridian ? delta + sign * tau : delta;\n\n // Are the longitudes either side of the point’s meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n\n return (angle < -epsilon || angle < epsilon && sum < -epsilon) ^ (winding & 1);\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","export default function(arrays) {\n var n = arrays.length,\n m,\n i = -1,\n j = 0,\n merged,\n array;\n\n while (++i < n) j += arrays[i].length;\n merged = new Array(j);\n\n while (--n >= 0) {\n array = arrays[n];\n m = array.length;\n while (--m >= 0) {\n merged[--j] = array[m];\n }\n }\n\n return merged;\n}\n","import clipBuffer from \"./buffer\";\nimport clipRejoin from \"./rejoin\";\nimport {epsilon, halfPi} from \"../math\";\nimport polygonContains from \"../polygonContains\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n return function(sink) {\n var line = clipLine(sink),\n ringBuffer = clipBuffer(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = merge(segments);\n var startInside = polygonContains(polygon, start);\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n\n function point(lambda, phi) {\n if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n line.point(lambda, phi);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n ringSink.point(lambda, phi);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i, n = ringSegments.length, m,\n segment,\n point;\n\n ring.pop();\n polygon.push(ring);\n ring = null;\n\n if (!n) return;\n\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n}\n\nfunction validSegment(segment) {\n return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math\";\n\nexport default clip(\n function() { return true; },\n clipAntimeridianLine,\n clipAntimeridianInterpolate,\n [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n var lambda0 = NaN,\n phi0 = NaN,\n sign0 = NaN,\n clean; // no intersections\n\n return {\n lineStart: function() {\n stream.lineStart();\n clean = 1;\n },\n point: function(lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi : -pi,\n delta = abs(lambda1 - lambda0);\n if (abs(delta - pi) < epsilon) { // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n clean = 0;\n } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n clean = 0;\n }\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function() {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function() {\n return 2 - clean; // if intersections, rejoin first and last segments\n }\n };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0,\n cosPhi1,\n sinLambda0Lambda1 = sin(lambda0 - lambda1);\n return abs(sinLambda0Lambda1) > epsilon\n ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n if (from == null) {\n phi = direction * halfPi;\n stream.point(-pi, phi);\n stream.point(0, phi);\n stream.point(pi, phi);\n stream.point(pi, 0);\n stream.point(pi, -phi);\n stream.point(0, -phi);\n stream.point(-pi, -phi);\n stream.point(-pi, 0);\n stream.point(-pi, phi);\n } else if (abs(from[0] - to[0]) > epsilon) {\n var lambda = from[0] < to[0] ? pi : -pi;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n } else {\n stream.point(to[0], to[1]);\n }\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian\";\nimport {circleStream} from \"../circle\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math\";\nimport pointEqual from \"../pointEqual\";\nimport clip from \"./index\";\n\nexport default function(radius) {\n var cr = cos(radius),\n delta = 6 * radians,\n smallRadius = cr > 0,\n notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n\n function visible(lambda, phi) {\n return cos(lambda) * cos(phi) > cr;\n }\n\n // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n clean; // no intersections\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(lambda, phi) {\n var point1 = [lambda, phi],\n point2,\n v = visible(lambda, phi),\n c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n if (!point0 && (v00 = v0 = v)) stream.lineStart();\n // Handle degeneracies.\n // TODO ignore if not clipping polygons.\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) {\n point1[0] += epsilon;\n point1[1] += epsilon;\n v = visible(point1[0], point1[1]);\n }\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n } else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1]);\n stream.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n } else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n }\n }\n }\n if (v && (!point0 || !pointEqual(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function() {\n return clean | ((v00 && v0) << 1);\n }\n };\n }\n\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = cartesian(a),\n pb = cartesian(b);\n\n // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n var n1 = [1, 0, 0], // normal\n n2 = cartesianCross(pa, pb),\n n2n2 = cartesianDot(n2, n2),\n n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n\n // Two polar points.\n if (!determinant) return !two && a;\n\n var c1 = cr * n2n2 / determinant,\n c2 = -cr * n1n2 / determinant,\n n1xn2 = cartesianCross(n1, n2),\n A = cartesianScale(n1, c1),\n B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B);\n\n // Solve |p(t)|^2 = 1.\n var u = n1xn2,\n w = cartesianDot(A, u),\n uu = cartesianDot(u, u),\n t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n if (t2 < 0) return;\n\n var t = sqrt(t2),\n q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n\n if (!two) return q;\n\n // Two intersection points.\n var lambda0 = a[0],\n lambda1 = b[0],\n phi0 = a[1],\n phi1 = b[1],\n z;\n\n if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n var delta = lambda1 - lambda0,\n polar = abs(delta - pi) < epsilon,\n meridian = polar || delta < epsilon;\n\n if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n // Check that the first point is between a and b.\n if (meridian\n ? polar\n ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n : phi0 <= q[1] && q[1] <= phi1\n : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = cartesianScale(u, (-w + t) / uu);\n cartesianAddInPlace(q1, A);\n return [q, spherical(q1)];\n }\n }\n\n // Generates a 4-bit vector representing the location of a point relative to\n // the small circle's bounding box.\n function code(lambda, phi) {\n var r = smallRadius ? radius : pi - radius,\n code = 0;\n if (lambda < -r) code |= 1; // left\n else if (lambda > r) code |= 2; // right\n if (phi < -r) code |= 4; // below\n else if (phi > r) code |= 8; // above\n return code;\n }\n\n return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","export default function(a, b, x0, y0, x1, y1) {\n var ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n}\n","import {abs, epsilon} from \"../math\";\nimport clipBuffer from \"./buffer\";\nimport clipLine from \"./line\";\nimport clipRejoin from \"./rejoin\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n\n function interpolate(from, to, direction, stream) {\n var a = 0, a1 = 0;\n if (from == null\n || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n || comparePoint(from, to) < 0 ^ direction > 0) {\n do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n stream.point(to[0], to[1]);\n }\n }\n\n function corner(p, direction) {\n return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n\n function comparePoint(a, b) {\n var ca = corner(a, 1),\n cb = corner(b, 1);\n return ca !== cb ? ca - cb\n : ca === 0 ? b[1] - a[1]\n : ca === 1 ? a[0] - b[0]\n : ca === 2 ? a[1] - b[1]\n : b[0] - a[0];\n }\n\n return function(stream) {\n var activeStream = stream,\n bufferStream = clipBuffer(),\n segments,\n polygon,\n ring,\n x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first,\n clean;\n\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n\n function point(x, y) {\n if (visible(x, y)) activeStream.point(x, y);\n }\n\n function polygonInside() {\n var winding = 0;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n }\n }\n\n return winding;\n }\n\n // Buffer geometry within a polygon and then clip it en masse.\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n\n function polygonEnd() {\n var startInside = polygonInside(),\n cleanInside = clean && startInside,\n visible = (segments = merge(segments)).length;\n if (cleanInside || visible) {\n stream.polygonStart();\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n if (visible) {\n clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n }\n stream.polygonEnd();\n }\n activeStream = stream, segments = polygon = ring = null;\n }\n\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n\n // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_) activeStream.lineEnd();\n }\n\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon) ring.push([x, y]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n } else {\n if (v && v_) activeStream.point(x, y);\n else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n if (clipLine(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n activeStream.point(b[0], b[1]);\n if (!v) activeStream.lineEnd();\n clean = false;\n } else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n\n return clipStream;\n };\n}\n","import adder from \"./adder\";\nimport {abs, atan2, cos, radians, sin, sqrt} from \"./math\";\nimport noop from \"./noop\";\nimport stream from \"./stream\";\n\nvar lengthSum = adder(),\n lambda0,\n sinPhi0,\n cosPhi0;\n\nvar lengthStream = {\n sphere: noop,\n point: noop,\n lineStart: lengthLineStart,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop\n};\n\nfunction lengthLineStart() {\n lengthStream.point = lengthPointFirst;\n lengthStream.lineEnd = lengthLineEnd;\n}\n\nfunction lengthLineEnd() {\n lengthStream.point = lengthStream.lineEnd = noop;\n}\n\nfunction lengthPointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n lambda0 = lambda, sinPhi0 = sin(phi), cosPhi0 = cos(phi);\n lengthStream.point = lengthPoint;\n}\n\nfunction lengthPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var sinPhi = sin(phi),\n cosPhi = cos(phi),\n delta = abs(lambda - lambda0),\n cosDelta = cos(delta),\n sinDelta = sin(delta),\n x = cosPhi * sinDelta,\n y = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta,\n z = sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta;\n lengthSum.add(atan2(sqrt(x * x + y * y), z));\n lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi;\n}\n\nexport default function(object) {\n lengthSum.reset();\n stream(object, lengthStream);\n return +lengthSum;\n}\n","import {range} from \"d3-array\";\nimport {abs, ceil, epsilon} from \"./math\";\n\nfunction graticuleX(y0, y1, dy) {\n var y = range(y0, y1 - epsilon, dy).concat(y1);\n return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n var x = range(x0, x1 - epsilon, dx).concat(x1);\n return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nexport default function graticule() {\n var x1, x0, X1, X0,\n y1, y0, Y1, Y0,\n dx = 10, dy = dx, DX = 90, DY = 360,\n x, y, X, Y,\n precision = 2.5;\n\n function graticule() {\n return {type: \"MultiLineString\", coordinates: lines()};\n }\n\n function lines() {\n return range(ceil(X0 / DX) * DX, X1, DX).map(X)\n .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x))\n .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y));\n }\n\n graticule.lines = function() {\n return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n };\n\n graticule.outline = function() {\n return {\n type: \"Polygon\",\n coordinates: [\n X(X0).concat(\n Y(Y1).slice(1),\n X(X1).reverse().slice(1),\n Y(Y0).reverse().slice(1))\n ]\n };\n };\n\n graticule.extent = function(_) {\n if (!arguments.length) return graticule.extentMinor();\n return graticule.extentMajor(_).extentMinor(_);\n };\n\n graticule.extentMajor = function(_) {\n if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n X0 = +_[0][0], X1 = +_[1][0];\n Y0 = +_[0][1], Y1 = +_[1][1];\n if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.extentMinor = function(_) {\n if (!arguments.length) return [[x0, y0], [x1, y1]];\n x0 = +_[0][0], x1 = +_[1][0];\n y0 = +_[0][1], y1 = +_[1][1];\n if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.step = function(_) {\n if (!arguments.length) return graticule.stepMinor();\n return graticule.stepMajor(_).stepMinor(_);\n };\n\n graticule.stepMajor = function(_) {\n if (!arguments.length) return [DX, DY];\n DX = +_[0], DY = +_[1];\n return graticule;\n };\n\n graticule.stepMinor = function(_) {\n if (!arguments.length) return [dx, dy];\n dx = +_[0], dy = +_[1];\n return graticule;\n };\n\n graticule.precision = function(_) {\n if (!arguments.length) return precision;\n precision = +_;\n x = graticuleX(y0, y1, 90);\n y = graticuleY(x0, x1, precision);\n X = graticuleX(Y0, Y1, 90);\n Y = graticuleY(X0, X1, precision);\n return graticule;\n };\n\n return graticule\n .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])\n .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\n}\n\nexport function graticule10() {\n return graticule()();\n}\n","export default function(x) {\n return x;\n}\n","import adder from \"../adder\";\nimport {abs} from \"../math\";\nimport noop from \"../noop\";\n\nvar areaSum = adder(),\n areaRingSum = adder(),\n x00,\n y00,\n x0,\n y0;\n\nvar areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n areaSum.add(abs(areaRingSum));\n areaRingSum.reset();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum.reset();\n return area;\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n areaStream.point = areaPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n areaRingSum.add(y0 * x - x0 * y);\n x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import noop from \"../noop\";\n\nvar x0 = Infinity,\n y0 = x0,\n x1 = -x0,\n y1 = x1;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function() {\n var bounds = [[x0, y0], [x1, y1]];\n x1 = y1 = -(y0 = x0 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint(x, y) {\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import {sqrt} from \"../math\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n Y0 = 0,\n Z0 = 0,\n X1 = 0,\n Y1 = 0,\n Z1 = 0,\n X2 = 0,\n Y2 = 0,\n Z2 = 0,\n x00,\n y00,\n x0,\n y0;\n\nvar centroidStream = {\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.point = centroidPoint;\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n },\n result: function() {\n var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n : Z1 ? [X1 / Z1, Y1 / Z1]\n : Z0 ? [X0 / Z0, Y0 / Z0]\n : [NaN, NaN];\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n return centroid;\n }\n};\n\nfunction centroidPoint(x, y) {\n X0 += x;\n Y0 += y;\n ++Z0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n centroidStream.point = centroidPointLine;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n centroidStream.point = centroidPointRing;\n centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n var dx = x - x0,\n dy = y - y0,\n z = sqrt(dx * dx + dy * dy);\n\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n\n z = y0 * x - x0 * y;\n X2 += z * (x0 + x);\n Y2 += z * (y0 + y);\n Z2 += z * 3;\n centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math\";\nimport noop from \"../noop\";\n\nexport default function PathContext(context) {\n this._context = context;\n}\n\nPathContext.prototype = {\n _radius: 4.5,\n pointRadius: function(_) {\n return this._radius = _, this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._context.closePath();\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._context.moveTo(x, y);\n this._point = 1;\n break;\n }\n case 1: {\n this._context.lineTo(x, y);\n break;\n }\n default: {\n this._context.moveTo(x + this._radius, y);\n this._context.arc(x, y, this._radius, 0, tau);\n break;\n }\n }\n },\n result: noop\n};\n","import adder from \"../adder\";\nimport {sqrt} from \"../math\";\nimport noop from \"../noop\";\n\nvar lengthSum = adder(),\n lengthRing,\n x00,\n y00,\n x0,\n y0;\n\nvar lengthStream = {\n point: noop,\n lineStart: function() {\n lengthStream.point = lengthPointFirst;\n },\n lineEnd: function() {\n if (lengthRing) lengthPoint(x00, y00);\n lengthStream.point = noop;\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +lengthSum;\n lengthSum.reset();\n return length;\n }\n};\n\nfunction lengthPointFirst(x, y) {\n lengthStream.point = lengthPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n x0 -= x, y0 -= y;\n lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","export default function PathString() {\n this._string = [];\n}\n\nPathString.prototype = {\n _radius: 4.5,\n _circle: circle(4.5),\n pointRadius: function(_) {\n if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n return this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._string.push(\"Z\");\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._string.push(\"M\", x, \",\", y);\n this._point = 1;\n break;\n }\n case 1: {\n this._string.push(\"L\", x, \",\", y);\n break;\n }\n default: {\n if (this._circle == null) this._circle = circle(this._radius);\n this._string.push(\"M\", x, \",\", y, this._circle);\n break;\n }\n }\n },\n result: function() {\n if (this._string.length) {\n var result = this._string.join(\"\");\n this._string = [];\n return result;\n } else {\n return null;\n }\n }\n};\n\nfunction circle(radius) {\n return \"m0,\" + radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n + \"z\";\n}\n","import identity from \"../identity\";\nimport stream from \"../stream\";\nimport pathArea from \"./area\";\nimport pathBounds from \"./bounds\";\nimport pathCentroid from \"./centroid\";\nimport PathContext from \"./context\";\nimport pathMeasure from \"./measure\";\nimport PathString from \"./string\";\n\nexport default function(projection, context) {\n var pointRadius = 4.5,\n projectionStream,\n contextStream;\n\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n stream(object, projectionStream(contextStream));\n }\n return contextStream.result();\n }\n\n path.area = function(object) {\n stream(object, projectionStream(pathArea));\n return pathArea.result();\n };\n\n path.measure = function(object) {\n stream(object, projectionStream(pathMeasure));\n return pathMeasure.result();\n };\n\n path.bounds = function(object) {\n stream(object, projectionStream(pathBounds));\n return pathBounds.result();\n };\n\n path.centroid = function(object) {\n stream(object, projectionStream(pathCentroid));\n return pathCentroid.result();\n };\n\n path.projection = function(_) {\n return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;\n };\n\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return path;\n };\n\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n\n return path.projection(projection).context(context);\n}\n","export default function(methods) {\n return {\n stream: transformer(methods)\n };\n}\n\nexport function transformer(methods) {\n return function(stream) {\n var s = new TransformStream;\n for (var key in methods) s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n constructor: TransformStream,\n point: function(x, y) { this.stream.point(x, y); },\n sphere: function() { this.stream.sphere(); },\n lineStart: function() { this.stream.lineStart(); },\n lineEnd: function() { this.stream.lineEnd(); },\n polygonStart: function() { this.stream.polygonStart(); },\n polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import {default as geoStream} from \"../stream\";\nimport boundsStream from \"../path/bounds\";\n\nfunction fit(projection, fitBounds, object) {\n var clip = projection.clipExtent && projection.clipExtent();\n projection.scale(150).translate([0, 0]);\n if (clip != null) projection.clipExtent(null);\n geoStream(object, projection.stream(boundsStream));\n fitBounds(boundsStream.result());\n if (clip != null) projection.clipExtent(clip);\n return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n return fit(projection, function(b) {\n var w = extent[1][0] - extent[0][0],\n h = extent[1][1] - extent[0][1],\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n return fit(projection, function(b) {\n var w = +width,\n k = w / (b[1][0] - b[0][0]),\n x = (w - k * (b[1][0] + b[0][0])) / 2,\n y = -k * b[0][1];\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n return fit(projection, function(b) {\n var h = +height,\n k = h / (b[1][1] - b[0][1]),\n x = -k * b[0][0],\n y = (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n","import {cartesian} from \"../cartesian\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math\";\nimport {transformer} from \"../transform\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n return transformer({\n point: function(x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n}\n\nfunction resample(project, delta2) {\n\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = sqrt(a * a + b * b + c * c),\n phi2 = asin(c /= m),\n lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function(stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n\n return resampleStream;\n };\n}\n","import clipAntimeridian from \"../clip/antimeridian\";\nimport clipCircle from \"../clip/circle\";\nimport clipRectangle from \"../clip/rectangle\";\nimport compose from \"../compose\";\nimport identity from \"../identity\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math\";\nimport {rotateRadians} from \"../rotation\";\nimport {transformer} from \"../transform\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit\";\nimport resample from \"./resample\";\n\nvar transformRadians = transformer({\n point: function(x, y) {\n this.stream.point(x * radians, y * radians);\n }\n});\n\nfunction transformRotate(rotate) {\n return transformer({\n point: function(x, y) {\n var r = rotate(x, y);\n return this.stream.point(r[0], r[1]);\n }\n });\n}\n\nfunction scaleTranslate(k, dx, dy) {\n function transform(x, y) {\n return [dx + k * x, dy - k * y];\n }\n transform.invert = function(x, y) {\n return [(x - dx) / k, (dy - y) / k];\n };\n return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, alpha) {\n var cosAlpha = cos(alpha),\n sinAlpha = sin(alpha),\n a = cosAlpha * k,\n b = sinAlpha * k,\n ai = cosAlpha / k,\n bi = sinAlpha / k,\n ci = (sinAlpha * dy - cosAlpha * dx) / k,\n fi = (sinAlpha * dx + cosAlpha * dy) / k;\n function transform(x, y) {\n return [a * x - b * y + dx, dy - b * x - a * y];\n }\n transform.invert = function(x, y) {\n return [ai * x - bi * y + ci, fi - bi * x - ai * y];\n };\n return transform;\n}\n\nexport default function projection(project) {\n return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n var project,\n k = 150, // scale\n x = 480, y = 250, // translate\n lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n alpha = 0, // post-rotate\n theta = null, preclip = clipAntimeridian, // pre-clip angle\n x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n delta2 = 0.5, // precision\n projectResample,\n projectTransform,\n projectRotateTransform,\n cache,\n cacheStream;\n\n function projection(point) {\n return projectRotateTransform(point[0] * radians, point[1] * radians);\n }\n\n function invert(point) {\n point = projectRotateTransform.invert(point[0], point[1]);\n return point && [point[0] * degrees, point[1] * degrees];\n }\n\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n };\n\n projection.preclip = function(_) {\n return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n };\n\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n\n projection.clipAngle = function(_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n };\n\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n projection.scale = function(_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function(_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function(_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\n\n projection.rotate = function(_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n };\n\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n };\n\n projection.precision = function(_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n };\n\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n function recenter() {\n var center = scaleTranslateRotate(k, 0, 0, alpha).apply(null, project(lambda, phi)),\n transform = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], alpha);\n rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n projectTransform = compose(project, transform);\n projectRotateTransform = compose(rotate, projectTransform);\n projectResample = resample(projectTransform, delta2);\n return reset();\n }\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}\n","import {degrees, pi, radians} from \"../math\";\nimport {projectionMutator} from \"./index\";\n\nexport function conicProjection(projectAt) {\n var phi0 = 0,\n phi1 = pi / 3,\n m = projectionMutator(projectAt),\n p = m(phi0, phi1);\n\n p.parallels = function(_) {\n return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n };\n\n return p;\n}\n","import {asin, cos, sin} from \"../math\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = cos(phi0);\n\n function forward(lambda, phi) {\n return [lambda * cosPhi0, sin(phi) / cosPhi0];\n }\n\n forward.invert = function(x, y) {\n return [x / cosPhi0, asin(y * cosPhi0)];\n };\n\n return forward;\n}\n","import {abs, asin, atan2, cos, epsilon, sign, sin, sqrt} from \"../math\";\nimport {conicProjection} from \"./conic\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea\";\n\nexport function conicEqualAreaRaw(y0, y1) {\n var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n // Are the parallels symmetrical around the Equator?\n if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n function project(x, y) {\n var r = sqrt(c - 2 * n * sin(y)) / n;\n return [r * sin(x *= n), r0 - r * cos(x)];\n }\n\n project.invert = function(x, y) {\n var r0y = r0 - y;\n return [atan2(x, abs(r0y)) / n * sign(r0y), asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEqualAreaRaw)\n .scale(155.424)\n .center([0, 33.6442]);\n}\n","import conicEqualArea from \"./conicEqualArea\";\n\nexport default function() {\n return conicEqualArea()\n .parallels([29.5, 45.5])\n .scale(1070)\n .translate([480, 250])\n .rotate([96, 0])\n .center([-0.6, 38.7]);\n}\n","import {epsilon} from \"../math\";\nimport albers from \"./albers\";\nimport conicEqualArea from \"./conicEqualArea\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit\";\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n var n = streams.length;\n return {\n point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nexport default function() {\n var cache,\n cacheStream,\n lower48 = albers(), lower48Point,\n alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (lower48Point.point(x, y), point)\n || (alaskaPoint.point(x, y), point)\n || (hawaiiPoint.point(x, y), point);\n }\n\n albersUsa.invert = function(coordinates) {\n var k = lower48.scale(),\n t = lower48.translate(),\n x = (coordinates[0] - t[0]) / k,\n y = (coordinates[1] - t[1]) / k;\n return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n : lower48).invert(coordinates);\n };\n\n albersUsa.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n };\n\n albersUsa.precision = function(_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n return reset();\n };\n\n albersUsa.scale = function(_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n\n albersUsa.translate = function(_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n\n lower48Point = lower48\n .translate(_)\n .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n .stream(pointStream);\n\n alaskaPoint = alaska\n .translate([x - 0.307 * k, y + 0.201 * k])\n .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n hawaiiPoint = hawaii\n .translate([x - 0.205 * k, y + 0.212 * k])\n .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n return reset();\n };\n\n albersUsa.fitExtent = function(extent, object) {\n return fitExtent(albersUsa, extent, object);\n };\n\n albersUsa.fitSize = function(size, object) {\n return fitSize(albersUsa, size, object);\n };\n\n albersUsa.fitWidth = function(width, object) {\n return fitWidth(albersUsa, width, object);\n };\n\n albersUsa.fitHeight = function(height, object) {\n return fitHeight(albersUsa, height, object);\n };\n\n function reset() {\n cache = cacheStream = null;\n return albersUsa;\n }\n\n return albersUsa.scale(1070);\n}\n","import {asin, atan2, cos, sin, sqrt} from \"../math\";\n\nexport function azimuthalRaw(scale) {\n return function(x, y) {\n var cx = cos(x),\n cy = cos(y),\n k = scale(cx * cy);\n return [\n k * cy * sin(x),\n k * sin(y)\n ];\n }\n}\n\nexport function azimuthalInvert(angle) {\n return function(x, y) {\n var z = sqrt(x * x + y * y),\n c = angle(z),\n sc = sin(c),\n cc = cos(c);\n return [\n atan2(x * sc, z * cc),\n asin(z && y * sc / z)\n ];\n }\n}\n","import {asin, sqrt} from \"../math\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n return 2 * asin(z / 2);\n});\n\nexport default function() {\n return projection(azimuthalEqualAreaRaw)\n .scale(124.75)\n .clipAngle(180 - 1e-3);\n}\n","import {acos, sin} from \"../math\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n return z;\n});\n\nexport default function() {\n return projection(azimuthalEquidistantRaw)\n .scale(79.4188)\n .clipAngle(180 - 1e-3);\n}\n","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math\";\nimport rotation from \"../rotation\";\nimport projection from \"./index\";\n\nexport function mercatorRaw(lambda, phi) {\n return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n return mercatorProjection(mercatorRaw)\n .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n var m = projection(project),\n center = m.center,\n scale = m.scale,\n translate = m.translate,\n clipExtent = m.clipExtent,\n x0 = null, y0, x1, y1; // clip extent\n\n m.scale = function(_) {\n return arguments.length ? (scale(_), reclip()) : scale();\n };\n\n m.translate = function(_) {\n return arguments.length ? (translate(_), reclip()) : translate();\n };\n\n m.center = function(_) {\n return arguments.length ? (center(_), reclip()) : center();\n };\n\n m.clipExtent = function(_) {\n return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n function reclip() {\n var k = pi * scale(),\n t = m(rotation(m.rotate()).invert([0, 0]));\n return clipExtent(x0 == null\n ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n }\n\n return reclip();\n}\n","import {abs, atan, atan2, cos, epsilon, halfPi, log, pow, sign, sin, sqrt, tan} from \"../math\";\nimport {conicProjection} from \"./conic\";\nimport {mercatorRaw} from \"./mercator\";\n\nfunction tany(y) {\n return tan((halfPi + y) / 2);\n}\n\nexport function conicConformalRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)),\n f = cy0 * pow(tany(y0), n) / n;\n\n if (!n) return mercatorRaw;\n\n function project(x, y) {\n if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; }\n else { if (y > halfPi - epsilon) y = halfPi - epsilon; }\n var r = f / pow(tany(y), n);\n return [r * sin(n * x), f - r * cos(n * x)];\n }\n\n project.invert = function(x, y) {\n var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy);\n return [atan2(x, abs(fy)) / n * sign(fy), 2 * atan(pow(f / r, 1 / n)) - halfPi];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicConformalRaw)\n .scale(109.5)\n .parallels([30, 30]);\n}\n","import projection from \"./index\";\n\nexport function equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n return projection(equirectangularRaw)\n .scale(152.63);\n}\n","import {abs, atan2, cos, epsilon, sign, sin, sqrt} from \"../math\";\nimport {conicProjection} from \"./conic\";\nimport {equirectangularRaw} from \"./equirectangular\";\n\nexport function conicEquidistantRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0),\n g = cy0 / n + y0;\n\n if (abs(n) < epsilon) return equirectangularRaw;\n\n function project(x, y) {\n var gy = g - y, nx = n * x;\n return [gy * sin(nx), g - gy * cos(nx)];\n }\n\n project.invert = function(x, y) {\n var gy = g - y;\n return [atan2(x, abs(gy)) / n * sign(gy), g - sign(n) * sqrt(x * x + gy * gy)];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEquidistantRaw)\n .scale(131.154)\n .center([0, 13.9389]);\n}\n","import {atan, cos, sin} from \"../math\";\nimport {azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport function gnomonicRaw(x, y) {\n var cy = cos(y), k = cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nexport default function() {\n return projection(gnomonicRaw)\n .scale(144.049)\n .clipAngle(60);\n}\n","import clipRectangle from \"../clip/rectangle\";\nimport identity from \"../identity\";\nimport {transformer} from \"../transform\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit\";\n\nfunction scaleTranslate(kx, ky, tx, ty) {\n return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? identity : transformer({\n point: function(x, y) {\n this.stream.point(x * kx + tx, y * ky + ty);\n }\n });\n}\n\nexport default function() {\n var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform = identity, // scale, translate and reflect\n x0 = null, y0, x1, y1, // clip extent\n postclip = identity,\n cache,\n cacheStream,\n projection;\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return projection = {\n stream: function(stream) {\n return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));\n },\n postclip: function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n },\n clipExtent: function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n },\n scale: function(_) {\n return arguments.length ? (transform = scaleTranslate((k = +_) * sx, k * sy, tx, ty), reset()) : k;\n },\n translate: function(_) {\n return arguments.length ? (transform = scaleTranslate(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];\n },\n reflectX: function(_) {\n return arguments.length ? (transform = scaleTranslate(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0;\n },\n reflectY: function(_) {\n return arguments.length ? (transform = scaleTranslate(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0;\n },\n fitExtent: function(extent, object) {\n return fitExtent(projection, extent, object);\n },\n fitSize: function(size, object) {\n return fitSize(projection, size, object);\n },\n fitWidth: function(width, object) {\n return fitWidth(projection, width, object);\n },\n fitHeight: function(height, object) {\n return fitHeight(projection, height, object);\n }\n };\n}\n","import projection from \"./index\";\nimport {abs, epsilon} from \"../math\";\n\nexport function naturalEarth1Raw(lambda, phi) {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n return [\n lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n var phi = y, i = 25, delta;\n do {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n } while (abs(delta) > epsilon && --i > 0);\n return [\n x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n phi\n ];\n};\n\nexport default function() {\n return projection(naturalEarth1Raw)\n .scale(175.295);\n}\n","import {asin, cos, epsilon, sin} from \"../math\";\nimport {azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport function orthographicRaw(x, y) {\n return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n return projection(orthographicRaw)\n .scale(249.5)\n .clipAngle(90 + epsilon);\n}\n","import {atan, cos, sin} from \"../math\";\nimport {azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport function stereographicRaw(x, y) {\n var cy = cos(y), k = 1 + cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n return 2 * atan(z);\n});\n\nexport default function() {\n return projection(stereographicRaw)\n .scale(250)\n .clipAngle(142);\n}\n","import {atan, exp, halfPi, log, tan} from \"../math\";\nimport {mercatorProjection} from \"./mercator\";\n\nexport function transverseMercatorRaw(lambda, phi) {\n return [log(tan((halfPi + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n return [-y, 2 * atan(exp(x)) - halfPi];\n};\n\nexport default function() {\n var m = mercatorProjection(transverseMercatorRaw),\n center = m.center,\n rotate = m.rotate;\n\n m.center = function(_) {\n return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n };\n\n m.rotate = function(_) {\n return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n };\n\n return rotate([0, 0, 90])\n .scale(159.155);\n}\n","import {\n geoAlbers,\n geoAlbersUsa,\n geoAzimuthalEqualArea,\n geoAzimuthalEquidistant,\n geoConicConformal,\n geoConicEqualArea,\n geoConicEquidistant,\n geoEquirectangular,\n geoGnomonic,\n geoIdentity,\n geoMercator,\n geoNaturalEarth1,\n geoOrthographic,\n geoStereographic,\n geoTransverseMercator,\n geoPath\n} from 'd3-geo';\n\nvar defaultPath = geoPath();\n\nexport var projectionProperties = [\n // standard properties in d3-geo\n 'clipAngle',\n 'clipExtent',\n 'scale',\n 'translate',\n 'center',\n 'rotate',\n 'parallels',\n 'precision',\n 'reflectX',\n 'reflectY',\n\n // extended properties in d3-geo-projections\n 'coefficient',\n 'distance',\n 'fraction',\n 'lobes',\n 'parallel',\n 'radius',\n 'ratio',\n 'spacing',\n 'tilt'\n];\n\n/**\n * Augment projections with their type and a copy method.\n */\nfunction create(type, constructor) {\n return function projection() {\n var p = constructor();\n\n p.type = type;\n\n p.path = geoPath().projection(p);\n\n p.copy = p.copy || function() {\n var c = projection();\n projectionProperties.forEach(function(prop) {\n if (p.hasOwnProperty(prop)) c[prop](p[prop]());\n });\n c.path.pointRadius(p.path.pointRadius());\n return c;\n };\n\n return p;\n };\n}\n\nexport function projection(type, proj) {\n if (!type || typeof type !== 'string') {\n throw new Error('Projection type must be a name string.');\n }\n type = type.toLowerCase();\n if (arguments.length > 1) {\n projections[type] = create(type, proj);\n return this;\n } else {\n return projections.hasOwnProperty(type) ? projections[type] : null;\n }\n}\n\nexport function getProjectionPath(proj) {\n return (proj && proj.path) || defaultPath;\n}\n\nvar projections = {\n // base d3-geo projection types\n albers: geoAlbers,\n albersusa: geoAlbersUsa,\n azimuthalequalarea: geoAzimuthalEqualArea,\n azimuthalequidistant: geoAzimuthalEquidistant,\n conicconformal: geoConicConformal,\n conicequalarea: geoConicEqualArea,\n conicequidistant: geoConicEquidistant,\n equirectangular: geoEquirectangular,\n gnomonic: geoGnomonic,\n identity: geoIdentity,\n mercator: geoMercator,\n naturalEarth1: geoNaturalEarth1,\n orthographic: geoOrthographic,\n stereographic: geoStereographic,\n transversemercator: geoTransverseMercator\n};\n\nfor (var key in projections) {\n projection(key, projections[key]);\n}\n","import {Transform} from 'vega-dataflow';\nimport {getProjectionPath} from 'vega-projection';\nimport {inherits, identity} from 'vega-util';\n\n/**\n * Map GeoJSON data to an SVG path string.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {function(object): *} [params.field] - The field with GeoJSON data,\n * or null if the tuple itself is a GeoJSON feature.\n * @param {string} [params.as='path'] - The output field in which to store\n * the generated path data (default 'path').\n */\nexport default function GeoPath(params) {\n Transform.call(this, null, params);\n}\n\nGeoPath.Definition = {\n \"type\": \"GeoPath\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"projection\", \"type\": \"projection\" },\n { \"name\": \"field\", \"type\": \"field\" },\n { \"name\": \"pointRadius\", \"type\": \"number\", \"expr\": true },\n { \"name\": \"as\", \"type\": \"string\", \"default\": \"path\" }\n ]\n};\n\nvar prototype = inherits(GeoPath, Transform);\n\nprototype.transform = function(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n path = this.value,\n field = _.field || identity,\n as = _.as || 'path',\n flag = out.SOURCE;\n\n function set(t) { t[as] = path(field(t)); }\n\n if (!path || _.modified()) {\n // parameters updated, reset and reflow\n this.value = path = getProjectionPath(_.projection);\n out.materialize().reflow();\n } else {\n flag = field === identity || pulse.modified(field.fields)\n ? out.ADD_MOD\n : out.ADD;\n }\n\n var prev = initPath(path, _.pointRadius);\n out.visit(flag, set);\n path.pointRadius(prev);\n\n return out.modifies(as);\n};\n\nfunction initPath(path, pointRadius) {\n var prev = path.pointRadius();\n path.context(null);\n if (pointRadius != null) {\n path.pointRadius(pointRadius);\n }\n return prev;\n}\n","import {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Geo-code a longitude/latitude point to an x/y coordinate.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {Array} params.fields - A two-element array of\n * field accessors for the longitude and latitude values.\n * @param {Array} [params.as] - A two-element array of field names\n * under which to store the result. Defaults to ['x','y'].\n */\nexport default function GeoPoint(params) {\n Transform.call(this, null, params);\n}\n\nGeoPoint.Definition = {\n \"type\": \"GeoPoint\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"projection\", \"type\": \"projection\", \"required\": true },\n { \"name\": \"fields\", \"type\": \"field\", \"array\": true, \"required\": true, \"length\": 2 },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": 2, \"default\": [\"x\", \"y\"] }\n ]\n};\n\nvar prototype = inherits(GeoPoint, Transform);\n\nprototype.transform = function(_, pulse) {\n var proj = _.projection,\n lon = _.fields[0],\n lat = _.fields[1],\n as = _.as || ['x', 'y'],\n x = as[0],\n y = as[1],\n mod;\n\n function set(t) {\n var xy = proj([lon(t), lat(t)]);\n if (xy) {\n t[x] = xy[0];\n t[y] = xy[1];\n } else {\n t[x] = undefined;\n t[y] = undefined;\n }\n }\n\n if (_.modified()) {\n // parameters updated, reflow\n pulse = pulse.materialize().reflow(true).visit(pulse.SOURCE, set);\n } else {\n mod = pulse.modified(lon.fields) || pulse.modified(lat.fields);\n pulse.visit(mod ? pulse.ADD_MOD : pulse.ADD, set);\n }\n\n return pulse.modifies(as);\n};\n","import {Transform} from 'vega-dataflow';\nimport {getProjectionPath} from 'vega-projection';\nimport {inherits, field} from 'vega-util';\n\n/**\n * Annotate items with a geopath shape generator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {function(object): *} [params.field] - The field with GeoJSON data,\n * or null if the tuple itself is a GeoJSON feature.\n * @param {string} [params.as='shape'] - The output field in which to store\n * the generated path data (default 'shape').\n */\nexport default function GeoShape(params) {\n Transform.call(this, null, params);\n}\n\nGeoShape.Definition = {\n \"type\": \"GeoShape\",\n \"metadata\": {\"modifies\": true, \"nomod\": true},\n \"params\": [\n { \"name\": \"projection\", \"type\": \"projection\" },\n { \"name\": \"field\", \"type\": \"field\", \"default\": \"datum\" },\n { \"name\": \"pointRadius\", \"type\": \"number\", \"expr\": true },\n { \"name\": \"as\", \"type\": \"string\", \"default\": \"shape\" }\n ]\n};\n\nvar prototype = inherits(GeoShape, Transform);\n\nprototype.transform = function(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n shape = this.value,\n as = _.as || 'shape',\n flag = out.ADD;\n\n if (!shape || _.modified()) {\n // parameters updated, reset and reflow\n this.value = shape = shapeGenerator(\n getProjectionPath(_.projection),\n _.field || field('datum'),\n _.pointRadius\n );\n out.materialize().reflow();\n flag = out.SOURCE;\n }\n\n out.visit(flag, function(t) { t[as] = shape; });\n\n return out.modifies(as);\n};\n\nfunction shapeGenerator(path, field, pointRadius) {\n var shape = pointRadius == null\n ? function(_) { return path(field(_)); }\n : function(_) {\n var prev = path.pointRadius(),\n value = path.pointRadius(pointRadius)(field(_));\n path.pointRadius(prev);\n return value;\n };\n shape.context = function(_) {\n path.context(_);\n return shape;\n };\n\n return shape;\n}\n","import {Transform, ingest, replace} from 'vega-dataflow';\nimport {inherits, isFunction} from 'vega-util';\nimport {geoGraticule} from 'd3-geo';\n\n/**\n * GeoJSON feature generator for creating graticules.\n * @constructor\n */\nexport default function Graticule(params) {\n Transform.call(this, [], params);\n this.generator = geoGraticule();\n}\n\nGraticule.Definition = {\n \"type\": \"Graticule\",\n \"metadata\": {\"changes\": true},\n \"params\": [\n { \"name\": \"extent\", \"type\": \"array\", \"array\": true, \"length\": 2,\n \"content\": {\"type\": \"number\", \"array\": true, \"length\": 2} },\n { \"name\": \"extentMajor\", \"type\": \"array\", \"array\": true, \"length\": 2,\n \"content\": {\"type\": \"number\", \"array\": true, \"length\": 2} },\n { \"name\": \"extentMinor\", \"type\": \"array\", \"array\": true, \"length\": 2,\n \"content\": {\"type\": \"number\", \"array\": true, \"length\": 2} },\n { \"name\": \"step\", \"type\": \"number\", \"array\": true, \"length\": 2 },\n { \"name\": \"stepMajor\", \"type\": \"number\", \"array\": true, \"length\": 2, \"default\": [90, 360] },\n { \"name\": \"stepMinor\", \"type\": \"number\", \"array\": true, \"length\": 2, \"default\": [10, 10] },\n { \"name\": \"precision\", \"type\": \"number\", \"default\": 2.5 }\n ]\n};\n\nvar prototype = inherits(Graticule, Transform);\n\nprototype.transform = function(_, pulse) {\n var src = this.value,\n gen = this.generator, t;\n\n if (!src.length || _.modified()) {\n for (var prop in _) {\n if (isFunction(gen[prop])) {\n gen[prop](_[prop]);\n }\n }\n }\n\n t = gen();\n if (src.length) {\n pulse.mod.push(replace(src[0], t));\n } else {\n pulse.add.push(ingest(t));\n }\n src[0] = t;\n\n return pulse;\n};\n","import {Feature, FeatureCollection} from './constants';\nimport {Transform} from 'vega-dataflow';\nimport {projection, projectionProperties} from 'vega-projection';\nimport {array, error, inherits, isFunction} from 'vega-util';\n\n/**\n * Maintains a cartographic projection.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nexport default function Projection(params) {\n Transform.call(this, null, params);\n this.modified(true); // always treat as modified\n}\n\nvar prototype = inherits(Projection, Transform);\n\nprototype.transform = function(_, pulse) {\n var proj = this.value;\n\n if (!proj || _.modified('type')) {\n this.value = (proj = create(_.type));\n projectionProperties.forEach(function(prop) {\n if (_[prop] != null) set(proj, prop, _[prop]);\n });\n } else {\n projectionProperties.forEach(function(prop) {\n if (_.modified(prop)) set(proj, prop, _[prop]);\n });\n }\n\n if (_.pointRadius != null) proj.path.pointRadius(_.pointRadius);\n if (_.fit) fit(proj, _);\n\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n};\n\nfunction fit(proj, _) {\n var data = collectGeoJSON(_.fit);\n _.extent ? proj.fitExtent(_.extent, data)\n : _.size ? proj.fitSize(_.size, data) : 0;\n}\n\nfunction create(type) {\n var constructor = projection((type || 'mercator').toLowerCase());\n if (!constructor) error('Unrecognized projection type: ' + type);\n return constructor();\n}\n\nfunction set(proj, key, value) {\n if (isFunction(proj[key])) proj[key](value);\n}\n\nexport function collectGeoJSON(data) {\n data = array(data);\n return data.length === 1 ? data[0]\n : {\n type: FeatureCollection,\n features: data.reduce((a, f) => a.concat(featurize(f)), [])\n };\n}\n\nfunction featurize(f) {\n return f.type === FeatureCollection\n ? f.features\n : array(f).filter(d => d != null).map(\n d => d.type === Feature ? d : {type: Feature, geometry: d}\n );\n}\n","export default function(x, y) {\n var nodes;\n\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force() {\n var i,\n n = nodes.length,\n node,\n sx = 0,\n sy = 0;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], sx += node.x, sy += node.y;\n }\n\n for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) {\n node = nodes[i], node.x -= sx, node.y -= sy;\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n return force;\n}\n","export default function(d) {\n var x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n","export default function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","export default function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n","import Quad from \"./quad\";\n\nexport default function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Quad from \"./quad\";\n\nexport default function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n","import Quad from \"./quad\";\n\nexport default function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add\";\nimport tree_cover from \"./cover\";\nimport tree_data from \"./data\";\nimport tree_extent from \"./extent\";\nimport tree_find from \"./find\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove\";\nimport tree_root from \"./root\";\nimport tree_size from \"./size\";\nimport tree_visit from \"./visit\";\nimport tree_visitAfter from \"./visitAfter\";\nimport tree_x, {defaultX} from \"./x\";\nimport tree_y, {defaultY} from \"./y\";\n\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function() {\n return (Math.random() - 0.5) * 1e-6;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction x(d) {\n return d.x + d.vx;\n}\n\nfunction y(d) {\n return d.y + d.vy;\n}\n\nexport default function(radius) {\n var nodes,\n radii,\n strength = 1,\n iterations = 1;\n\n if (typeof radius !== \"function\") radius = constant(radius == null ? 1 : +radius);\n\n function force() {\n var i, n = nodes.length,\n tree,\n node,\n xi,\n yi,\n ri,\n ri2;\n\n for (var k = 0; k < iterations; ++k) {\n tree = quadtree(nodes, x, y).visitAfter(prepare);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n ri = radii[node.index], ri2 = ri * ri;\n xi = node.x + node.vx;\n yi = node.y + node.vy;\n tree.visit(apply);\n }\n }\n\n function apply(quad, x0, y0, x1, y1) {\n var data = quad.data, rj = quad.r, r = ri + rj;\n if (data) {\n if (data.index > node.index) {\n var x = xi - data.x - data.vx,\n y = yi - data.y - data.vy,\n l = x * x + y * y;\n if (l < r * r) {\n if (x === 0) x = jiggle(), l += x * x;\n if (y === 0) y = jiggle(), l += y * y;\n l = (r - (l = Math.sqrt(l))) / l * strength;\n node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n node.vy += (y *= l) * r;\n data.vx -= x * (r = 1 - r);\n data.vy -= y * r;\n }\n }\n return;\n }\n return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n }\n }\n\n function prepare(quad) {\n if (quad.data) return quad.r = radii[quad.data.index];\n for (var i = quad.r = 0; i < 4; ++i) {\n if (quad[i] && quad[i].r > quad.r) {\n quad.r = quad[i].r;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n radii = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"missing: \" + nodeId);\n return node;\n}\n\nexport default function(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = constant(30),\n distances,\n nodes,\n count,\n bias,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle();\n y = target.y + target.vy - source.y - source.vy || jiggle();\n l = Math.sqrt(x * x + y * y);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l;\n target.vx -= x * (b = bias[i]);\n target.vy -= y * b;\n source.vx += x * (b = 1 - b);\n source.vy += y * b;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n };\n\n return force;\n}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer, now} from \"./timer\";\n\nexport default function(callback, delay, time) {\n var t = new Timer, total = delay;\n if (delay == null) return t.restart(callback, delay, time), t;\n delay = +delay, time = time == null ? now() : +time;\n t.restart(function tick(elapsed) {\n elapsed += total;\n t.restart(tick, total += delay, time);\n callback(elapsed);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer} from \"d3-timer\";\n\nexport function x(d) {\n return d.x;\n}\n\nexport function y(d) {\n return d.y;\n}\n\nvar initialRadius = 10,\n initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n var simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = new Map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\");\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick(iterations) {\n var i, n = nodes.length, node;\n\n if (iterations === undefined) iterations = 1;\n\n for (var k = 0; k < iterations; ++k) {\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.forEach(function(force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n }\n\n return simulation;\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (node.fx != null) node.x = node.fx;\n if (node.fy != null) node.y = node.fy;\n if (isNaN(node.x) || isNaN(node.y)) {\n var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle;\n node.x = radius * Math.cos(angle);\n node.y = radius * Math.sin(angle);\n }\n if (isNaN(node.vx) || isNaN(node.vy)) {\n node.vx = node.vy = 0;\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function(x, y, radius) {\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n d2,\n node,\n closest;\n\n if (radius == null) radius = Infinity;\n else radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - node.y;\n d2 = dx * dx + dy * dy;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\nimport {x, y} from \"./simulation.js\";\n\nexport default function() {\n var nodes,\n node,\n alpha,\n strength = constant(-30),\n strengths,\n distanceMin2 = 1,\n distanceMax2 = Infinity,\n theta2 = 0.81;\n\n function force(_) {\n var i, n = nodes.length, tree = quadtree(nodes, x, y).visitAfter(accumulate);\n for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n strengths = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n }\n\n function accumulate(quad) {\n var strength = 0, q, c, weight = 0, x, y, i;\n\n // For internal nodes, accumulate forces from child quadrants.\n if (quad.length) {\n for (x = y = i = 0; i < 4; ++i) {\n if ((q = quad[i]) && (c = Math.abs(q.value))) {\n strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n }\n }\n quad.x = x / weight;\n quad.y = y / weight;\n }\n\n // For leaf nodes, accumulate forces from coincident quadrants.\n else {\n q = quad;\n q.x = q.data.x;\n q.y = q.data.y;\n do strength += strengths[q.data.index];\n while (q = q.next);\n }\n\n quad.value = strength;\n }\n\n function apply(quad, x1, _, x2) {\n if (!quad.value) return true;\n\n var x = quad.x - node.x,\n y = quad.y - node.y,\n w = x2 - x1,\n l = x * x + y * y;\n\n // Apply the Barnes-Hut approximation if possible.\n // Limit forces for very close nodes; randomize direction if coincident.\n if (w * w / theta2 < l) {\n if (l < distanceMax2) {\n if (x === 0) x = jiggle(), l += x * x;\n if (y === 0) y = jiggle(), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n node.vx += x * quad.value * alpha / l;\n node.vy += y * quad.value * alpha / l;\n }\n return true;\n }\n\n // Otherwise, process points directly.\n else if (quad.length || l >= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (quad.data !== node || quad.next) {\n if (x === 0) x = jiggle(), l += x * x;\n if (y === 0) y = jiggle(), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (quad.data !== node) {\n w = strengths[quad.data.index] * alpha / l;\n node.vx += x * w;\n node.vy += y * w;\n } while (quad = quad.next);\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(x) {\n var strength = constant(0.1),\n nodes,\n strengths,\n xz;\n\n if (typeof x !== \"function\") x = constant(x == null ? 0 : +x);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n xz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : x;\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(y) {\n var strength = constant(0.1),\n nodes,\n strengths,\n yz;\n\n if (typeof y !== \"function\") y = constant(y == null ? 0 : +y);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n yz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : y;\n };\n\n return force;\n}\n","import {Transform} from 'vega-dataflow';\nimport {accessorFields, array, error, inherits, isFunction} from 'vega-util';\nimport {\n forceSimulation, forceCenter, forceCollide,\n forceManyBody, forceLink, forceX, forceY\n} from 'd3-force';\n\nvar ForceMap = {\n center: forceCenter,\n collide: forceCollide,\n nbody: forceManyBody,\n link: forceLink,\n x: forceX,\n y: forceY\n};\n\nvar Forces = 'forces',\n ForceParams = [\n 'alpha', 'alphaMin', 'alphaTarget',\n 'velocityDecay', 'forces'\n ],\n ForceConfig = ['static', 'iterations'],\n ForceOutput = ['x', 'y', 'vx', 'vy'];\n\n/**\n * Force simulation layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.forces - The forces to apply.\n */\nexport default function Force(params) {\n Transform.call(this, null, params);\n}\n\nForce.Definition = {\n \"type\": \"Force\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"static\", \"type\": \"boolean\", \"default\": false },\n { \"name\": \"restart\", \"type\": \"boolean\", \"default\": false },\n { \"name\": \"iterations\", \"type\": \"number\", \"default\": 300 },\n { \"name\": \"alpha\", \"type\": \"number\", \"default\": 1 },\n { \"name\": \"alphaMin\", \"type\": \"number\", \"default\": 0.001 },\n { \"name\": \"alphaTarget\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"velocityDecay\", \"type\": \"number\", \"default\": 0.4 },\n { \"name\": \"forces\", \"type\": \"param\", \"array\": true,\n \"params\": [\n {\n \"key\": {\"force\": \"center\"},\n \"params\": [\n { \"name\": \"x\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"y\", \"type\": \"number\", \"default\": 0 }\n ]\n },\n {\n \"key\": {\"force\": \"collide\"},\n \"params\": [\n { \"name\": \"radius\", \"type\": \"number\", \"expr\": true },\n { \"name\": \"strength\", \"type\": \"number\", \"default\": 0.7 },\n { \"name\": \"iterations\", \"type\": \"number\", \"default\": 1 }\n ]\n },\n {\n \"key\": {\"force\": \"nbody\"},\n \"params\": [\n { \"name\": \"strength\", \"type\": \"number\", \"default\": -30 },\n { \"name\": \"theta\", \"type\": \"number\", \"default\": 0.9 },\n { \"name\": \"distanceMin\", \"type\": \"number\", \"default\": 1 },\n { \"name\": \"distanceMax\", \"type\": \"number\" }\n ]\n },\n {\n \"key\": {\"force\": \"link\"},\n \"params\": [\n { \"name\": \"links\", \"type\": \"data\" },\n { \"name\": \"id\", \"type\": \"field\" },\n { \"name\": \"distance\", \"type\": \"number\", \"default\": 30, \"expr\": true },\n { \"name\": \"strength\", \"type\": \"number\", \"expr\": true },\n { \"name\": \"iterations\", \"type\": \"number\", \"default\": 1 }\n ]\n },\n {\n \"key\": {\"force\": \"x\"},\n \"params\": [\n { \"name\": \"strength\", \"type\": \"number\", \"default\": 0.1 },\n { \"name\": \"x\", \"type\": \"field\" }\n ]\n },\n {\n \"key\": {\"force\": \"y\"},\n \"params\": [\n { \"name\": \"strength\", \"type\": \"number\", \"default\": 0.1 },\n { \"name\": \"y\", \"type\": \"field\" }\n ]\n }\n ] },\n {\n \"name\": \"as\", \"type\": \"string\", \"array\": true, \"modify\": false,\n \"default\": ForceOutput\n }\n ]\n};\n\nvar prototype = inherits(Force, Transform);\n\nprototype.transform = function(_, pulse) {\n var sim = this.value,\n change = pulse.changed(pulse.ADD_REM),\n params = _.modified(ForceParams),\n iters = _.iterations || 300;\n\n // configure simulation\n if (!sim) {\n this.value = sim = simulation(pulse.source, _);\n sim.on('tick', rerun(pulse.dataflow, this));\n if (!_.static) {\n change = true;\n sim.tick(); // ensure we run on init\n }\n pulse.modifies('index');\n } else {\n if (change) {\n pulse.modifies('index');\n sim.nodes(pulse.source);\n }\n if (params || pulse.changed(pulse.MOD)) {\n setup(sim, _, 0, pulse);\n }\n }\n\n // run simulation\n if (params || change || _.modified(ForceConfig)\n || (pulse.changed() && _.restart))\n {\n sim.alpha(Math.max(sim.alpha(), _.alpha || 1))\n .alphaDecay(1 - Math.pow(sim.alphaMin(), 1 / iters));\n\n if (_.static) {\n for (sim.stop(); --iters >= 0;) sim.tick();\n } else {\n if (sim.stopped()) sim.restart();\n if (!change) return pulse.StopPropagation; // defer to sim ticks\n }\n }\n\n return this.finish(_, pulse);\n};\n\nprototype.finish = function(_, pulse) {\n var dataflow = pulse.dataflow;\n\n // inspect dependencies, touch link source data\n for (var args=this._argops, j=0, m=args.length, arg; j= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n","export default function(callback) {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n callback(node), children = node.children;\n if (children) for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n } while (next.length);\n return this;\n}\n","export default function(callback) {\n var node = this, nodes = [node], children, i;\n while (node = nodes.pop()) {\n callback(node), children = node.children;\n if (children) for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n return this;\n}\n","export default function(callback) {\n var node = this, nodes = [node], next = [], children, i, n;\n while (node = nodes.pop()) {\n next.push(node), children = node.children;\n if (children) for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n while (node = next.pop()) {\n callback(node);\n }\n return this;\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","export default function() {\n var nodes = [];\n this.each(function(node) {\n nodes.push(node);\n });\n return nodes;\n}\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","import node_count from \"./count\";\nimport node_each from \"./each\";\nimport node_eachBefore from \"./eachBefore\";\nimport node_eachAfter from \"./eachAfter\";\nimport node_sum from \"./sum\";\nimport node_sort from \"./sort\";\nimport node_path from \"./path\";\nimport node_ancestors from \"./ancestors\";\nimport node_descendants from \"./descendants\";\nimport node_leaves from \"./leaves\";\nimport node_links from \"./links\";\n\nexport default function hierarchy(data, children) {\n var root = new Node(data),\n valued = +data.value && (root.value = data.value),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n if (children == null) children = defaultChildren;\n\n while (node = nodes.pop()) {\n if (valued) node.value = +node.data.value;\n if ((childs = children(node.data)) && (n = childs.length)) {\n node.children = new Array(n);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction defaultChildren(d) {\n return d.children;\n}\n\nfunction copyData(node) {\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy\n};\n","export var slice = Array.prototype.slice;\n\nexport function shuffle(array) {\n var m = array.length,\n t,\n i;\n\n while (m) {\n i = Math.random() * m-- | 0;\n t = array[m];\n array[m] = array[i];\n array[i] = t;\n }\n\n return array;\n}\n","import {shuffle, slice} from \"../array\";\n\nexport default function(circles) {\n var i = 0, n = (circles = shuffle(slice.call(circles))).length, B = [], p, e;\n\n while (i < n) {\n p = circles[i];\n if (e && enclosesWeak(e, p)) ++i;\n else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n }\n\n return e;\n}\n\nfunction extendBasis(B, p) {\n var i, j;\n\n if (enclosesWeakAll(p, B)) return [p];\n\n // If we get here then B must have at least one element.\n for (i = 0; i < B.length; ++i) {\n if (enclosesNot(p, B[i])\n && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n return [B[i], p];\n }\n }\n\n // If we get here then B must have at least two elements.\n for (i = 0; i < B.length - 1; ++i) {\n for (j = i + 1; j < B.length; ++j) {\n if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n && enclosesNot(encloseBasis2(B[i], p), B[j])\n && enclosesNot(encloseBasis2(B[j], p), B[i])\n && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n return [B[i], B[j], p];\n }\n }\n }\n\n // If we get here then something is very wrong.\n throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n for (var i = 0; i < B.length; ++i) {\n if (!enclosesWeak(a, B[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction encloseBasis(B) {\n switch (B.length) {\n case 1: return encloseBasis1(B[0]);\n case 2: return encloseBasis2(B[0], B[1]);\n case 3: return encloseBasis3(B[0], B[1], B[2]);\n }\n}\n\nfunction encloseBasis1(a) {\n return {\n x: a.x,\n y: a.y,\n r: a.r\n };\n}\n\nfunction encloseBasis2(a, b) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n l = Math.sqrt(x21 * x21 + y21 * y21);\n return {\n x: (x1 + x2 + x21 / l * r21) / 2,\n y: (y1 + y2 + y21 / l * r21) / 2,\n r: (l + r1 + r2) / 2\n };\n}\n\nfunction encloseBasis3(a, b, c) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x3 = c.x, y3 = c.y, r3 = c.r,\n a2 = x1 - x2,\n a3 = x1 - x3,\n b2 = y1 - y2,\n b3 = y1 - y3,\n c2 = r2 - r1,\n c3 = r3 - r1,\n d1 = x1 * x1 + y1 * y1 - r1 * r1,\n d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n ab = a3 * b2 - a2 * b3,\n xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n xb = (b3 * c2 - b2 * c3) / ab,\n ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n yb = (a2 * c3 - a3 * c2) / ab,\n A = xb * xb + yb * yb - 1,\n B = 2 * (r1 + xa * xb + ya * yb),\n C = xa * xa + ya * ya - r1 * r1,\n r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n return {\n x: x1 + xa + xb * r,\n y: y1 + ya + yb * r,\n r: r\n };\n}\n","import enclose from \"./enclose\";\n\nfunction place(b, a, c) {\n var dx = b.x - a.x, x, a2,\n dy = b.y - a.y, y, b2,\n d2 = dx * dx + dy * dy;\n if (d2) {\n a2 = a.r + c.r, a2 *= a2;\n b2 = b.r + c.r, b2 *= b2;\n if (a2 > b2) {\n x = (d2 + b2 - a2) / (2 * d2);\n y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n c.x = b.x - x * dx - y * dy;\n c.y = b.y - x * dy + y * dx;\n } else {\n x = (d2 + a2 - b2) / (2 * d2);\n y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n c.x = a.x + x * dx - y * dy;\n c.y = a.y + x * dy + y * dx;\n }\n } else {\n c.x = a.x + c.r;\n c.y = a.y;\n }\n}\n\nfunction intersects(a, b) {\n var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n var a = node._,\n b = node.next._,\n ab = a.r + b.r,\n dx = (a.x * b.r + b.x * a.r) / ab,\n dy = (a.y * b.r + b.y * a.r) / ab;\n return dx * dx + dy * dy;\n}\n\nfunction Node(circle) {\n this._ = circle;\n this.next = null;\n this.previous = null;\n}\n\nexport function packEnclose(circles) {\n if (!(n = circles.length)) return 0;\n\n var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n // Place the first circle.\n a = circles[0], a.x = 0, a.y = 0;\n if (!(n > 1)) return a.r;\n\n // Place the second circle.\n b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n if (!(n > 2)) return a.r + b.r;\n\n // Place the third circle.\n place(b, a, c = circles[2]);\n\n // Initialize the front-chain using the first three circles a, b and c.\n a = new Node(a), b = new Node(b), c = new Node(c);\n a.next = c.previous = b;\n b.next = a.previous = c;\n c.next = b.previous = a;\n\n // Attempt to place each remaining circle…\n pack: for (i = 3; i < n; ++i) {\n place(a._, b._, c = circles[i]), c = new Node(c);\n\n // Find the closest intersecting circle on the front-chain, if any.\n // “Closeness” is determined by linear distance along the front-chain.\n // “Ahead” or “behind” is likewise determined by linear distance.\n j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n do {\n if (sj <= sk) {\n if (intersects(j._, c._)) {\n b = j, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sj += j._.r, j = j.next;\n } else {\n if (intersects(k._, c._)) {\n a = k, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sk += k._.r, k = k.previous;\n }\n } while (j !== k.next);\n\n // Success! Insert the new circle c between a and b.\n c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n // Compute the new closest circle pair to the centroid.\n aa = score(a);\n while ((c = c.next) !== b) {\n if ((ca = score(c)) < aa) {\n a = c, aa = ca;\n }\n }\n b = a.next;\n }\n\n // Compute the enclosing circle of the front chain.\n a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);\n\n // Translate the circles to put the enclosing circle around the origin.\n for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n return c.r;\n}\n\nexport default function(circles) {\n packEnclose(circles);\n return circles;\n}\n","export function optional(f) {\n return f == null ? null : required(f);\n}\n\nexport function required(f) {\n if (typeof f !== \"function\") throw new Error;\n return f;\n}\n","export function constantZero() {\n return 0;\n}\n\nexport default function(x) {\n return function() {\n return x;\n };\n}\n","import {packEnclose} from \"./siblings\";\nimport {optional} from \"../accessors\";\nimport constant, {constantZero} from \"../constant\";\n\nfunction defaultRadius(d) {\n return Math.sqrt(d.value);\n}\n\nexport default function() {\n var radius = null,\n dx = 1,\n dy = 1,\n padding = constantZero;\n\n function pack(root) {\n root.x = dx / 2, root.y = dy / 2;\n if (radius) {\n root.eachBefore(radiusLeaf(radius))\n .eachAfter(packChildren(padding, 0.5))\n .eachBefore(translateChild(1));\n } else {\n root.eachBefore(radiusLeaf(defaultRadius))\n .eachAfter(packChildren(constantZero, 1))\n .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))\n .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n }\n return root;\n }\n\n pack.radius = function(x) {\n return arguments.length ? (radius = optional(x), pack) : radius;\n };\n\n pack.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n };\n\n pack.padding = function(x) {\n return arguments.length ? (padding = typeof x === \"function\" ? x : constant(+x), pack) : padding;\n };\n\n return pack;\n}\n\nfunction radiusLeaf(radius) {\n return function(node) {\n if (!node.children) {\n node.r = Math.max(0, +radius(node) || 0);\n }\n };\n}\n\nfunction packChildren(padding, k) {\n return function(node) {\n if (children = node.children) {\n var children,\n i,\n n = children.length,\n r = padding(node) * k || 0,\n e;\n\n if (r) for (i = 0; i < n; ++i) children[i].r += r;\n e = packEnclose(children);\n if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n node.r = e + r;\n }\n };\n}\n\nfunction translateChild(k) {\n return function(node) {\n var parent = node.parent;\n node.r *= k;\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n}\n","export default function(node) {\n node.x0 = Math.round(node.x0);\n node.y0 = Math.round(node.y0);\n node.x1 = Math.round(node.x1);\n node.y1 = Math.round(node.y1);\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.y0 = y0, node.y1 = y1;\n node.x0 = x0, node.x1 = x0 += node.value * k;\n }\n}\n","import roundNode from \"./treemap/round\";\nimport treemapDice from \"./treemap/dice\";\n\nexport default function() {\n var dx = 1,\n dy = 1,\n padding = 0,\n round = false;\n\n function partition(root) {\n var n = root.height + 1;\n root.x0 =\n root.y0 = padding;\n root.x1 = dx;\n root.y1 = dy / n;\n root.eachBefore(positionNode(dy, n));\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(dy, n) {\n return function(node) {\n if (node.children) {\n treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n }\n var x0 = node.x0,\n y0 = node.y0,\n x1 = node.x1 - padding,\n y1 = node.y1 - padding;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n };\n }\n\n partition.round = function(x) {\n return arguments.length ? (round = !!x, partition) : round;\n };\n\n partition.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n };\n\n partition.padding = function(x) {\n return arguments.length ? (padding = +x, partition) : padding;\n };\n\n return partition;\n}\n","import {required} from \"./accessors\";\nimport {Node, computeHeight} from \"./hierarchy/index\";\n\nvar keyPrefix = \"$\", // Protect against keys like “__proto__”.\n preroot = {depth: -1},\n ambiguous = {};\n\nfunction defaultId(d) {\n return d.id;\n}\n\nfunction defaultParentId(d) {\n return d.parentId;\n}\n\nexport default function() {\n var id = defaultId,\n parentId = defaultParentId;\n\n function stratify(data) {\n var d,\n i,\n n = data.length,\n root,\n parent,\n node,\n nodes = new Array(n),\n nodeId,\n nodeKey,\n nodeByKey = {};\n\n for (i = 0; i < n; ++i) {\n d = data[i], node = nodes[i] = new Node(d);\n if ((nodeId = id(d, i, data)) != null && (nodeId += \"\")) {\n nodeKey = keyPrefix + (node.id = nodeId);\n nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node;\n }\n }\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], nodeId = parentId(data[i], i, data);\n if (nodeId == null || !(nodeId += \"\")) {\n if (root) throw new Error(\"multiple roots\");\n root = node;\n } else {\n parent = nodeByKey[keyPrefix + nodeId];\n if (!parent) throw new Error(\"missing: \" + nodeId);\n if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n if (parent.children) parent.children.push(node);\n else parent.children = [node];\n node.parent = parent;\n }\n }\n\n if (!root) throw new Error(\"no root\");\n root.parent = preroot;\n root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n root.parent = null;\n if (n > 0) throw new Error(\"cycle\");\n\n return root;\n }\n\n stratify.id = function(x) {\n return arguments.length ? (id = required(x), stratify) : id;\n };\n\n stratify.parentId = function(x) {\n return arguments.length ? (parentId = required(x), stratify) : parentId;\n };\n\n return stratify;\n}\n","import {Node} from \"./hierarchy/index\";\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n this.a = this; // ancestor\n this.z = 0; // prelim\n this.m = 0; // mod\n this.c = 0; // change\n this.s = 0; // shift\n this.t = null; // thread\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root);\n\n // Compute the layout using Buchheim et al.’s algorithm.\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk);\n\n // If a fixed node size is specified, scale x and y.\n if (nodeSize) root.eachBefore(sizeNode);\n\n // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n\n return root;\n }\n\n // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n\n // Computes all real x-coordinates by summing up the modifiers recursively.\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n\n // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function(x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n };\n\n tree.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n };\n\n return tree;\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (y1 - y0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.x0 = x0, node.x1 = x1;\n node.y0 = y0, node.y1 = y0 += node.value * k;\n }\n}\n","import treemapDice from \"./dice\";\nimport treemapSlice from \"./slice\";\n\nexport var phi = (1 + Math.sqrt(5)) / 2;\n\nexport function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n var rows = [],\n nodes = parent.children,\n row,\n nodeValue,\n i0 = 0,\n i1 = 0,\n n = nodes.length,\n dx, dy,\n value = parent.value,\n sumValue,\n minValue,\n maxValue,\n newRatio,\n minRatio,\n alpha,\n beta;\n\n while (i0 < n) {\n dx = x1 - x0, dy = y1 - y0;\n\n // Find the next non-empty node.\n do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n minValue = maxValue = sumValue;\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n beta = sumValue * sumValue * alpha;\n minRatio = Math.max(maxValue / beta, beta / minValue);\n\n // Keep adding nodes while the aspect ratio maintains or improves.\n for (; i1 < n; ++i1) {\n sumValue += nodeValue = nodes[i1].value;\n if (nodeValue < minValue) minValue = nodeValue;\n if (nodeValue > maxValue) maxValue = nodeValue;\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n minRatio = newRatio;\n }\n\n // Position and record the row orientation.\n rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n value -= sumValue, i0 = i1;\n }\n\n return rows;\n}\n\nexport default (function custom(ratio) {\n\n function squarify(parent, x0, y0, x1, y1) {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n }\n\n squarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return squarify;\n})(phi);\n","import roundNode from \"./round\";\nimport squarify from \"./squarify\";\nimport {required} from \"../accessors\";\nimport constant, {constantZero} from \"../constant\";\n\nexport default function() {\n var tile = squarify,\n round = false,\n dx = 1,\n dy = 1,\n paddingStack = [0],\n paddingInner = constantZero,\n paddingTop = constantZero,\n paddingRight = constantZero,\n paddingBottom = constantZero,\n paddingLeft = constantZero;\n\n function treemap(root) {\n root.x0 =\n root.y0 = 0;\n root.x1 = dx;\n root.y1 = dy;\n root.eachBefore(positionNode);\n paddingStack = [0];\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(node) {\n var p = paddingStack[node.depth],\n x0 = node.x0 + p,\n y0 = node.y0 + p,\n x1 = node.x1 - p,\n y1 = node.y1 - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n if (node.children) {\n p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n x0 += paddingLeft(node) - p;\n y0 += paddingTop(node) - p;\n x1 -= paddingRight(node) - p;\n y1 -= paddingBottom(node) - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n tile(node, x0, y0, x1, y1);\n }\n }\n\n treemap.round = function(x) {\n return arguments.length ? (round = !!x, treemap) : round;\n };\n\n treemap.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n };\n\n treemap.tile = function(x) {\n return arguments.length ? (tile = required(x), treemap) : tile;\n };\n\n treemap.padding = function(x) {\n return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n };\n\n treemap.paddingInner = function(x) {\n return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant(+x), treemap) : paddingInner;\n };\n\n treemap.paddingOuter = function(x) {\n return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n };\n\n treemap.paddingTop = function(x) {\n return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant(+x), treemap) : paddingTop;\n };\n\n treemap.paddingRight = function(x) {\n return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant(+x), treemap) : paddingRight;\n };\n\n treemap.paddingBottom = function(x) {\n return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant(+x), treemap) : paddingBottom;\n };\n\n treemap.paddingLeft = function(x) {\n return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant(+x), treemap) : paddingLeft;\n };\n\n return treemap;\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n i, n = nodes.length,\n sum, sums = new Array(n + 1);\n\n for (sums[0] = sum = i = 0; i < n; ++i) {\n sums[i + 1] = sum += nodes[i].value;\n }\n\n partition(0, n, parent.value, x0, y0, x1, y1);\n\n function partition(i, j, value, x0, y0, x1, y1) {\n if (i >= j - 1) {\n var node = nodes[i];\n node.x0 = x0, node.y0 = y0;\n node.x1 = x1, node.y1 = y1;\n return;\n }\n\n var valueOffset = sums[i],\n valueTarget = (value / 2) + valueOffset,\n k = i + 1,\n hi = j - 1;\n\n while (k < hi) {\n var mid = k + hi >>> 1;\n if (sums[mid] < valueTarget) k = mid + 1;\n else hi = mid;\n }\n\n if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;\n\n var valueLeft = sums[k] - valueOffset,\n valueRight = value - valueLeft;\n\n if ((x1 - x0) > (y1 - y0)) {\n var xk = (x0 * valueRight + x1 * valueLeft) / value;\n partition(i, k, valueLeft, x0, y0, xk, y1);\n partition(k, j, valueRight, xk, y0, x1, y1);\n } else {\n var yk = (y0 * valueRight + y1 * valueLeft) / value;\n partition(i, k, valueLeft, x0, y0, x1, yk);\n partition(k, j, valueRight, x0, yk, x1, y1);\n }\n }\n}\n","import dice from \"./dice\";\nimport slice from \"./slice\";\n\nexport default function(parent, x0, y0, x1, y1) {\n (parent.depth & 1 ? slice : dice)(parent, x0, y0, x1, y1);\n}\n","import treemapDice from \"./dice\";\nimport treemapSlice from \"./slice\";\nimport {phi, squarifyRatio} from \"./squarify\";\n\nexport default (function custom(ratio) {\n\n function resquarify(parent, x0, y0, x1, y1) {\n if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n var rows,\n row,\n nodes,\n i,\n j = -1,\n n,\n m = rows.length,\n value = parent.value;\n\n while (++j < m) {\n row = rows[j], nodes = row.children;\n for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value);\n else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1);\n value -= row.value;\n }\n } else {\n parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n rows.ratio = ratio;\n }\n }\n\n resquarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return resquarify;\n})(phi);\n","import lookup from './lookup';\nimport {ingest, isTuple, Transform, tupleid} from 'vega-dataflow';\nimport {array, error, inherits} from 'vega-util';\nimport {hierarchy} from 'd3-hierarchy';\n\n /**\n * Nest tuples into a tree structure, grouped by key values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.keys - The key fields to nest by, in order.\n * @param {boolean} [params.generate=false] - A boolean flag indicating if\n * non-leaf nodes generated by this transform should be included in the\n * output. The default (false) includes only the input data (leaf nodes)\n * in the data stream.\n */\nexport default function Nest(params) {\n Transform.call(this, null, params);\n}\n\nNest.Definition = {\n \"type\": \"Nest\",\n \"metadata\": {\"treesource\": true, \"changes\": true},\n \"params\": [\n { \"name\": \"keys\", \"type\": \"field\", \"array\": true },\n { \"name\": \"generate\", \"type\": \"boolean\" }\n ]\n};\n\nvar prototype = inherits(Nest, Transform);\n\nfunction children(n) {\n return n.values;\n}\n\nprototype.transform = function(_, pulse) {\n if (!pulse.source) {\n error('Nest transform requires an upstream data source.');\n }\n\n var gen = _.generate,\n mod = _.modified(),\n out = pulse.clone(),\n tree = this.value;\n\n if (!tree || mod || pulse.changed()) {\n // collect nodes to remove\n if (tree) {\n tree.each(function(node) {\n if (node.children && isTuple(node.data)) {\n out.rem.push(node.data);\n }\n });\n }\n\n // generate new tree structure\n this.value = tree = hierarchy({\n values: array(_.keys)\n .reduce(function(n, k) { n.key(k); return n; }, nest())\n .entries(out.source)\n }, children);\n\n // collect nodes to add\n if (gen) {\n tree.each(function(node) {\n if (node.children) {\n node = ingest(node.data);\n out.add.push(node);\n out.source.push(node);\n }\n });\n }\n\n // build lookup table\n lookup(tree, tupleid, tupleid);\n }\n\n out.source.root = tree;\n return out;\n};\n\nfunction nest() {\n var keys = [],\n nest;\n\n function apply(array, depth) {\n if (depth >= keys.length) {\n return array;\n }\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = {},\n values,\n result = {};\n\n while (++i < n) {\n keyValue = key(value = array[i]) + '';\n if (values = valuesByKey[keyValue]) {\n values.push(value);\n } else {\n valuesByKey[keyValue] = [value];\n }\n }\n\n for (keyValue in valuesByKey) {\n result[keyValue] = apply(valuesByKey[keyValue], depth);\n }\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n var array = [], k;\n for (k in map) {\n array.push({key: k, values: entries(map[k], depth)});\n }\n return array;\n }\n\n return nest = {\n entries: function(array) { return entries(apply(array, 0), 0); },\n key: function(d) { keys.push(d); return nest; }\n };\n}\n","import {Transform} from 'vega-dataflow';\nimport {error, inherits, one} from 'vega-util';\n\n/**\n * Abstract class for tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nexport default function HierarchyLayout(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(HierarchyLayout, Transform);\n\nprototype.transform = function(_, pulse) {\n if (!pulse.source || !pulse.source.root) {\n error(this.constructor.name\n + ' transform requires a backing tree data source.');\n }\n\n var layout = this.layout(_.method),\n fields = this.fields,\n root = pulse.source.root,\n as = _.as || fields;\n\n if (_.field) root.sum(_.field);\n if (_.sort) root.sort(_.sort);\n\n setParams(layout, this.params, _);\n if (layout.separation) {\n layout.separation(_.separation !== false ? defaultSeparation : one);\n }\n\n try {\n this.value = layout(root);\n } catch (err) {\n error(err);\n }\n root.each(function(node) { setFields(node, fields, as); });\n\n return pulse.reflow(_.modified()).modifies(as).modifies('leaf');\n};\n\nfunction setParams(layout, params, _) {\n for (var p, i=0, n=params.length; i 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nexport function attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n","import constant from \"./constant\";\nimport {x as pointX, y as pointY} from \"./point\";\nimport Diagram, {epsilon} from \"./Diagram\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n extent = null;\n\n function voronoi(data) {\n return new Diagram(data.map(function(d, i) {\n var s = [Math.round(x(d, i, data) / epsilon) * epsilon, Math.round(y(d, i, data) / epsilon) * epsilon];\n s.index = i;\n s.data = d;\n return s;\n }), extent);\n }\n\n voronoi.polygons = function(data) {\n return voronoi(data).polygons();\n };\n\n voronoi.links = function(data) {\n return voronoi(data).links();\n };\n\n voronoi.triangles = function(data) {\n return voronoi(data).triangles();\n };\n\n voronoi.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), voronoi) : x;\n };\n\n voronoi.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), voronoi) : y;\n };\n\n voronoi.extent = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n };\n\n voronoi.size = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n };\n\n return voronoi;\n}\n","import {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\nimport {voronoi} from 'd3-voronoi';\n\nexport default function Voronoi(params) {\n Transform.call(this, null, params);\n}\n\nVoronoi.Definition = {\n \"type\": \"Voronoi\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"x\", \"type\": \"field\", \"required\": true },\n { \"name\": \"y\", \"type\": \"field\", \"required\": true },\n { \"name\": \"size\", \"type\": \"number\", \"array\": true, \"length\": 2 },\n { \"name\": \"extent\", \"type\": \"array\", \"array\": true, \"length\": 2,\n \"default\": [[-1e5, -1e5], [1e5, 1e5]],\n \"content\": {\"type\": \"number\", \"array\": true, \"length\": 2} },\n { \"name\": \"as\", \"type\": \"string\", \"default\": \"path\" }\n ]\n};\n\nvar prototype = inherits(Voronoi, Transform);\n\nvar defaultExtent = [[-1e5, -1e5], [1e5, 1e5]];\n\nprototype.transform = function(_, pulse) {\n var as = _.as || 'path',\n data = pulse.source,\n diagram, polygons, i, n;\n\n // configure and construct voronoi diagram\n diagram = voronoi().x(_.x).y(_.y);\n if (_.size) diagram.size(_.size);\n else diagram.extent(_.extent || defaultExtent);\n\n this.value = (diagram = diagram(data));\n\n // map polygons to paths\n polygons = diagram.polygons();\n for (i=0, n=data.length; i> 5,\n ch = 1 << 11;\n\nexport default function() {\n var size = [256, 256],\n text,\n font,\n fontSize,\n fontStyle,\n fontWeight,\n rotate,\n padding,\n spiral = archimedeanSpiral,\n words = [],\n random = Math.random,\n cloud = {};\n\n cloud.layout = function() {\n var contextAndRatio = getContext(canvas()),\n board = zeroArray((size[0] >> 5) * size[1]),\n bounds = null,\n n = words.length,\n i = -1,\n tags = [],\n data = words.map(function(d) {\n return {\n text: text(d),\n font: font(d),\n style: fontStyle(d),\n weight: fontWeight(d),\n rotate: rotate(d),\n size: ~~fontSize(d),\n padding: padding(d),\n xoff: 0,\n yoff: 0,\n x1: 0,\n y1: 0,\n x0: 0,\n y0: 0,\n hasText: false,\n sprite: null,\n datum: d\n };\n }).sort(function(a, b) { return b.size - a.size; });\n\n while (++i < n) {\n var d = data[i];\n d.x = (size[0] * (random() + .5)) >> 1;\n d.y = (size[1] * (random() + .5)) >> 1;\n cloudSprite(contextAndRatio, d, data, i);\n if (d.hasText && place(board, d, bounds)) {\n tags.push(d);\n if (bounds) cloudBounds(bounds, d);\n else bounds = [{x: d.x + d.x0, y: d.y + d.y0}, {x: d.x + d.x1, y: d.y + d.y1}];\n // Temporary hack\n d.x -= size[0] >> 1;\n d.y -= size[1] >> 1;\n }\n }\n\n return tags;\n };\n\n function getContext(canvas) {\n canvas.width = canvas.height = 1;\n var ratio = Math.sqrt(canvas.getContext(\"2d\").getImageData(0, 0, 1, 1).data.length >> 2);\n canvas.width = (cw << 5) / ratio;\n canvas.height = ch / ratio;\n\n var context = canvas.getContext(\"2d\");\n context.fillStyle = context.strokeStyle = \"red\";\n context.textAlign = \"center\";\n\n return {context: context, ratio: ratio};\n }\n\n function place(board, tag, bounds) {\n var startX = tag.x,\n startY = tag.y,\n maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]),\n s = spiral(size),\n dt = random() < .5 ? 1 : -1,\n t = -dt,\n dxdy,\n dx,\n dy;\n\n while (dxdy = s(t += dt)) {\n dx = ~~dxdy[0];\n dy = ~~dxdy[1];\n\n if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) break;\n\n tag.x = startX + dx;\n tag.y = startY + dy;\n\n if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 ||\n tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue;\n // TODO only check for collisions within current bounds.\n if (!bounds || !cloudCollide(tag, board, size[0])) {\n if (!bounds || collideRects(tag, bounds)) {\n var sprite = tag.sprite,\n w = tag.width >> 5,\n sw = size[0] >> 5,\n lx = tag.x - (w << 4),\n sx = lx & 0x7f,\n msx = 32 - sx,\n h = tag.y1 - tag.y0,\n x = (tag.y + tag.y0) * sw + (lx >> 5),\n last;\n for (var j = 0; j < h; j++) {\n last = 0;\n for (var i = 0; i <= w; i++) {\n board[x + i] |= (last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\n }\n x += sw;\n }\n tag.sprite = null;\n return true;\n }\n }\n }\n return false;\n }\n\n cloud.words = function(_) {\n if (arguments.length) {\n words = _;\n return cloud;\n } else {\n return words;\n }\n };\n\n cloud.size = function(_) {\n if (arguments.length) {\n size = [+_[0], +_[1]];\n return cloud;\n } else {\n return size;\n }\n };\n\n cloud.font = function(_) {\n if (arguments.length) {\n font = functor(_);\n return cloud;\n } else {\n return font;\n }\n };\n\n cloud.fontStyle = function(_) {\n if (arguments.length) {\n fontStyle = functor(_);\n return cloud;\n } else {\n return fontStyle;\n }\n };\n\n cloud.fontWeight = function(_) {\n if (arguments.length) {\n fontWeight = functor(_);\n return cloud;\n } else {\n return fontWeight;\n }\n };\n\n cloud.rotate = function(_) {\n if (arguments.length) {\n rotate = functor(_);\n return cloud;\n } else {\n return rotate;\n }\n };\n\n cloud.text = function(_) {\n if (arguments.length) {\n text = functor(_);\n return cloud;\n } else {\n return text;\n }\n };\n\n cloud.spiral = function(_) {\n if (arguments.length) {\n spiral = spirals[_] || _;\n return cloud;\n } else {\n return spiral;\n }\n };\n\n cloud.fontSize = function(_) {\n if (arguments.length) {\n fontSize = functor(_);\n return cloud;\n } else {\n return fontSize;\n }\n };\n\n cloud.padding = function(_) {\n if (arguments.length) {\n padding = functor(_);\n return cloud;\n } else {\n return padding;\n }\n };\n\n cloud.random = function(_) {\n if (arguments.length) {\n random = _;\n return cloud;\n } else {\n return random;\n }\n };\n\n return cloud;\n}\n\n// Fetches a monochrome sprite bitmap for the specified text.\n// Load in batches for speed.\nfunction cloudSprite(contextAndRatio, d, data, di) {\n if (d.sprite) return;\n var c = contextAndRatio.context,\n ratio = contextAndRatio.ratio;\n\n c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);\n var x = 0,\n y = 0,\n maxh = 0,\n n = data.length,\n w, w32, h, i, j;\n --di;\n while (++di < n) {\n d = data[di];\n c.save();\n c.font = d.style + \" \" + d.weight + \" \" + ~~((d.size + 1) / ratio) + \"px \" + d.font;\n w = c.measureText(d.text + \"m\").width * ratio;\n h = d.size << 1;\n if (d.rotate) {\n var sr = Math.sin(d.rotate * cloudRadians),\n cr = Math.cos(d.rotate * cloudRadians),\n wcr = w * cr,\n wsr = w * sr,\n hcr = h * cr,\n hsr = h * sr;\n w = (Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f) >> 5 << 5;\n h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\n } else {\n w = (w + 0x1f) >> 5 << 5;\n }\n if (h > maxh) maxh = h;\n if (x + w >= (cw << 5)) {\n x = 0;\n y += maxh;\n maxh = 0;\n }\n if (y + h >= ch) break;\n c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);\n if (d.rotate) c.rotate(d.rotate * cloudRadians);\n c.fillText(d.text, 0, 0);\n if (d.padding) {\n c.lineWidth = 2 * d.padding;\n c.strokeText(d.text, 0, 0);\n }\n c.restore();\n d.width = w;\n d.height = h;\n d.xoff = x;\n d.yoff = y;\n d.x1 = w >> 1;\n d.y1 = h >> 1;\n d.x0 = -d.x1;\n d.y0 = -d.y1;\n d.hasText = true;\n x += w;\n }\n var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data,\n sprite = [];\n while (--di >= 0) {\n d = data[di];\n if (!d.hasText) continue;\n w = d.width;\n w32 = w >> 5;\n h = d.y1 - d.y0;\n // Zero the buffer\n for (i = 0; i < h * w32; i++) sprite[i] = 0;\n x = d.xoff;\n if (x == null) return;\n y = d.yoff;\n var seen = 0,\n seenRow = -1;\n for (j = 0; j < h; j++) {\n for (i = 0; i < w; i++) {\n var k = w32 * j + (i >> 5),\n m = pixels[((y + j) * (cw << 5) + (x + i)) << 2] ? 1 << (31 - (i % 32)) : 0;\n sprite[k] |= m;\n seen |= m;\n }\n if (seen) seenRow = j;\n else {\n d.y0++;\n h--;\n j--;\n y++;\n }\n }\n d.y1 = d.y0 + seenRow;\n d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);\n }\n}\n\n// Use mask-based collision detection.\nfunction cloudCollide(tag, board, sw) {\n sw >>= 5;\n var sprite = tag.sprite,\n w = tag.width >> 5,\n lx = tag.x - (w << 4),\n sx = lx & 0x7f,\n msx = 32 - sx,\n h = tag.y1 - tag.y0,\n x = (tag.y + tag.y0) * sw + (lx >> 5),\n last;\n for (var j = 0; j < h; j++) {\n last = 0;\n for (var i = 0; i <= w; i++) {\n if (((last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0))\n & board[x + i]) return true;\n }\n x += sw;\n }\n return false;\n}\n\nfunction cloudBounds(bounds, d) {\n var b0 = bounds[0],\n b1 = bounds[1];\n if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0;\n if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0;\n if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1;\n if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1;\n}\n\nfunction collideRects(a, b) {\n return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;\n}\n\nfunction archimedeanSpiral(size) {\n var e = size[0] / size[1];\n return function(t) {\n return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)];\n };\n}\n\nfunction rectangularSpiral(size) {\n var dy = 4,\n dx = dy * size[0] / size[1],\n x = 0,\n y = 0;\n return function(t) {\n var sign = t < 0 ? -1 : 1;\n // See triangular numbers: T_n = n * (n + 1) / 2.\n switch ((Math.sqrt(1 + 4 * sign * t) - sign) & 3) {\n case 0: x += dx; break;\n case 1: y += dy; break;\n case 2: x -= dx; break;\n default: y -= dy; break;\n }\n return [x, y];\n };\n}\n\n// TODO reuse arrays?\nfunction zeroArray(n) {\n var a = [],\n i = -1;\n while (++i < n) a[i] = 0;\n return a;\n}\n\nfunction functor(d) {\n return typeof d === \"function\" ? d : function() { return d; };\n}\n\nvar spirals = {\n archimedean: archimedeanSpiral,\n rectangular: rectangularSpiral\n};\n","import cloud from './CloudLayout';\nimport {Transform} from 'vega-dataflow';\nimport {constant, error, inherits, isFunction} from 'vega-util';\nimport {scale} from 'vega-scale';\nimport {random} from 'vega-statistics';\n\nvar Output = ['x', 'y', 'font', 'fontSize', 'fontStyle', 'fontWeight', 'angle'];\n\nvar Params = ['text', 'font', 'rotate', 'fontSize', 'fontStyle', 'fontWeight'];\n\nexport default function Wordcloud(params) {\n Transform.call(this, cloud(), params);\n}\n\nWordcloud.Definition = {\n \"type\": \"Wordcloud\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"size\", \"type\": \"number\", \"array\": true, \"length\": 2 },\n { \"name\": \"font\", \"type\": \"string\", \"expr\": true, \"default\": \"sans-serif\" },\n { \"name\": \"fontStyle\", \"type\": \"string\", \"expr\": true, \"default\": \"normal\" },\n { \"name\": \"fontWeight\", \"type\": \"string\", \"expr\": true, \"default\": \"normal\" },\n { \"name\": \"fontSize\", \"type\": \"number\", \"expr\": true, \"default\": 14 },\n { \"name\": \"fontSizeRange\", \"type\": \"number\", \"array\": \"nullable\", \"default\": [10, 50] },\n { \"name\": \"rotate\", \"type\": \"number\", \"expr\": true, \"default\": 0 },\n { \"name\": \"text\", \"type\": \"field\" },\n { \"name\": \"spiral\", \"type\": \"string\", \"values\": [\"archimedean\", \"rectangular\"] },\n { \"name\": \"padding\", \"type\": \"number\", \"expr\": true },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": 7, \"default\": Output }\n ]\n};\n\nvar prototype = inherits(Wordcloud, Transform);\n\nprototype.transform = function(_, pulse) {\n if (_.size && !(_.size[0] && _.size[1])) {\n error('Wordcloud size dimensions must be non-zero.');\n }\n\n function modp(param) {\n var p = _[param];\n return isFunction(p) && pulse.modified(p.fields);\n }\n\n var mod = _.modified();\n if (!(mod || pulse.changed(pulse.ADD_REM) || Params.some(modp))) return;\n\n var data = pulse.materialize(pulse.SOURCE).source,\n layout = this.value,\n as = _.as || Output,\n fontSize = _.fontSize || 14,\n range;\n\n isFunction(fontSize)\n ? (range = _.fontSizeRange)\n : (fontSize = constant(fontSize));\n\n // create font size scaling function as needed\n if (range) {\n var fsize = fontSize,\n sizeScale = scale('sqrt')()\n .domain(extent(fsize, data))\n .range(range);\n fontSize = function(x) { return sizeScale(fsize(x)); };\n }\n\n data.forEach(function(t) {\n t[as[0]] = NaN;\n t[as[1]] = NaN;\n t[as[3]] = 0;\n });\n\n // configure layout\n var words = layout\n .words(data)\n .text(_.text)\n .size(_.size || [500, 500])\n .padding(_.padding || 1)\n .spiral(_.spiral || 'archimedean')\n .rotate(_.rotate || 0)\n .font(_.font || 'sans-serif')\n .fontStyle(_.fontStyle || 'normal')\n .fontWeight(_.fontWeight || 'normal')\n .fontSize(fontSize)\n .random(random)\n .layout();\n\n var size = layout.size(),\n dx = size[0] >> 1,\n dy = size[1] >> 1,\n i = 0,\n n = words.length,\n w, t;\n\n for (; i max) max = v;\n }\n\n return [min, max];\n}\n","export function array8(n) { return new Uint8Array(n); }\n\nexport function array16(n) { return new Uint16Array(n); }\n\nexport function array32(n) { return new Uint32Array(n); }\n","import {array8, array16, array32} from './arrays';\n\n/**\n * Maintains CrossFilter state.\n */\nexport default function Bitmaps() {\n\n var width = 8,\n data = [],\n seen = array32(0),\n curr = array(0, width),\n prev = array(0, width);\n\n return {\n\n data: function() { return data; },\n\n seen: function() {\n return (seen = lengthen(seen, data.length));\n },\n\n add: function(array) {\n for (var i=0, j=data.length, n=array.length, t; i boolean (true => remove)\n var n = data.length,\n copy = Array(n - num),\n reindex = data, // reuse old data array for index map\n t, i, j;\n\n // seek forward to first removal\n for (i=0; !map[i] && i k || m > width) {\n width = Math.max(m, width);\n curr = array(n, width, curr);\n prev = array(n, width);\n }\n }\n };\n}\n\nfunction lengthen(array, length, copy) {\n if (array.length >= length) return array;\n copy = copy || new array.constructor(length);\n copy.set(array);\n return copy;\n}\n\nfunction array(n, m, array) {\n var copy = (m < 0x101 ? array8 : m < 0x10001 ? array16 : array32)(n);\n if (array) copy.set(array);\n return copy;\n}\n","export default function(index, i, query) {\n var bit = (1 << i);\n\n return {\n one: bit,\n zero: ~bit,\n range: query.slice(),\n bisect: index.bisect,\n index: index.index,\n size: index.size,\n\n onAdd: function(added, curr) {\n var dim = this,\n range = dim.bisect(dim.range, added.value),\n idx = added.index,\n lo = range[0],\n hi = range[1],\n n1 = idx.length, i;\n\n for (i=0; i b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","export default function(source, keys) {\n return Array.from(keys, key => source[key]);\n}\n","import {array32} from './arrays';\nimport {bisectLeft, bisectRight, permute} from 'd3-array';\n\n/**\n * Maintains a list of values, sorted by key.\n */\nexport default function SortedIndex() {\n var index = array32(0),\n value = [],\n size = 0;\n\n function insert(key, data, base) {\n if (!data.length) return [];\n\n var n0 = size,\n n1 = data.length,\n addv = Array(n1),\n addi = array32(n1),\n oldv, oldi, i;\n\n for (i=0; i 0) for (i=0; i remove\n var n = size,\n idx, i, j;\n\n // seek forward to first removal\n for (i=0; !map[index[i]] && i y ? 1 : 0;\n });\n return permute(values, index);\n}\n\nfunction merge(base, value0, index0, n0, value1, index1, n1, value, index) {\n var i0 = 0, i1 = 0, i;\n\n for (i=0; i0 < n0 && i1 < n1; ++i) {\n if (value0[i0] < value1[i1]) {\n value[i] = value0[i0];\n index[i] = index0[i0++];\n } else {\n value[i] = value1[i1];\n index[i] = index1[i1++] + base;\n }\n }\n\n for (; i0 < n0; ++i0, ++i) {\n value[i] = value0[i0];\n index[i] = index0[i0];\n }\n\n for (; i1 < n1; ++i1, ++i) {\n value[i] = value1[i1];\n index[i] = index1[i1] + base;\n }\n}\n","import Bitmaps from './Bitmaps';\nimport Dimension from './Dimension';\nimport SortedIndex from './SortedIndex';\nimport {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * An indexed multi-dimensional filter.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - An array of dimension accessors to filter.\n * @param {Array} params.query - An array of per-dimension range queries.\n */\nexport default function CrossFilter(params) {\n Transform.call(this, Bitmaps(), params);\n this._indices = null;\n this._dims = null;\n}\n\nCrossFilter.Definition = {\n \"type\": \"CrossFilter\",\n \"metadata\": {},\n \"params\": [\n { \"name\": \"fields\", \"type\": \"field\", \"array\": true, \"required\": true },\n { \"name\": \"query\", \"type\": \"array\", \"array\": true, \"required\": true,\n \"content\": {\"type\": \"number\", \"array\": true, \"length\": 2} }\n ]\n};\n\nvar prototype = inherits(CrossFilter, Transform);\n\nprototype.transform = function(_, pulse) {\n if (!this._dims) {\n return this.init(_, pulse);\n } else {\n var init = _.modified('fields')\n || _.fields.some(function(f) { return pulse.modified(f.fields); });\n\n return init\n ? this.reinit(_, pulse)\n : this.eval(_, pulse);\n }\n};\n\nprototype.init = function(_, pulse) {\n var fields = _.fields,\n query = _.query,\n indices = this._indices = {},\n dims = this._dims = [],\n m = query.length,\n i = 0, key, index;\n\n // instantiate indices and dimensions\n for (; i lo0) {\n for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n }\n\n // Fast incremental update based on previous hi index.\n if (hi1 > hi0) {\n for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n } else if (hi1 < hi0) {\n for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n }\n\n dim.range = query.slice();\n};\n\nprototype.incrementOne = function(dim, query, add, rem) {\n var bits = this.value,\n curr = bits.curr(),\n index = dim.index(),\n old = dim.bisect(dim.range),\n range = dim.bisect(query),\n lo1 = range[0],\n hi1 = range[1],\n lo0 = old[0],\n hi0 = old[1],\n one = dim.one,\n i, j, k;\n\n // Fast incremental update based on previous lo index.\n if (lo1 < lo0) {\n for (i = lo1, j = Math.min(lo0, hi1); i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n add.push(k);\n }\n } else if (lo1 > lo0) {\n for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n rem.push(k);\n }\n }\n\n // Fast incremental update based on previous hi index.\n if (hi1 > hi0) {\n for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n add.push(k);\n }\n } else if (hi1 < hi0) {\n for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n rem.push(k);\n }\n }\n\n dim.range = query.slice();\n};\n","import {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Selectively filters tuples by resolving against a filter bitmap.\n * Useful for processing the output of a cross-filter transform.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.ignore - A bit mask indicating which filters to ignore.\n * @param {object} params.filter - The per-tuple filter bitmaps. Typically this\n * parameter value is a reference to a {@link CrossFilter} transform.\n */\nexport default function ResolveFilter(params) {\n Transform.call(this, null, params);\n}\n\nResolveFilter.Definition = {\n \"type\": \"ResolveFilter\",\n \"metadata\": {},\n \"params\": [\n { \"name\": \"ignore\", \"type\": \"number\", \"required\": true,\n \"description\": \"A bit mask indicating which filters to ignore.\" },\n { \"name\": \"filter\", \"type\": \"object\", \"required\": true,\n \"description\": \"Per-tuple filter bitmaps from a CrossFilter transform.\" }\n ]\n};\n\nvar prototype = inherits(ResolveFilter, Transform);\n\nprototype.transform = function(_, pulse) {\n var ignore = ~(_.ignore || 0), // bit mask where zeros -> dims to ignore\n bitmap = _.filter,\n mask = bitmap.mask;\n\n // exit early if no relevant filter changes\n if ((mask & ignore) === 0) return pulse.StopPropagation;\n\n var output = pulse.fork(pulse.ALL),\n data = bitmap.data(),\n curr = bitmap.curr(),\n prev = bitmap.prev(),\n pass = function(k) {\n return !(curr[k] & ignore) ? data[k] : null;\n };\n\n // propagate all mod tuples that pass the filter\n output.filter(output.MOD, pass);\n\n // determine add & rem tuples via filter functions\n // for efficiency, we do *not* populate new arrays,\n // instead we add filter functions applied downstream\n\n if (!(mask & (mask-1))) { // only one filter changed\n output.filter(output.ADD, pass);\n output.filter(output.REM, function(k) {\n return (curr[k] & ignore) === mask ? data[k] : null;\n });\n\n } else { // multiple filters changed\n output.filter(output.ADD, function(k) {\n var c = curr[k] & ignore,\n f = !c && (c ^ (prev[k] & ignore));\n return f ? data[k] : null;\n });\n output.filter(output.REM, function(k) {\n var c = curr[k] & ignore,\n f = c && !(c ^ (c ^ (prev[k] & ignore)));\n return f ? data[k] : null;\n });\n }\n\n // add filter to source data in case of reflow...\n return output.filter(output.SOURCE, function(t) { return pass(t._index); });\n};\n","import {isString} from 'vega-util';\n\nvar Default = 'default';\n\nexport default function(view) {\n var cursor = view._signals.cursor;\n\n // add cursor signal to dataflow, if needed\n if (!cursor) {\n view._signals.cursor = (cursor = view.add({user: Default, item: null}));\n }\n\n // evaluate cursor on each mousemove event\n view.on(view.events('view', 'mousemove'), cursor,\n function(_, event) {\n var value = cursor.value,\n user = value ? (isString(value) ? value : value.user) : Default,\n item = event.item && event.item.cursor || null;\n\n return (value && user === value.user && item == value.item) ? value\n : {user: user, item: item};\n }\n );\n\n // when cursor signal updates, set visible cursor\n view.add(null, function(_) {\n var user = _.cursor,\n item = this.value;\n\n if (!isString(user)) {\n item = user.item;\n user = user.user;\n }\n\n setCursor(user && user !== Default ? user : (item || user));\n\n return item;\n }, {cursor: cursor});\n}\n\nfunction setCursor(cursor) {\n // set cursor on document body\n // this ensures cursor applies even if dragging out of view\n if (typeof document !== 'undefined' && document.body) {\n document.body.style.cursor = cursor;\n }\n}\n","import {changeset, isChangeSet} from 'vega-dataflow';\nimport {error} from 'vega-util';\n\nexport function dataref(view, name) {\n var data = view._runtime.data;\n if (!data.hasOwnProperty(name)) {\n error('Unrecognized data set: ' + name);\n }\n return data[name];\n}\n\nexport function data(name) {\n return dataref(this, name).values.value;\n}\n\nexport function change(name, changes) {\n if (!isChangeSet(changes)) {\n error('Second argument to changes must be a changeset.');\n }\n var dataset = dataref(this, name);\n dataset.modified = true;\n return this.pulse(dataset.input, changes);\n}\n\nexport function insert(name, _) {\n return change.call(this, name, changeset().insert(_));\n}\n\nexport function remove(name, _) {\n return change.call(this, name, changeset().remove(_));\n}\n","export function width(view) {\n var padding = view.padding();\n return Math.max(0, view._viewWidth + padding.left + padding.right);\n}\n\nexport function height(view) {\n var padding = view.padding();\n return Math.max(0, view._viewHeight + padding.top + padding.bottom);\n}\n\nexport function offset(view) {\n var padding = view.padding(),\n origin = view._origin;\n return [\n padding.left + origin[0],\n padding.top + origin[1]\n ];\n}\n\nexport function resizeRenderer(view) {\n var origin = offset(view),\n w = width(view),\n h = height(view);\n\n view._renderer.background(view._background);\n view._renderer.resize(w, h, origin);\n view._handler.origin(origin);\n\n view._resizeListeners.forEach(function(handler) {\n try {\n handler(w, h);\n } catch (error) {\n view.error(error);\n }\n });\n}\n","import {offset} from './render-size';\nimport {constant, isString} from 'vega-util';\nimport {point} from 'vega-scenegraph';\n\n/**\n * Extend an event with additional view-specific methods.\n * Adds a new property ('vega') to an event that provides a number\n * of methods for querying information about the current interaction.\n * The vega object provides the following methods:\n * view - Returns the backing View instance.\n * item - Returns the currently active scenegraph item (if any).\n * group - Returns the currently active scenegraph group (if any).\n * This method accepts a single string-typed argument indicating the name\n * of the desired parent group. The scenegraph will be traversed from\n * the item up towards the root to search for a matching group. If no\n * argument is provided the enclosing group for the active item is\n * returned, unless the item it itself a group, in which case it is\n * returned directly.\n * xy - Returns a two-element array containing the x and y coordinates for\n * mouse or touch events. For touch events, this is based on the first\n * elements in the changedTouches array. This method accepts a single\n * argument: either an item instance or mark name that should serve as\n * the reference coordinate system. If no argument is provided the\n * top-level view coordinate system is assumed.\n * x - Returns the current x-coordinate, accepts the same arguments as xy.\n * y - Returns the current y-coordinate, accepts the same arguments as xy.\n * @param {Event} event - The input event to extend.\n * @param {Item} item - The currently active scenegraph item (if any).\n * @return {Event} - The extended input event.\n */\nexport default function(view, event, item) {\n var r = view._renderer,\n el = r && r.canvas(),\n p, e, translate;\n\n if (el) {\n translate = offset(view);\n e = event.changedTouches ? event.changedTouches[0] : event;\n p = point(e, el);\n p[0] -= translate[0];\n p[1] -= translate[1];\n }\n\n event.dataflow = view;\n event.item = item;\n event.vega = extension(view, item, p);\n return event;\n}\n\nfunction extension(view, item, point) {\n var itemGroup = item\n ? item.mark.marktype === 'group' ? item : item.mark.group\n : null;\n\n function group(name) {\n var g = itemGroup, i;\n if (name) for (i = item; i; i = i.mark.group) {\n if (i.mark.name === name) { g = i; break; }\n }\n return g && g.mark && g.mark.interactive ? g : {};\n }\n\n function xy(item) {\n if (!item) return point;\n if (isString(item)) item = group(item);\n\n var p = point.slice();\n while (item) {\n p[0] -= item.x || 0;\n p[1] -= item.y || 0;\n item = item.mark && item.mark.group;\n }\n return p;\n }\n\n return {\n view: constant(view),\n item: constant(item || {}),\n group: group,\n xy: xy,\n x: function(item) { return xy(item)[0]; },\n y: function(item) { return xy(item)[1]; }\n };\n}\n","import eventExtend from './events-extend';\nimport {EventStream} from 'vega-dataflow';\nimport {extend, isArray, toSet} from 'vega-util';\n\nvar VIEW = 'view',\n TIMER = 'timer',\n WINDOW = 'window',\n NO_TRAP = {trap: false};\n\n/**\n * Initialize event handling configuration.\n * @param {object} config - The configuration settings.\n * @return {object}\n */\nexport function initializeEventConfig(config) {\n config = extend({}, config);\n\n var def = config.defaults;\n if (def) {\n if (isArray(def.prevent)) {\n def.prevent = toSet(def.prevent);\n }\n if (isArray(def.allow)) {\n def.allow = toSet(def.allow);\n }\n }\n\n return config;\n}\n\nfunction prevent(view, type) {\n var def = view._eventConfig.defaults,\n prevent = def && def.prevent,\n allow = def && def.allow;\n\n return prevent === false || allow === true ? false\n : prevent === true || allow === false ? true\n : prevent ? prevent[type]\n : allow ? !allow[type]\n : view.preventDefault();\n}\n\n/**\n * Create a new event stream from an event source.\n * @param {object} source - The event source to monitor.\n * @param {string} type - The event type.\n * @param {function(object): boolean} [filter] - Event filter function.\n * @return {EventStream}\n */\nexport function events(source, type, filter) {\n var view = this,\n s = new EventStream(filter),\n send = function(e, item) {\n view.runAsync(null, () => {\n if (source === VIEW && prevent(view, type)) {\n e.preventDefault();\n }\n s.receive(eventExtend(view, e, item));\n });\n },\n sources;\n\n if (source === TIMER) {\n view.timer(send, type);\n }\n\n else if (source === VIEW) {\n // send traps errors, so use {trap: false} option\n view.addEventListener(type, send, NO_TRAP);\n }\n\n else {\n if (source === WINDOW) {\n if (typeof window !== 'undefined') sources = [window];\n } else if (typeof document !== 'undefined') {\n sources = document.querySelectorAll(source);\n }\n\n if (!sources) {\n view.warn('Can not resolve event source: ' + source);\n } else {\n for (var i=0, n=sources.length; i= 0) {\n timers[n].stop();\n }\n\n n = listeners.length;\n while (--n >= 0) {\n e = listeners[n];\n m = e.sources.length;\n while (--m >= 0) {\n e.sources[m].removeEventListener(e.type, e.handler);\n }\n }\n\n if (tooltip) {\n tooltip.call(this, this._handler, null, null, null);\n }\n\n return this;\n}\n","export default function(tag, attr, text) {\n var el = document.createElement(tag);\n for (var key in attr) el.setAttribute(key, attr[key]);\n if (text != null) el.textContent = text;\n return el;\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","import element from './element';\nimport {debounce} from 'vega-util';\nimport {tickStep} from 'd3-array';\n\nvar BindClass = 'vega-bind',\n NameClass = 'vega-bind-name',\n RadioClass = 'vega-bind-radio',\n OptionClass = 'vega-option-';\n\n/**\n * Bind a signal to an external HTML input element. The resulting two-way\n * binding will propagate input changes to signals, and propagate signal\n * changes to the input element state. If this view instance has no parent\n * element, we assume the view is headless and no bindings are created.\n * @param {Element|string} el - The parent DOM element to which the input\n * element should be appended as a child. If string-valued, this argument\n * will be treated as a CSS selector. If null or undefined, the parent\n * element of this view will be used as the element.\n * @param {object} param - The binding parameters which specify the signal\n * to bind to, the input element type, and type-specific configuration.\n * @return {View} - This view instance.\n */\nexport default function(view, el, binding) {\n if (!el) return;\n\n var param = binding.param,\n bind = binding.state;\n\n if (!bind) {\n bind = binding.state = {\n elements: null,\n active: false,\n set: null,\n update: function(value) {\n if (value !== view.signal(param.signal)) {\n view.runAsync(null, function() {\n bind.source = true;\n view.signal(param.signal, value);\n });\n }\n }\n };\n if (param.debounce) {\n bind.update = debounce(param.debounce, bind.update);\n }\n }\n\n generate(bind, el, param, view.signal(param.signal));\n\n if (!bind.active) {\n view.on(view._signals[param.signal], null, function() {\n bind.source\n ? (bind.source = false)\n : bind.set(view.signal(param.signal));\n });\n bind.active = true;\n }\n\n return bind;\n}\n\n/**\n * Generate an HTML input form element and bind it to a signal.\n */\nfunction generate(bind, el, param, value) {\n var div = element('div', {'class': BindClass});\n\n div.appendChild(element('span',\n {'class': NameClass},\n (param.name || param.signal)\n ));\n\n el.appendChild(div);\n\n var input = form;\n switch (param.input) {\n case 'checkbox': input = checkbox; break;\n case 'select': input = select; break;\n case 'radio': input = radio; break;\n case 'range': input = range; break;\n }\n\n input(bind, div, param, value);\n}\n\n/**\n * Generates an arbitrary input form element.\n * The input type is controlled via user-provided parameters.\n */\nfunction form(bind, el, param, value) {\n var node = element('input');\n\n for (var key in param) {\n if (key !== 'signal' && key !== 'element') {\n node.setAttribute(key === 'input' ? 'type' : key, param[key]);\n }\n }\n node.setAttribute('name', param.signal);\n node.value = value;\n\n el.appendChild(node);\n\n node.addEventListener('input', function() {\n bind.update(node.value);\n });\n\n bind.elements = [node];\n bind.set = function(value) { node.value = value; };\n}\n\n/**\n * Generates a checkbox input element.\n */\nfunction checkbox(bind, el, param, value) {\n var attr = {type: 'checkbox', name: param.signal};\n if (value) attr.checked = true;\n var node = element('input', attr);\n\n el.appendChild(node);\n\n node.addEventListener('change', function() {\n bind.update(node.checked);\n });\n\n bind.elements = [node];\n bind.set = function(value) { node.checked = !!value || null; }\n}\n\n/**\n * Generates a selection list input element.\n */\nfunction select(bind, el, param, value) {\n var node = element('select', {name: param.signal});\n\n param.options.forEach(function(option) {\n var attr = {value: option};\n if (valuesEqual(option, value)) attr.selected = true;\n node.appendChild(element('option', attr, option+''));\n });\n\n el.appendChild(node);\n\n node.addEventListener('change', function() {\n bind.update(param.options[node.selectedIndex]);\n });\n\n bind.elements = [node];\n bind.set = function(value) {\n for (var i=0, n=param.options.length; i\n Copyright (C) 2013 Thaddee Tyl \n Copyright (C) 2013 Mathias Bynens \n Copyright (C) 2012 Ariya Hidayat \n Copyright (C) 2012 Mathias Bynens \n Copyright (C) 2012 Joost-Wim Boekesteijn \n Copyright (C) 2012 Kris Kowal \n Copyright (C) 2012 Yusuke Suzuki \n Copyright (C) 2012 Arpad Borsos \n Copyright (C) 2011 Ariya Hidayat \n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\nimport ASTNode from './ast';\n\nvar TokenName,\n source,\n index,\n length,\n lookahead;\n\nvar TokenBooleanLiteral = 1,\n TokenEOF = 2,\n TokenIdentifier = 3,\n TokenKeyword = 4,\n TokenNullLiteral = 5,\n TokenNumericLiteral = 6,\n TokenPunctuator = 7,\n TokenStringLiteral = 8,\n TokenRegularExpression = 9;\n\nTokenName = {};\nTokenName[TokenBooleanLiteral] = 'Boolean';\nTokenName[TokenEOF] = '';\nTokenName[TokenIdentifier] = 'Identifier';\nTokenName[TokenKeyword] = 'Keyword';\nTokenName[TokenNullLiteral] = 'Null';\nTokenName[TokenNumericLiteral] = 'Numeric';\nTokenName[TokenPunctuator] = 'Punctuator';\nTokenName[TokenStringLiteral] = 'String';\nTokenName[TokenRegularExpression] = 'RegularExpression';\n\nvar SyntaxArrayExpression = 'ArrayExpression',\n SyntaxBinaryExpression = 'BinaryExpression',\n SyntaxCallExpression = 'CallExpression',\n SyntaxConditionalExpression = 'ConditionalExpression',\n SyntaxIdentifier = 'Identifier',\n SyntaxLiteral = 'Literal',\n SyntaxLogicalExpression = 'LogicalExpression',\n SyntaxMemberExpression = 'MemberExpression',\n SyntaxObjectExpression = 'ObjectExpression',\n SyntaxProperty = 'Property',\n SyntaxUnaryExpression = 'UnaryExpression';\n\n// Error messages should be identical to V8.\nvar MessageUnexpectedToken = 'Unexpected token %0',\n MessageUnexpectedNumber = 'Unexpected number',\n MessageUnexpectedString = 'Unexpected string',\n MessageUnexpectedIdentifier = 'Unexpected identifier',\n MessageUnexpectedReserved = 'Unexpected reserved word',\n MessageUnexpectedEOS = 'Unexpected end of input',\n MessageInvalidRegExp = 'Invalid regular expression',\n MessageUnterminatedRegExp = 'Invalid regular expression: missing /',\n MessageStrictOctalLiteral = 'Octal literals are not allowed in strict mode.',\n MessageStrictDuplicateProperty = 'Duplicate data property in object literal not allowed in strict mode';\n\nvar ILLEGAL = 'ILLEGAL',\n DISABLED = 'Disabled.';\n\n// See also tools/generate-unicode-regex.py.\n var RegexNonAsciiIdentifierStart = new RegExp(\"[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B2\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]\"),\n RegexNonAsciiIdentifierPart = new RegExp(\"[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0300-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u0483-\\\\u0487\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0610-\\\\u061A\\\\u0620-\\\\u0669\\\\u066E-\\\\u06D3\\\\u06D5-\\\\u06DC\\\\u06DF-\\\\u06E8\\\\u06EA-\\\\u06FC\\\\u06FF\\\\u0710-\\\\u074A\\\\u074D-\\\\u07B1\\\\u07C0-\\\\u07F5\\\\u07FA\\\\u0800-\\\\u082D\\\\u0840-\\\\u085B\\\\u08A0-\\\\u08B2\\\\u08E4-\\\\u0963\\\\u0966-\\\\u096F\\\\u0971-\\\\u0983\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BC-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CE\\\\u09D7\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E3\\\\u09E6-\\\\u09F1\\\\u0A01-\\\\u0A03\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A66-\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABC-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AD0\\\\u0AE0-\\\\u0AE3\\\\u0AE6-\\\\u0AEF\\\\u0B01-\\\\u0B03\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3C-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B56\\\\u0B57\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B63\\\\u0B66-\\\\u0B6F\\\\u0B71\\\\u0B82\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD0\\\\u0BD7\\\\u0BE6-\\\\u0BEF\\\\u0C00-\\\\u0C03\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C58\\\\u0C59\\\\u0C60-\\\\u0C63\\\\u0C66-\\\\u0C6F\\\\u0C81-\\\\u0C83\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBC-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CDE\\\\u0CE0-\\\\u0CE3\\\\u0CE6-\\\\u0CEF\\\\u0CF1\\\\u0CF2\\\\u0D01-\\\\u0D03\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4E\\\\u0D57\\\\u0D60-\\\\u0D63\\\\u0D66-\\\\u0D6F\\\\u0D7A-\\\\u0D7F\\\\u0D82\\\\u0D83\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DE6-\\\\u0DEF\\\\u0DF2\\\\u0DF3\\\\u0E01-\\\\u0E3A\\\\u0E40-\\\\u0E4E\\\\u0E50-\\\\u0E59\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB9\\\\u0EBB-\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EC8-\\\\u0ECD\\\\u0ED0-\\\\u0ED9\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F18\\\\u0F19\\\\u0F20-\\\\u0F29\\\\u0F35\\\\u0F37\\\\u0F39\\\\u0F3E-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F71-\\\\u0F84\\\\u0F86-\\\\u0F97\\\\u0F99-\\\\u0FBC\\\\u0FC6\\\\u1000-\\\\u1049\\\\u1050-\\\\u109D\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u135D-\\\\u135F\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1714\\\\u1720-\\\\u1734\\\\u1740-\\\\u1753\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1772\\\\u1773\\\\u1780-\\\\u17D3\\\\u17D7\\\\u17DC\\\\u17DD\\\\u17E0-\\\\u17E9\\\\u180B-\\\\u180D\\\\u1810-\\\\u1819\\\\u1820-\\\\u1877\\\\u1880-\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1946-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19B0-\\\\u19C9\\\\u19D0-\\\\u19D9\\\\u1A00-\\\\u1A1B\\\\u1A20-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F-\\\\u1A89\\\\u1A90-\\\\u1A99\\\\u1AA7\\\\u1AB0-\\\\u1ABD\\\\u1B00-\\\\u1B4B\\\\u1B50-\\\\u1B59\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1BF3\\\\u1C00-\\\\u1C37\\\\u1C40-\\\\u1C49\\\\u1C4D-\\\\u1C7D\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CF6\\\\u1CF8\\\\u1CF9\\\\u1D00-\\\\u1DF5\\\\u1DFC-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u200C\\\\u200D\\\\u203F\\\\u2040\\\\u2054\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u20D0-\\\\u20DC\\\\u20E1\\\\u20E5-\\\\u20F0\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D7F-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2DE0-\\\\u2DFF\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u302F\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u3099\\\\u309A\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA62B\\\\uA640-\\\\uA66F\\\\uA674-\\\\uA67D\\\\uA67F-\\\\uA69D\\\\uA69F-\\\\uA6F1\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA827\\\\uA840-\\\\uA873\\\\uA880-\\\\uA8C4\\\\uA8D0-\\\\uA8D9\\\\uA8E0-\\\\uA8F7\\\\uA8FB\\\\uA900-\\\\uA92D\\\\uA930-\\\\uA953\\\\uA960-\\\\uA97C\\\\uA980-\\\\uA9C0\\\\uA9CF-\\\\uA9D9\\\\uA9E0-\\\\uA9FE\\\\uAA00-\\\\uAA36\\\\uAA40-\\\\uAA4D\\\\uAA50-\\\\uAA59\\\\uAA60-\\\\uAA76\\\\uAA7A-\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEF\\\\uAAF2-\\\\uAAF6\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABEA\\\\uABEC\\\\uABED\\\\uABF0-\\\\uABF9\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE00-\\\\uFE0F\\\\uFE20-\\\\uFE2D\\\\uFE33\\\\uFE34\\\\uFE4D-\\\\uFE4F\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF10-\\\\uFF19\\\\uFF21-\\\\uFF3A\\\\uFF3F\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]\");\n\n// Ensure the condition is true, otherwise throw an error.\n// This is only to have a better contract semantic, i.e. another safety net\n// to catch a logic error. The condition shall be fulfilled in normal case.\n// Do NOT use this to enforce a certain condition on any user input.\n\nfunction assert(condition, message) {\n /* istanbul ignore next */\n if (!condition) {\n throw new Error('ASSERT: ' + message);\n }\n}\n\nfunction isDecimalDigit(ch) {\n return (ch >= 0x30 && ch <= 0x39); // 0..9\n}\n\nfunction isHexDigit(ch) {\n return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n}\n\nfunction isOctalDigit(ch) {\n return '01234567'.indexOf(ch) >= 0;\n}\n\n// 7.2 White Space\n\nfunction isWhiteSpace(ch) {\n return (ch === 0x20) || (ch === 0x09) || (ch === 0x0B) || (ch === 0x0C) || (ch === 0xA0) ||\n (ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0);\n}\n\n// 7.3 Line Terminators\n\nfunction isLineTerminator(ch) {\n return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029);\n}\n\n// 7.6 Identifier Names and Identifiers\n\nfunction isIdentifierStart(ch) {\n return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore)\n (ch >= 0x41 && ch <= 0x5A) || // A..Z\n (ch >= 0x61 && ch <= 0x7A) || // a..z\n (ch === 0x5C) || // \\ (backslash)\n ((ch >= 0x80) && RegexNonAsciiIdentifierStart.test(String.fromCharCode(ch)));\n}\n\nfunction isIdentifierPart(ch) {\n return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore)\n (ch >= 0x41 && ch <= 0x5A) || // A..Z\n (ch >= 0x61 && ch <= 0x7A) || // a..z\n (ch >= 0x30 && ch <= 0x39) || // 0..9\n (ch === 0x5C) || // \\ (backslash)\n ((ch >= 0x80) && RegexNonAsciiIdentifierPart.test(String.fromCharCode(ch)));\n}\n\n// 7.6.1.1 Keywords\n\nvar keywords = {\n 'if':1, 'in':1, 'do':1,\n 'var':1, 'for':1, 'new':1, 'try':1, 'let':1,\n 'this':1, 'else':1, 'case':1, 'void':1, 'with':1, 'enum':1,\n 'while':1, 'break':1, 'catch':1, 'throw':1, 'const':1, 'yield':1, 'class':1, 'super':1,\n 'return':1, 'typeof':1, 'delete':1, 'switch':1, 'export':1, 'import':1, 'public':1, 'static':1,\n 'default':1, 'finally':1, 'extends':1, 'package':1, 'private':1,\n 'function':1, 'continue':1, 'debugger':1,\n 'interface':1, 'protected':1,\n 'instanceof':1, 'implements':1\n};\n\nfunction skipComment() {\n var ch;\n\n while (index < length) {\n ch = source.charCodeAt(index);\n\n if (isWhiteSpace(ch) || isLineTerminator(ch)) {\n ++index;\n } else {\n break;\n }\n }\n}\n\nfunction scanHexEscape(prefix) {\n var i, len, ch, code = 0;\n\n len = (prefix === 'u') ? 4 : 2;\n for (i = 0; i < len; ++i) {\n if (index < length && isHexDigit(source[index])) {\n ch = source[index++];\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n return String.fromCharCode(code);\n}\n\nfunction scanUnicodeCodePointEscape() {\n var ch, code, cu1, cu2;\n\n ch = source[index];\n code = 0;\n\n // At least, one hex digit is required.\n if (ch === '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n while (index < length) {\n ch = source[index++];\n if (!isHexDigit(ch)) {\n break;\n }\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n }\n\n if (code > 0x10FFFF || ch !== '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n // UTF-16 Encoding\n if (code <= 0xFFFF) {\n return String.fromCharCode(code);\n }\n cu1 = ((code - 0x10000) >> 10) + 0xD800;\n cu2 = ((code - 0x10000) & 1023) + 0xDC00;\n return String.fromCharCode(cu1, cu2);\n}\n\nfunction getEscapedIdentifier() {\n var ch, id;\n\n ch = source.charCodeAt(index++);\n id = String.fromCharCode(ch);\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (ch === 0x5C) {\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n ++index;\n ch = scanHexEscape('u');\n if (!ch || ch === '\\\\' || !isIdentifierStart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n id = ch;\n }\n\n while (index < length) {\n ch = source.charCodeAt(index);\n if (!isIdentifierPart(ch)) {\n break;\n }\n ++index;\n id += String.fromCharCode(ch);\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (ch === 0x5C) {\n id = id.substr(0, id.length - 1);\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n ++index;\n ch = scanHexEscape('u');\n if (!ch || ch === '\\\\' || !isIdentifierPart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n id += ch;\n }\n }\n\n return id;\n}\n\nfunction getIdentifier() {\n var start, ch;\n\n start = index++;\n while (index < length) {\n ch = source.charCodeAt(index);\n if (ch === 0x5C) {\n // Blackslash (U+005C) marks Unicode escape sequence.\n index = start;\n return getEscapedIdentifier();\n }\n if (isIdentifierPart(ch)) {\n ++index;\n } else {\n break;\n }\n }\n\n return source.slice(start, index);\n}\n\nfunction scanIdentifier() {\n var start, id, type;\n\n start = index;\n\n // Backslash (U+005C) starts an escaped character.\n id = (source.charCodeAt(index) === 0x5C) ? getEscapedIdentifier() : getIdentifier();\n\n // There is no keyword or literal with only one character.\n // Thus, it must be an identifier.\n if (id.length === 1) {\n type = TokenIdentifier;\n } else if (keywords.hasOwnProperty(id)) {\n type = TokenKeyword;\n } else if (id === 'null') {\n type = TokenNullLiteral;\n } else if (id === 'true' || id === 'false') {\n type = TokenBooleanLiteral;\n } else {\n type = TokenIdentifier;\n }\n\n return {\n type: type,\n value: id,\n start: start,\n end: index\n };\n}\n\n// 7.7 Punctuators\n\nfunction scanPunctuator() {\n var start = index,\n code = source.charCodeAt(index),\n code2,\n ch1 = source[index],\n ch2,\n ch3,\n ch4;\n\n switch (code) {\n\n // Check for most common single-character punctuators.\n case 0x2E: // . dot\n case 0x28: // ( open bracket\n case 0x29: // ) close bracket\n case 0x3B: // ; semicolon\n case 0x2C: // , comma\n case 0x7B: // { open curly brace\n case 0x7D: // } close curly brace\n case 0x5B: // [\n case 0x5D: // ]\n case 0x3A: // :\n case 0x3F: // ?\n case 0x7E: // ~\n ++index;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code),\n start: start,\n end: index\n };\n\n default:\n code2 = source.charCodeAt(index + 1);\n\n // '=' (U+003D) marks an assignment or comparison operator.\n if (code2 === 0x3D) {\n switch (code) {\n case 0x2B: // +\n case 0x2D: // -\n case 0x2F: // /\n case 0x3C: // <\n case 0x3E: // >\n case 0x5E: // ^\n case 0x7C: // |\n case 0x25: // %\n case 0x26: // &\n case 0x2A: // *\n index += 2;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code) + String.fromCharCode(code2),\n start: start,\n end: index\n };\n\n case 0x21: // !\n case 0x3D: // =\n index += 2;\n\n // !== and ===\n if (source.charCodeAt(index) === 0x3D) {\n ++index;\n }\n return {\n type: TokenPunctuator,\n value: source.slice(start, index),\n start: start,\n end: index\n };\n }\n }\n }\n\n // 4-character punctuator: >>>=\n\n ch4 = source.substr(index, 4);\n\n if (ch4 === '>>>=') {\n index += 4;\n return {\n type: TokenPunctuator,\n value: ch4,\n start: start,\n end: index\n };\n }\n\n // 3-character punctuators: === !== >>> <<= >>=\n\n ch3 = ch4.substr(0, 3);\n\n if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') {\n index += 3;\n return {\n type: TokenPunctuator,\n value: ch3,\n start: start,\n end: index\n };\n }\n\n // Other 2-character punctuators: ++ -- << >> && ||\n ch2 = ch3.substr(0, 2);\n\n if ((ch1 === ch2[1] && ('+-<>&|'.indexOf(ch1) >= 0)) || ch2 === '=>') {\n index += 2;\n return {\n type: TokenPunctuator,\n value: ch2,\n start: start,\n end: index\n };\n }\n\n // 1-character punctuators: < > = ! + - * % & | ^ /\n\n if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n ++index;\n return {\n type: TokenPunctuator,\n value: ch1,\n start: start,\n end: index\n };\n }\n\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n}\n\n// 7.8.3 Numeric Literals\n\nfunction scanHexLiteral(start) {\n var number = '';\n\n while (index < length) {\n if (!isHexDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n\n if (number.length === 0) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseInt('0x' + number, 16),\n start: start,\n end: index\n };\n}\n\nfunction scanOctalLiteral(start) {\n var number = '0' + source[index++];\n while (index < length) {\n if (!isOctalDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n\n if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseInt(number, 8),\n octal: true,\n start: start,\n end: index\n };\n}\n\nfunction scanNumericLiteral() {\n var number, start, ch;\n\n ch = source[index];\n assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'),\n 'Numeric literal must start with a decimal digit or a decimal point');\n\n start = index;\n number = '';\n if (ch !== '.') {\n number = source[index++];\n ch = source[index];\n\n // Hex number starts with '0x'.\n // Octal number starts with '0'.\n if (number === '0') {\n if (ch === 'x' || ch === 'X') {\n ++index;\n return scanHexLiteral(start);\n }\n if (isOctalDigit(ch)) {\n return scanOctalLiteral(start);\n }\n\n // decimal number starts with '0' such as '09' is illegal.\n if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === '.') {\n number += source[index++];\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === 'e' || ch === 'E') {\n number += source[index++];\n\n ch = source[index];\n if (ch === '+' || ch === '-') {\n number += source[index++];\n }\n if (isDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseFloat(number),\n start: start,\n end: index\n };\n}\n\n// 7.8.4 String Literals\n\nfunction scanStringLiteral() {\n var str = '',\n quote, start, ch, code, octal = false;\n\n quote = source[index];\n assert((quote === '\\'' || quote === '\"'),\n 'String literal must starts with a quote');\n\n start = index;\n ++index;\n\n while (index < length) {\n ch = source[index++];\n\n if (ch === quote) {\n quote = '';\n break;\n } else if (ch === '\\\\') {\n ch = source[index++];\n if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'u':\n case 'x':\n if (source[index] === '{') {\n ++index;\n str += scanUnicodeCodePointEscape();\n } else {\n str += scanHexEscape(ch);\n }\n break;\n case 'n':\n str += '\\n';\n break;\n case 'r':\n str += '\\r';\n break;\n case 't':\n str += '\\t';\n break;\n case 'b':\n str += '\\b';\n break;\n case 'f':\n str += '\\f';\n break;\n case 'v':\n str += '\\x0B';\n break;\n\n default:\n if (isOctalDigit(ch)) {\n code = '01234567'.indexOf(ch);\n\n // \\0 is not octal escape sequence\n if (code !== 0) {\n octal = true;\n }\n\n if (index < length && isOctalDigit(source[index])) {\n octal = true;\n code = code * 8 + '01234567'.indexOf(source[index++]);\n\n // 3 digits are only allowed when string starts\n // with 0, 1, 2, 3\n if ('0123'.indexOf(ch) >= 0 &&\n index < length &&\n isOctalDigit(source[index])) {\n code = code * 8 + '01234567'.indexOf(source[index++]);\n }\n }\n str += String.fromCharCode(code);\n } else {\n str += ch;\n }\n break;\n }\n } else {\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n break;\n } else {\n str += ch;\n }\n }\n\n if (quote !== '') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenStringLiteral,\n value: str,\n octal: octal,\n start: start,\n end: index\n };\n}\n\nfunction testRegExp(pattern, flags) {\n var tmp = pattern;\n\n if (flags.indexOf('u') >= 0) {\n // Replace each astral symbol and every Unicode code point\n // escape sequence with a single ASCII symbol to avoid throwing on\n // regular expressions that are only valid in combination with the\n // `/u` flag.\n // Note: replacing with the ASCII symbol `x` might cause false\n // negatives in unlikely scenarios. For example, `[\\u{61}-b]` is a\n // perfectly valid pattern that is equivalent to `[a-b]`, but it\n // would be replaced by `[x-b]` which throws an error.\n tmp = tmp\n .replace(/\\\\u\\{([0-9a-fA-F]+)\\}/g, function($0, $1) {\n if (parseInt($1, 16) <= 0x10FFFF) {\n return 'x';\n }\n throwError({}, MessageInvalidRegExp);\n })\n .replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, 'x');\n }\n\n // First, detect invalid regular expressions.\n try {\n new RegExp(tmp);\n } catch (e) {\n throwError({}, MessageInvalidRegExp);\n }\n\n // Return a regular expression object for this pattern-flag pair, or\n // `null` in case the current environment doesn't support the flags it\n // uses.\n try {\n return new RegExp(pattern, flags);\n } catch (exception) {\n return null;\n }\n}\n\nfunction scanRegExpBody() {\n var ch, str, classMarker, terminated, body;\n\n ch = source[index];\n assert(ch === '/', 'Regular expression literal must start with a slash');\n str = source[index++];\n\n classMarker = false;\n terminated = false;\n while (index < length) {\n ch = source[index++];\n str += ch;\n if (ch === '\\\\') {\n ch = source[index++];\n // ECMA-262 7.8.5\n if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n }\n str += ch;\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n } else if (classMarker) {\n if (ch === ']') {\n classMarker = false;\n }\n } else {\n if (ch === '/') {\n terminated = true;\n break;\n } else if (ch === '[') {\n classMarker = true;\n }\n }\n }\n\n if (!terminated) {\n throwError({}, MessageUnterminatedRegExp);\n }\n\n // Exclude leading and trailing slash.\n body = str.substr(1, str.length - 2);\n return {\n value: body,\n literal: str\n };\n}\n\nfunction scanRegExpFlags() {\n var ch, str, flags;\n\n str = '';\n flags = '';\n while (index < length) {\n ch = source[index];\n if (!isIdentifierPart(ch.charCodeAt(0))) {\n break;\n }\n\n ++index;\n if (ch === '\\\\' && index < length) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n } else {\n flags += ch;\n str += ch;\n }\n }\n\n if (flags.search(/[^gimuy]/g) >= 0) {\n throwError({}, MessageInvalidRegExp, flags);\n }\n\n return {\n value: flags,\n literal: str\n };\n}\n\nfunction scanRegExp() {\n var start, body, flags, value;\n\n lookahead = null;\n skipComment();\n start = index;\n\n body = scanRegExpBody();\n flags = scanRegExpFlags();\n value = testRegExp(body.value, flags.value);\n\n return {\n literal: body.literal + flags.literal,\n value: value,\n regex: {\n pattern: body.value,\n flags: flags.value\n },\n start: start,\n end: index\n };\n}\n\nfunction isIdentifierName(token) {\n return token.type === TokenIdentifier ||\n token.type === TokenKeyword ||\n token.type === TokenBooleanLiteral ||\n token.type === TokenNullLiteral;\n}\n\nfunction advance() {\n var ch;\n\n skipComment();\n\n if (index >= length) {\n return {\n type: TokenEOF,\n start: index,\n end: index\n };\n }\n\n ch = source.charCodeAt(index);\n\n if (isIdentifierStart(ch)) {\n return scanIdentifier();\n }\n\n // Very common: ( and ) and ;\n if (ch === 0x28 || ch === 0x29 || ch === 0x3B) {\n return scanPunctuator();\n }\n\n // String literal starts with single quote (U+0027) or double quote (U+0022).\n if (ch === 0x27 || ch === 0x22) {\n return scanStringLiteral();\n }\n\n\n // Dot (.) U+002E can also start a floating-point number, hence the need\n // to check the next character.\n if (ch === 0x2E) {\n if (isDecimalDigit(source.charCodeAt(index + 1))) {\n return scanNumericLiteral();\n }\n return scanPunctuator();\n }\n\n if (isDecimalDigit(ch)) {\n return scanNumericLiteral();\n }\n\n return scanPunctuator();\n}\n\nfunction lex() {\n var token;\n\n token = lookahead;\n index = token.end;\n\n lookahead = advance();\n\n index = token.end;\n\n return token;\n}\n\nfunction peek() {\n var pos;\n\n pos = index;\n\n lookahead = advance();\n index = pos;\n}\n\nfunction finishArrayExpression(elements) {\n var node = new ASTNode(SyntaxArrayExpression);\n node.elements = elements;\n return node;\n}\n\nfunction finishBinaryExpression(operator, left, right) {\n var node = new ASTNode((operator === '||' || operator === '&&') ? SyntaxLogicalExpression : SyntaxBinaryExpression);\n node.operator = operator;\n node.left = left;\n node.right = right;\n return node;\n}\n\nfunction finishCallExpression(callee, args) {\n var node = new ASTNode(SyntaxCallExpression);\n node.callee = callee;\n node.arguments = args;\n return node;\n}\n\nfunction finishConditionalExpression(test, consequent, alternate) {\n var node = new ASTNode(SyntaxConditionalExpression);\n node.test = test;\n node.consequent = consequent;\n node.alternate = alternate;\n return node;\n}\n\nfunction finishIdentifier(name) {\n var node = new ASTNode(SyntaxIdentifier);\n node.name = name;\n return node;\n}\n\nfunction finishLiteral(token) {\n var node = new ASTNode(SyntaxLiteral);\n node.value = token.value;\n node.raw = source.slice(token.start, token.end);\n if (token.regex) {\n if (node.raw === '//') {\n node.raw = '/(?:)/';\n }\n node.regex = token.regex;\n }\n return node;\n}\n\nfunction finishMemberExpression(accessor, object, property) {\n var node = new ASTNode(SyntaxMemberExpression);\n node.computed = accessor === '[';\n node.object = object;\n node.property = property;\n if (!node.computed) property.member = true;\n return node;\n}\n\nfunction finishObjectExpression(properties) {\n var node = new ASTNode(SyntaxObjectExpression);\n node.properties = properties;\n return node;\n}\n\nfunction finishProperty(kind, key, value) {\n var node = new ASTNode(SyntaxProperty);\n node.key = key;\n node.value = value;\n node.kind = kind;\n return node;\n}\n\nfunction finishUnaryExpression(operator, argument) {\n var node = new ASTNode(SyntaxUnaryExpression);\n node.operator = operator;\n node.argument = argument;\n node.prefix = true;\n return node;\n}\n\n// Throw an exception\n\nfunction throwError(token, messageFormat) {\n var error,\n args = Array.prototype.slice.call(arguments, 2),\n msg = messageFormat.replace(\n /%(\\d)/g,\n function(whole, index) {\n assert(index < args.length, 'Message reference must be in range');\n return args[index];\n }\n );\n\n\n error = new Error(msg);\n error.index = index;\n error.description = msg;\n throw error;\n}\n\n// Throw an exception because of the token.\n\nfunction throwUnexpected(token) {\n if (token.type === TokenEOF) {\n throwError(token, MessageUnexpectedEOS);\n }\n\n if (token.type === TokenNumericLiteral) {\n throwError(token, MessageUnexpectedNumber);\n }\n\n if (token.type === TokenStringLiteral) {\n throwError(token, MessageUnexpectedString);\n }\n\n if (token.type === TokenIdentifier) {\n throwError(token, MessageUnexpectedIdentifier);\n }\n\n if (token.type === TokenKeyword) {\n throwError(token, MessageUnexpectedReserved);\n }\n\n // BooleanLiteral, NullLiteral, or Punctuator.\n throwError(token, MessageUnexpectedToken, token.value);\n}\n\n// Expect the next token to match the specified punctuator.\n// If not, an exception will be thrown.\n\nfunction expect(value) {\n var token = lex();\n if (token.type !== TokenPunctuator || token.value !== value) {\n throwUnexpected(token);\n }\n}\n\n// Return true if the next token matches the specified punctuator.\n\nfunction match(value) {\n return lookahead.type === TokenPunctuator && lookahead.value === value;\n}\n\n// Return true if the next token matches the specified keyword\n\nfunction matchKeyword(keyword) {\n return lookahead.type === TokenKeyword && lookahead.value === keyword;\n}\n\n// 11.1.4 Array Initialiser\n\nfunction parseArrayInitialiser() {\n var elements = [];\n\n index = lookahead.start;\n expect('[');\n\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else {\n elements.push(parseConditionalExpression());\n\n if (!match(']')) {\n expect(',');\n }\n }\n }\n\n lex();\n\n return finishArrayExpression(elements);\n}\n\n// 11.1.5 Object Initialiser\n\nfunction parseObjectPropertyKey() {\n var token;\n\n index = lookahead.start;\n token = lex();\n\n // Note: This function is called only from parseObjectProperty(), where\n // EOF and Punctuator tokens are already filtered out.\n\n if (token.type === TokenStringLiteral || token.type === TokenNumericLiteral) {\n if (token.octal) {\n throwError(token, MessageStrictOctalLiteral);\n }\n return finishLiteral(token);\n }\n\n return finishIdentifier(token.value);\n}\n\nfunction parseObjectProperty() {\n var token, key, id, value;\n\n index = lookahead.start;\n token = lookahead;\n\n if (token.type === TokenIdentifier) {\n id = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', id, value);\n }\n if (token.type === TokenEOF || token.type === TokenPunctuator) {\n throwUnexpected(token);\n } else {\n key = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', key, value);\n }\n}\n\nfunction parseObjectInitialiser() {\n var properties = [],\n property, name, key, map = {},\n toString = String;\n\n index = lookahead.start;\n expect('{');\n\n while (!match('}')) {\n property = parseObjectProperty();\n\n if (property.key.type === SyntaxIdentifier) {\n name = property.key.name;\n } else {\n name = toString(property.key.value);\n }\n\n key = '$' + name;\n if (Object.prototype.hasOwnProperty.call(map, key)) {\n throwError({}, MessageStrictDuplicateProperty);\n } else {\n map[key] = true;\n }\n\n properties.push(property);\n\n if (!match('}')) {\n expect(',');\n }\n }\n\n expect('}');\n\n return finishObjectExpression(properties);\n}\n\n// 11.1.6 The Grouping Operator\n\nfunction parseGroupExpression() {\n var expr;\n\n expect('(');\n\n expr = parseExpression();\n\n expect(')');\n\n return expr;\n}\n\n\n// 11.1 Primary Expressions\n\nvar legalKeywords = {\n \"if\": 1,\n \"this\": 1\n};\n\nfunction parsePrimaryExpression() {\n var type, token, expr;\n\n if (match('(')) {\n return parseGroupExpression();\n }\n\n if (match('[')) {\n return parseArrayInitialiser();\n }\n\n if (match('{')) {\n return parseObjectInitialiser();\n }\n\n type = lookahead.type;\n index = lookahead.start;\n\n\n if (type === TokenIdentifier || legalKeywords[lookahead.value]) {\n expr = finishIdentifier(lex().value);\n } else if (type === TokenStringLiteral || type === TokenNumericLiteral) {\n if (lookahead.octal) {\n throwError(lookahead, MessageStrictOctalLiteral);\n }\n expr = finishLiteral(lex());\n } else if (type === TokenKeyword) {\n throw new Error(DISABLED);\n } else if (type === TokenBooleanLiteral) {\n token = lex();\n token.value = (token.value === 'true');\n expr = finishLiteral(token);\n } else if (type === TokenNullLiteral) {\n token = lex();\n token.value = null;\n expr = finishLiteral(token);\n } else if (match('/') || match('/=')) {\n expr = finishLiteral(scanRegExp());\n peek();\n } else {\n throwUnexpected(lex());\n }\n\n return expr;\n}\n\n// 11.2 Left-Hand-Side Expressions\n\nfunction parseArguments() {\n var args = [];\n\n expect('(');\n\n if (!match(')')) {\n while (index < length) {\n args.push(parseConditionalExpression());\n if (match(')')) {\n break;\n }\n expect(',');\n }\n }\n\n expect(')');\n\n return args;\n}\n\nfunction parseNonComputedProperty() {\n var token;\n index = lookahead.start;\n token = lex();\n\n if (!isIdentifierName(token)) {\n throwUnexpected(token);\n }\n\n return finishIdentifier(token.value);\n}\n\nfunction parseNonComputedMember() {\n expect('.');\n\n return parseNonComputedProperty();\n}\n\nfunction parseComputedMember() {\n var expr;\n\n expect('[');\n\n expr = parseExpression();\n\n expect(']');\n\n return expr;\n}\n\nfunction parseLeftHandSideExpressionAllowCall() {\n var expr, args, property;\n\n expr = parsePrimaryExpression();\n\n for (;;) {\n if (match('.')) {\n property = parseNonComputedMember();\n expr = finishMemberExpression('.', expr, property);\n } else if (match('(')) {\n args = parseArguments();\n expr = finishCallExpression(expr, args);\n } else if (match('[')) {\n property = parseComputedMember();\n expr = finishMemberExpression('[', expr, property);\n } else {\n break;\n }\n }\n\n return expr;\n}\n\n// 11.3 Postfix Expressions\n\nfunction parsePostfixExpression() {\n var expr = parseLeftHandSideExpressionAllowCall();\n\n if (lookahead.type === TokenPunctuator) {\n if ((match('++') || match('--'))) {\n throw new Error(DISABLED);\n }\n }\n\n return expr;\n}\n\n// 11.4 Unary Operators\n\nfunction parseUnaryExpression() {\n var token, expr;\n\n if (lookahead.type !== TokenPunctuator && lookahead.type !== TokenKeyword) {\n expr = parsePostfixExpression();\n } else if (match('++') || match('--')) {\n throw new Error(DISABLED);\n } else if (match('+') || match('-') || match('~') || match('!')) {\n token = lex();\n expr = parseUnaryExpression();\n expr = finishUnaryExpression(token.value, expr);\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n throw new Error(DISABLED);\n } else {\n expr = parsePostfixExpression();\n }\n\n return expr;\n}\n\nfunction binaryPrecedence(token) {\n var prec = 0;\n\n if (token.type !== TokenPunctuator && token.type !== TokenKeyword) {\n return 0;\n }\n\n switch (token.value) {\n case '||':\n prec = 1;\n break;\n\n case '&&':\n prec = 2;\n break;\n\n case '|':\n prec = 3;\n break;\n\n case '^':\n prec = 4;\n break;\n\n case '&':\n prec = 5;\n break;\n\n case '==':\n case '!=':\n case '===':\n case '!==':\n prec = 6;\n break;\n\n case '<':\n case '>':\n case '<=':\n case '>=':\n case 'instanceof':\n case 'in':\n prec = 7;\n break;\n\n case '<<':\n case '>>':\n case '>>>':\n prec = 8;\n break;\n\n case '+':\n case '-':\n prec = 9;\n break;\n\n case '*':\n case '/':\n case '%':\n prec = 11;\n break;\n\n default:\n break;\n }\n\n return prec;\n}\n\n// 11.5 Multiplicative Operators\n// 11.6 Additive Operators\n// 11.7 Bitwise Shift Operators\n// 11.8 Relational Operators\n// 11.9 Equality Operators\n// 11.10 Binary Bitwise Operators\n// 11.11 Binary Logical Operators\n\nfunction parseBinaryExpression() {\n var marker, markers, expr, token, prec, stack, right, operator, left, i;\n\n marker = lookahead;\n left = parseUnaryExpression();\n\n token = lookahead;\n prec = binaryPrecedence(token);\n if (prec === 0) {\n return left;\n }\n token.prec = prec;\n lex();\n\n markers = [marker, lookahead];\n right = parseUnaryExpression();\n\n stack = [left, token, right];\n\n while ((prec = binaryPrecedence(lookahead)) > 0) {\n\n // Reduce: make a binary expression from the three topmost entries.\n while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {\n right = stack.pop();\n operator = stack.pop().value;\n left = stack.pop();\n markers.pop();\n expr = finishBinaryExpression(operator, left, right);\n stack.push(expr);\n }\n\n // Shift.\n token = lex();\n token.prec = prec;\n stack.push(token);\n markers.push(lookahead);\n expr = parseUnaryExpression();\n stack.push(expr);\n }\n\n // Final reduce to clean-up the stack.\n i = stack.length - 1;\n expr = stack[i];\n markers.pop();\n while (i > 1) {\n markers.pop()\n expr = finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i -= 2;\n }\n\n return expr;\n}\n\n// 11.12 Conditional Operator\n\nfunction parseConditionalExpression() {\n var expr, consequent, alternate;\n\n expr = parseBinaryExpression();\n\n if (match('?')) {\n lex();\n consequent = parseConditionalExpression();\n expect(':');\n alternate = parseConditionalExpression();\n\n expr = finishConditionalExpression(expr, consequent, alternate);\n }\n\n return expr;\n}\n\n// 11.14 Comma Operator\n\nfunction parseExpression() {\n var expr = parseConditionalExpression();\n\n if (match(',')) {\n throw new Error(DISABLED); // no sequence expressions\n }\n\n return expr;\n}\n\nexport default function(code) {\n source = code;\n index = 0;\n length = source.length;\n lookahead = null;\n\n peek();\n\n var expr = parseExpression();\n\n if (lookahead.type !== TokenEOF) {\n throw new Error(\"Unexpect token after expression.\");\n }\n return expr;\n}\n","export default {\n NaN: 'NaN',\n E: 'Math.E',\n LN2: 'Math.LN2',\n LN10: 'Math.LN10',\n LOG2E: 'Math.LOG2E',\n LOG10E: 'Math.LOG10E',\n PI: 'Math.PI',\n SQRT1_2: 'Math.SQRT1_2',\n SQRT2: 'Math.SQRT2',\n MIN_VALUE: 'Number.MIN_VALUE',\n MAX_VALUE: 'Number.MAX_VALUE'\n};\n","import {error} from 'vega-util';\n\nexport default function(codegen) {\n\n function fncall(name, args, cast, type) {\n var obj = codegen(args[0]);\n if (cast) {\n obj = cast + '(' + obj + ')';\n if (cast.lastIndexOf('new ', 0) === 0) obj = '(' + obj + ')';\n }\n return obj + '.' + name + (type < 0 ? '' : type === 0 ?\n '()' :\n '(' + args.slice(1).map(codegen).join(',') + ')');\n }\n\n function fn(name, cast, type) {\n return function(args) {\n return fncall(name, args, cast, type);\n };\n }\n\n var DATE = 'new Date',\n STRING = 'String',\n REGEXP = 'RegExp';\n\n return {\n // MATH functions\n isNaN: 'isNaN',\n isFinite: 'isFinite',\n abs: 'Math.abs',\n acos: 'Math.acos',\n asin: 'Math.asin',\n atan: 'Math.atan',\n atan2: 'Math.atan2',\n ceil: 'Math.ceil',\n cos: 'Math.cos',\n exp: 'Math.exp',\n floor: 'Math.floor',\n log: 'Math.log',\n max: 'Math.max',\n min: 'Math.min',\n pow: 'Math.pow',\n random: 'Math.random',\n round: 'Math.round',\n sin: 'Math.sin',\n sqrt: 'Math.sqrt',\n tan: 'Math.tan',\n\n clamp: function(args) {\n if (args.length < 3) error('Missing arguments to clamp function.');\n if (args.length > 3) error('Too many arguments to clamp function.');\n var a = args.map(codegen);\n return 'Math.max('+a[1]+', Math.min('+a[2]+','+a[0]+'))';\n },\n\n // DATE functions\n now: 'Date.now',\n utc: 'Date.UTC',\n datetime: DATE,\n date: fn('getDate', DATE, 0),\n day: fn('getDay', DATE, 0),\n year: fn('getFullYear', DATE, 0),\n month: fn('getMonth', DATE, 0),\n hours: fn('getHours', DATE, 0),\n minutes: fn('getMinutes', DATE, 0),\n seconds: fn('getSeconds', DATE, 0),\n milliseconds: fn('getMilliseconds', DATE, 0),\n time: fn('getTime', DATE, 0),\n timezoneoffset: fn('getTimezoneOffset', DATE, 0),\n utcdate: fn('getUTCDate', DATE, 0),\n utcday: fn('getUTCDay', DATE, 0),\n utcyear: fn('getUTCFullYear', DATE, 0),\n utcmonth: fn('getUTCMonth', DATE, 0),\n utchours: fn('getUTCHours', DATE, 0),\n utcminutes: fn('getUTCMinutes', DATE, 0),\n utcseconds: fn('getUTCSeconds', DATE, 0),\n utcmilliseconds: fn('getUTCMilliseconds', DATE, 0),\n\n // sequence functions\n length: fn('length', null, -1),\n join: fn('join', null),\n indexof: fn('indexOf', null),\n lastindexof: fn('lastIndexOf', null),\n slice: fn('slice', null),\n\n reverse: function(args) {\n return '('+codegen(args[0])+').slice().reverse()';\n },\n\n // STRING functions\n parseFloat: 'parseFloat',\n parseInt: 'parseInt',\n upper: fn('toUpperCase', STRING, 0),\n lower: fn('toLowerCase', STRING, 0),\n substring: fn('substring', STRING),\n split: fn('split', STRING),\n replace: fn('replace', STRING),\n trim: fn('trim', STRING, 0),\n\n // REGEXP functions\n regexp: REGEXP,\n test: fn('test', REGEXP),\n\n // Control Flow functions\n if: function(args) {\n if (args.length < 3) error('Missing arguments to if function.');\n if (args.length > 3) error('Too many arguments to if function.');\n var a = args.map(codegen);\n return '('+a[0]+'?'+a[1]+':'+a[2]+')';\n }\n };\n}\n","import Constants from './constants';\nimport Functions from './functions';\nimport {error, isFunction, isString, toSet} from 'vega-util';\n\nfunction stripQuotes(s) {\n var n = s && s.length - 1;\n return n && (\n (s[0]==='\"' && s[n]==='\"') ||\n (s[0]==='\\'' && s[n]==='\\'')\n ) ? s.slice(1, -1) : s;\n}\n\nexport default function(opt) {\n opt = opt || {};\n\n var whitelist = opt.whitelist ? toSet(opt.whitelist) : {},\n blacklist = opt.blacklist ? toSet(opt.blacklist) : {},\n constants = opt.constants || Constants,\n functions = (opt.functions || Functions)(visit),\n globalvar = opt.globalvar,\n fieldvar = opt.fieldvar,\n globals = {},\n fields = {},\n memberDepth = 0;\n\n var outputGlobal = isFunction(globalvar)\n ? globalvar\n : function (id) { return globalvar + '[\"' + id + '\"]'; };\n\n function visit(ast) {\n if (isString(ast)) return ast;\n var generator = Generators[ast.type];\n if (generator == null) error('Unsupported type: ' + ast.type);\n return generator(ast);\n }\n\n var Generators = {\n Literal: function(n) {\n return n.raw;\n },\n\n Identifier: function(n) {\n var id = n.name;\n if (memberDepth > 0) {\n return id;\n } else if (blacklist.hasOwnProperty(id)) {\n return error('Illegal identifier: ' + id);\n } else if (constants.hasOwnProperty(id)) {\n return constants[id];\n } else if (whitelist.hasOwnProperty(id)) {\n return id;\n } else {\n globals[id] = 1;\n return outputGlobal(id);\n }\n },\n\n MemberExpression: function(n) {\n var d = !n.computed;\n var o = visit(n.object);\n if (d) memberDepth += 1;\n var p = visit(n.property);\n if (o === fieldvar) {\n // strip quotes to sanitize field name (#1653)\n fields[stripQuotes(p)] = 1;\n }\n if (d) memberDepth -= 1;\n return o + (d ? '.'+p : '['+p+']');\n },\n\n CallExpression: function(n) {\n if (n.callee.type !== 'Identifier') {\n error('Illegal callee type: ' + n.callee.type);\n }\n var callee = n.callee.name;\n var args = n.arguments;\n var fn = functions.hasOwnProperty(callee) && functions[callee];\n if (!fn) error('Unrecognized function: ' + callee);\n return isFunction(fn)\n ? fn(args)\n : fn + '(' + args.map(visit).join(',') + ')';\n },\n\n ArrayExpression: function(n) {\n return '[' + n.elements.map(visit).join(',') + ']';\n },\n\n BinaryExpression: function(n) {\n return '(' + visit(n.left) + n.operator + visit(n.right) + ')';\n },\n\n UnaryExpression: function(n) {\n return '(' + n.operator + visit(n.argument) + ')';\n },\n\n ConditionalExpression: function(n) {\n return '(' + visit(n.test) +\n '?' + visit(n.consequent) +\n ':' + visit(n.alternate) +\n ')';\n },\n\n LogicalExpression: function(n) {\n return '(' + visit(n.left) + n.operator + visit(n.right) + ')';\n },\n\n ObjectExpression: function(n) {\n return '{' + n.properties.map(visit).join(',') + '}';\n },\n\n Property: function(n) {\n memberDepth += 1;\n var k = visit(n.key);\n memberDepth -= 1;\n return k + ':' + visit(n.value);\n }\n };\n\n function codegen(ast) {\n var result = {\n code: visit(ast),\n globals: Object.keys(globals),\n fields: Object.keys(fields)\n };\n globals = {};\n fields = {};\n return result;\n }\n\n codegen.functions = functions;\n codegen.constants = constants;\n\n return codegen;\n}\n","export const Intersect = 'intersect';\nexport const Union = 'union';\n","import {Intersect} from './constants';\nimport {field, inrange, isArray, isDate, toNumber} from 'vega-util';\n\nvar TYPE_ENUM = 'E',\n TYPE_RANGE_INC = 'R',\n TYPE_RANGE_EXC = 'R-E',\n TYPE_RANGE_LE = 'R-LE',\n TYPE_RANGE_RE = 'R-RE',\n UNIT_INDEX = 'index:unit';\n\n// TODO: revisit date coercion?\nfunction testPoint(datum, entry) {\n var fields = entry.fields,\n values = entry.values,\n n = fields.length,\n i = 0, dval, f;\n\n for (; i, values: array<*>}.\n * Fielddef is of the form\n * {field: string, channel: string, type: 'E' | 'R'} where\n * 'type' identifies whether tuples in the dataset enumerate\n * values for the field, or specify a continuous range.\n * @param {object} datum - The tuple to test for inclusion.\n * @param {string} op - The set operation for combining selections.\n * One of 'intersect' or 'union' (default).\n * @return {boolean} - True if the datum is in the selection, false otherwise.\n */\nexport function selectionTest(name, datum, op) {\n var data = this.context.data[name],\n entries = data ? data.values.value : [],\n unitIdx = data ? data[UNIT_INDEX] && data[UNIT_INDEX].value : undefined,\n intersect = op === Intersect,\n n = entries.length,\n i = 0,\n entry, miss, count, unit, b;\n\n for (; i= 0; });\n },\n\n R_union: function(base, value) {\n var lo = toNumber(value[0]), hi = toNumber(value[1]);\n if (lo > hi) {\n lo = value[1];\n hi = value[0];\n }\n\n if (!base.length) return [lo, hi];\n if (base[0] > lo) base[0] = lo;\n if (base[1] < hi) base[1] = hi;\n return base;\n },\n\n R_intersect: function(base, value) {\n var lo = toNumber(value[0]), hi = toNumber(value[1]);\n if (lo > hi) {\n lo = value[1];\n hi = value[0];\n }\n\n if (!base.length) return [lo, hi];\n if (hi < base[0] || base[1] < lo) {\n return [];\n } else {\n if (base[0] < lo) base[0] = lo;\n if (base[1] > hi) base[1] = hi;\n }\n return base;\n }\n};\n","import {Intersect} from './constants';\nimport {Literal} from 'vega-expression';\nimport {error, peek} from 'vega-util';\n\nconst DataPrefix = ':',\n IndexPrefix = '@';\n\nexport function selectionVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) error('First argument to selection functions must be a string literal.');\n\n const data = args[0].value,\n op = args.length >= 2 && peek(args).value,\n field = 'unit',\n indexName = IndexPrefix + field,\n dataName = DataPrefix + data;\n\n if (op === Intersect && !params.hasOwnProperty(indexName)) {\n params[indexName] = scope.getData(data).indataRef(scope, field);\n }\n\n if (!params.hasOwnProperty(dataName)) {\n params[dataName] = scope.getData(data).tuplesRef();\n }\n}","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","import {truthy} from 'vega-util';\n\nexport function data(name) {\n const data = this.context.data[name];\n return data ? data.values.value : [];\n}\n\nexport function indata(name, field, value) {\n const index = this.context.data[name]['index:' + field],\n entry = index ? index.value.get(value) : undefined;\n return entry ? entry.count : entry;\n}\n\nexport function setdata(name, tuples) {\n const df = this.context.dataflow,\n data = this.context.data[name],\n input = data.input;\n\n df.pulse(input, df.changeset().remove(truthy).insert(tuples));\n return 1;\n}\n","export default function(item, name, retval) {\n if (item) {\n const df = this.context.dataflow,\n target = item.mark.source;\n df.pulse(target, df.changeset().encode(item, name));\n }\n return retval !== undefined ? retval : item;\n}\n","import {\n format as d3_format\n} from 'd3-format';\n\nimport {\n timeFormat as d3_timeFormat,\n timeParse as d3_timeParse,\n utcFormat as d3_utcFormat,\n utcParse as d3_utcParse\n} from 'd3-time-format';\n\nconst formatCache = {};\n\nfunction formatter(type, method, specifier) {\n let k = type + ':' + specifier,\n e = formatCache[k];\n if (!e || e[0] !== method) {\n formatCache[k] = (e = [method, method(specifier)]);\n }\n return e[1];\n}\n\nexport function format(_, specifier) {\n return formatter('format', d3_format, specifier)(_);\n}\n\nexport function timeFormat(_, specifier) {\n return formatter('timeFormat', d3_timeFormat, specifier)(_);\n}\n\nexport function utcFormat(_, specifier) {\n return formatter('utcFormat', d3_utcFormat, specifier)(_);\n}\n\nexport function timeParse(_, specifier) {\n return formatter('timeParse', d3_timeParse, specifier)(_);\n}\n\nexport function utcParse(_, specifier) {\n return formatter('utcParse', d3_utcParse, specifier)(_);\n}\n\nvar dateObj = new Date(2000, 0, 1);\n\nfunction time(month, day, specifier) {\n dateObj.setMonth(month);\n dateObj.setDate(day);\n return timeFormat(dateObj, specifier);\n}\n\nexport function monthFormat(month) {\n return time(month, 1, '%B');\n}\n\nexport function monthAbbrevFormat(month) {\n return time(month, 1, '%b');\n}\n\nexport function dayFormat(day) {\n return time(0, 2 + day, '%A');\n}\n\nexport function dayAbbrevFormat(day) {\n return time(0, 2 + day, '%a');\n}\n","import {bandSpace} from 'vega-scale';\nimport {isArray, isFunction, isString} from 'vega-util';\n\nexport function getScale(name, ctx) {\n let s;\n return isFunction(name) ? name\n : isString(name) ? (s = ctx.scales[name]) && s.value\n : undefined;\n}\n\nexport function range(name, group) {\n const s = getScale(name, (group || this).context);\n return s && s.range ? s.range() : [];\n}\n\nexport function domain(name, group) {\n const s = getScale(name, (group || this).context);\n return s ? s.domain() : [];\n}\n\nexport function bandwidth(name, group) {\n const s = getScale(name, (group || this).context);\n return s && s.bandwidth ? s.bandwidth() : 0;\n}\n\nexport function bandspace(count, paddingInner, paddingOuter) {\n return bandSpace(count || 0, paddingInner || 0, paddingOuter || 0);\n}\n\nexport function copy(name, group) {\n const s = getScale(name, (group || this).context);\n return s ? s.copy() : undefined;\n}\n\nexport function scale(name, value, group) {\n const s = getScale(name, (group || this).context);\n return s && value !== undefined ? s(value) : undefined;\n}\n\nexport function invert(name, range, group) {\n const s = getScale(name, (group || this).context);\n return !s ? undefined\n : isArray(range) ? (s.invertRange || s.invert)(range)\n : (s.invert || s.invertExtent)(range);\n}\n","import {getScale} from './scale';\nimport {\n geoArea as area,\n geoBounds as bounds,\n geoCentroid as centroid\n} from 'd3-geo';\n\nfunction geoMethod(methodName, globalMethod) {\n return function(projection, geojson, group) {\n if (projection) {\n // projection defined, use it\n const p = getScale(projection, (group || this).context);\n return p && p.path[methodName](geojson);\n } else {\n // projection undefined, use global method\n return globalMethod(geojson);\n }\n };\n}\n\nexport const geoArea = geoMethod('area', area);\nexport const geoBounds = geoMethod('bounds', bounds);\nexport const geoCentroid = geoMethod('centroid', centroid);\n","export default function(item) {\n let group = this.context.group,\n value = false;\n\n if (group) while (item) {\n if (item === group) { value = true; break; }\n item = item.mark.group;\n }\n return value;\n}\n","import {Bounds, intersect} from 'vega-scenegraph';\nimport {array} from 'vega-util';\n\nexport default function(b, opt, group) {\n if (!b) return [];\n\n const [u, v] = b,\n box = new Bounds().set(u[0], u[1], v[0], v[1]),\n scene = group || this.context.dataflow.scenegraph().root;\n\n return intersect(scene, box, filter(opt));\n}\n\nfunction filter(opt) {\n let p = null;\n\n if (opt) {\n const types = array(opt.marktype),\n names = array(opt.markname);\n p = _ => (!types.length || types.some(t => _.marktype === t))\n && (!names.length || names.some(s => _.name === s));\n }\n\n return p;\n}","function log(df, method, args) {\n try {\n df[method].apply(df, ['EXPRESSION'].concat([].slice.call(args)));\n } catch (err) {\n df.warn(err);\n }\n return args[args.length-1];\n}\n\nexport function warn() {\n return log(this.context.dataflow, 'warn', arguments);\n}\n\nexport function info() {\n return log(this.context.dataflow, 'info', arguments);\n}\n\nexport function debug() {\n return log(this.context.dataflow, 'debug', arguments);\n}\n","import {extend} from 'vega-util';\n\nexport default function() {\n var args = [].slice.call(arguments);\n args.unshift({});\n return extend.apply(null, args);\n}\n","import {isTuple} from 'vega-dataflow';\nimport {isArray, truthy} from 'vega-util';\n\nfunction equal(a, b) {\n return a === b || a !== a && b !== b ? true\n : isArray(a) && isArray(b) && a.length === b.length ? equalArray(a, b)\n : false;\n}\n\nfunction equalArray(a, b) {\n for (let i=0, n=a.length; i gradient.stop(fraction(_), scale(_)));\n\n return gradient;\n}\n","import {getScale} from './scale';\nimport {pathParse, pathRender} from 'vega-scenegraph';\n\nexport function geoShape(projection, geojson, group) {\n const p = getScale(projection, (group || this).context);\n return function(context) {\n return p ? p.path.context(context)(geojson) : '';\n }\n}\n\nexport function pathShape(path) {\n let p = null;\n return function(context) {\n return context\n ? pathRender(context, (p = p || pathParse(path)))\n : path;\n };\n}\n","import {data} from './data';\n\nconst EMPTY = {};\n\nfunction datum(d) { return d.data; }\n\nfunction treeNodes(name, context) {\n const tree = data.call(context, name);\n return tree.root && tree.root.lookup || EMPTY;\n}\n\nexport function treePath(name, source, target) {\n const nodes = treeNodes(name, this),\n s = nodes[source],\n t = nodes[target];\n return s && t ? s.path(t).map(datum) : undefined;\n}\n\nexport function treeAncestors(name, node) {\n const n = treeNodes(name, this)[node];\n return n ? n.ancestors().map(datum) : undefined;\n}\n","const _window = (typeof window !== 'undefined' && window) || null;\n\nexport function screen() {\n return _window ? _window.screen : {};\n}\n\nexport function windowSize() {\n return _window\n ? [_window.innerWidth, _window.innerHeight]\n : [undefined, undefined];\n}\n\nexport function containerSize() {\n const view = this.context.dataflow,\n el = view.container && view.container();\n return el\n ? [el.clientWidth, el.clientHeight]\n : [undefined, undefined];\n}\n","export const DataPrefix = ':';\nexport const IndexPrefix = '@';\nexport const ScalePrefix = '%';\nexport const SignalPrefix = '$';\n","import {DataPrefix, IndexPrefix, ScalePrefix} from './prefix';\nimport {Identifier, Literal} from 'vega-expression';\nimport {error} from 'vega-util';\n\nexport function dataVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) {\n error('First argument to data functions must be a string literal.');\n }\n\n const data = args[0].value,\n dataName = DataPrefix + data;\n\n if (!params.hasOwnProperty(dataName)) {\n params[dataName] = scope.getData(data).tuplesRef();\n }\n}\n\nexport function indataVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) error('First argument to indata must be a string literal.');\n if (args[1].type !== Literal) error('Second argument to indata must be a string literal.');\n\n const data = args[0].value,\n field = args[1].value,\n indexName = IndexPrefix + field;\n\n if (!params.hasOwnProperty(indexName)) {\n params[indexName] = scope.getData(data).indataRef(scope, field);\n }\n}\n\nexport function scaleVisitor(name, args, scope, params) {\n if (args[0].type === Literal) {\n // add scale dependency\n addScaleDependency(scope, params, args[0].value);\n }\n else if (args[0].type === Identifier) {\n // indirect scale lookup; add all scales as parameters\n for (name in scope.scales) {\n addScaleDependency(scope, params, name);\n }\n }\n}\n\nfunction addScaleDependency(scope, params, name) {\n const scaleName = ScalePrefix + name;\n if (!params.hasOwnProperty(scaleName)) {\n try {\n params[scaleName] = scope.scaleRef(name);\n } catch (err) {\n // TODO: error handling? warning?\n }\n }\n}\n","import {\n codegen,\n constants,\n functions\n} from 'vega-expression';\n\nimport {\n isTuple\n} from 'vega-dataflow';\n\nimport {\n selectionTest,\n selectionResolve,\n selectionVisitor\n} from 'vega-selections';\n\nimport {\n random\n} from 'vega-statistics';\n\nimport {\n isArray,\n isBoolean,\n isDate,\n isNumber,\n isObject,\n isRegExp,\n isString,\n panLinear,\n panLog,\n panPow,\n panSymlog,\n zoomLinear,\n zoomLog,\n zoomPow,\n zoomSymlog,\n toBoolean,\n toDate,\n toNumber,\n toString,\n clampRange,\n extent,\n flush,\n inrange,\n lerp,\n pad,\n peek,\n quarter,\n utcquarter,\n span,\n stringValue,\n truncate\n} from 'vega-util';\n\nimport {\n range as sequence\n} from 'd3-array';\n\nimport {\n rgb,\n lab,\n hcl,\n hsl\n} from 'd3-color';\n\nimport {\n data,\n indata,\n setdata\n} from './data';\n\nimport {\n default as encode\n} from './encode';\n\nimport {\n format,\n utcFormat,\n timeFormat,\n utcParse,\n timeParse,\n monthFormat,\n monthAbbrevFormat,\n dayFormat,\n dayAbbrevFormat\n} from './format';\n\nimport {\n geoArea,\n geoBounds,\n geoCentroid\n} from './geo';\n\nimport {\n default as inScope\n} from './inscope';\n\nimport {\n default as intersect\n} from './intersect';\n\nimport {\n warn,\n info,\n debug\n} from './log';\n\nimport {\n default as merge\n} from './merge';\n\nimport {\n default as modify\n} from './modify';\n\nimport {\n pinchDistance,\n pinchAngle\n} from './pinch';\n\nimport {\n range,\n domain,\n bandwidth,\n bandspace,\n copy,\n scale,\n invert\n} from './scale';\n\nimport {\n default as scaleGradient\n} from './scale-gradient';\n\nimport {\n geoShape,\n pathShape\n} from './shape';\n\nimport {\n treePath,\n treeAncestors\n} from './tree';\n\nimport {\n containerSize,\n screen,\n windowSize\n} from './window';\n\nimport {\n dataVisitor,\n indataVisitor,\n scaleVisitor\n} from './visitors';\n\nimport {SignalPrefix} from './prefix';\n\n// Expression function context object\nexport const functionContext = {\n random: function() { return random(); }, // override default\n isArray,\n isBoolean,\n isDate,\n isDefined: function(_) { return _ !== undefined; },\n isNumber,\n isObject,\n isRegExp,\n isString,\n isTuple,\n isValid: function(_) { return _ != null && _ === _; },\n toBoolean,\n toDate,\n toNumber,\n toString,\n flush,\n lerp,\n merge,\n pad,\n peek,\n span,\n inrange,\n truncate,\n rgb,\n lab,\n hcl,\n hsl,\n sequence,\n format,\n utcFormat,\n utcParse,\n timeFormat,\n timeParse,\n monthFormat,\n monthAbbrevFormat,\n dayFormat,\n dayAbbrevFormat,\n quarter,\n utcquarter,\n warn,\n info,\n debug,\n extent,\n inScope,\n intersect,\n clampRange,\n pinchDistance,\n pinchAngle,\n screen,\n containerSize,\n windowSize,\n bandspace,\n setdata,\n pathShape,\n panLinear,\n panLog,\n panPow,\n panSymlog,\n zoomLinear,\n zoomLog,\n zoomPow,\n zoomSymlog,\n encode,\n modify\n};\n\nconst eventFunctions = ['view', 'item', 'group', 'xy', 'x', 'y'], // event functions\n eventPrefix = 'event.vega.', // event function prefix\n thisPrefix = 'this.', // function context prefix\n astVisitors = {}; // AST visitors for dependency analysis\n\n// Build expression function registry\nfunction buildFunctions(codegen) {\n const fn = functions(codegen);\n eventFunctions.forEach(name => fn[name] = eventPrefix + name);\n for (let name in functionContext) { fn[name] = thisPrefix + name; }\n return fn;\n}\n\n// Register an expression function\nexport function expressionFunction(name, fn, visitor) {\n if (arguments.length === 1) {\n return functionContext[name];\n }\n\n // register with the functionContext\n functionContext[name] = fn;\n\n // if there is an astVisitor register that, too\n if (visitor) astVisitors[name] = visitor;\n\n // if the code generator has already been initialized,\n // we need to also register the function with it\n if (codeGenerator) codeGenerator.functions[name] = thisPrefix + name;\n return this;\n}\n\n// register expression functions with ast visitors\nexpressionFunction('bandwidth', bandwidth, scaleVisitor);\nexpressionFunction('copy', copy, scaleVisitor);\nexpressionFunction('domain', domain, scaleVisitor);\nexpressionFunction('range', range, scaleVisitor);\nexpressionFunction('invert', invert, scaleVisitor);\nexpressionFunction('scale', scale, scaleVisitor);\nexpressionFunction('gradient', scaleGradient, scaleVisitor);\nexpressionFunction('geoArea', geoArea, scaleVisitor);\nexpressionFunction('geoBounds', geoBounds, scaleVisitor);\nexpressionFunction('geoCentroid', geoCentroid, scaleVisitor);\nexpressionFunction('geoShape', geoShape, scaleVisitor);\nexpressionFunction('indata', indata, indataVisitor);\nexpressionFunction('data', data, dataVisitor);\nexpressionFunction('treePath', treePath, dataVisitor);\nexpressionFunction('treeAncestors', treeAncestors, dataVisitor);\n\n// register Vega-Lite selection functions\nexpressionFunction('vlSelectionTest', selectionTest, selectionVisitor);\nexpressionFunction('vlSelectionResolve', selectionResolve, selectionVisitor);\n\n// Export code generator and parameters\nexport const codegenParams = {\n blacklist: ['_'],\n whitelist: ['datum', 'event', 'item'],\n fieldvar: 'datum',\n globalvar: function(id) { return '_[' + stringValue(SignalPrefix + id) + ']'; },\n functions: buildFunctions,\n constants: constants,\n visitors: astVisitors\n};\n\nexport var codeGenerator = codegen(codegenParams);\n","/**\n * Parse an expression given the argument signature and body code.\n */\nexport default function expression(args, code, ctx) {\n // wrap code in return statement if expression does not terminate\n if (code[code.length-1] !== ';') {\n code = 'return(' + code + ');';\n }\n var fn = Function.apply(null, args.concat(code));\n return ctx && ctx.functions ? fn.bind(ctx.functions) : fn;\n}\n\n/**\n * Parse an expression used to update an operator value.\n */\nexport function operatorExpression(code, ctx) {\n return expression(['_'], code, ctx);\n}\n\n/**\n * Parse an expression provided as an operator parameter value.\n */\nexport function parameterExpression(code, ctx) {\n return expression(['datum', '_'], code, ctx);\n}\n\n/**\n * Parse an expression applied to an event stream.\n */\nexport function eventExpression(code, ctx) {\n return expression(['event'], code, ctx);\n}\n\n/**\n * Parse an expression used to handle an event-driven operator update.\n */\nexport function handlerExpression(code, ctx) {\n return expression(['_', 'event'], code, ctx);\n}\n\n/**\n * Parse an expression that performs visual encoding.\n */\nexport function encodeExpression(code, ctx) {\n return expression(['item', '_'], code, ctx);\n}\n","import parseDataflow from './dataflow';\nimport {parameterExpression, encodeExpression} from './expression';\nimport {tupleid} from 'vega-dataflow';\nimport {accessor, array, compare, error, field, isArray, isObject, key} from 'vega-util';\n\n/**\n * Parse a set of operator parameters.\n */\nexport default function parseParameters(spec, ctx, params) {\n params = params || {};\n var key, value;\n\n for (key in spec) {\n value = spec[key];\n\n params[key] = isArray(value)\n ? value.map(function(v) { return parseParameter(v, ctx, params); })\n : parseParameter(value, ctx, params);\n }\n return params;\n}\n\n/**\n * Parse a single parameter.\n */\nfunction parseParameter(spec, ctx, params) {\n if (!spec || !isObject(spec)) return spec;\n\n for (var i=0, n=PARSERS.length, p; i v.resize());\n }, false, 1);\n}\n","import {transforms} from 'vega-dataflow';\nimport {isArray} from 'vega-util';\n\n/**\n * Get the current view state, consisting of signal values and/or data sets.\n * @param {object} [options] - Options flags indicating which state to export.\n * If unspecified, all signals and data sets will be exported.\n * @param {function(string, Operator):boolean} [options.signals] - Optional\n * predicate function for testing if a signal should be included in the\n * exported state. If unspecified, all signals will be included, except for\n * those named 'parent' or those which refer to a Transform value.\n * @param {function(string, object):boolean} [options.data] - Optional\n * predicate function for testing if a data set's input should be included\n * in the exported state. If unspecified, all data sets that have been\n * explicitly modified will be included.\n * @param {boolean} [options.recurse=true] - Flag indicating if the exported\n * state should recursively include state from group mark sub-contexts.\n * @return {object} - An object containing the exported state values.\n */\nexport function getState(options) {\n return this._runtime.getState(options || {\n data: dataTest,\n signals: signalTest,\n recurse: true\n });\n}\n\nfunction dataTest(name, data) {\n return data.modified\n && isArray(data.input.value)\n && name.indexOf('_:vega:_');\n}\n\nfunction signalTest(name, op) {\n return !(name === 'parent' || op instanceof transforms.proxy);\n}\n\n/**\n * Sets the current view state and updates the view by invoking run.\n * @param {object} state - A state object containing signal and/or\n * data set values, following the format used by the getState method.\n * @return {View} - This view instance.\n */\nexport function setState(state) {\n this.runAsync(null,\n v => { v._trigger = false; v._runtime.setState(state); },\n v => { v._trigger = true; }\n );\n return this;\n}\n","import {interval} from 'd3-timer';\n\nexport default function(callback, delay) {\n function tick(elapsed) {\n callback({timestamp: Date.now(), elapsed: elapsed});\n }\n this._timers.push(interval(tick, delay));\n}\n","import {isArray, isDate, isObject} from 'vega-util';\n\nexport default function(handler, event, item, value) {\n var el = handler.element();\n if (el) el.setAttribute('title', formatTooltip(value));\n}\n\nfunction formatTooltip(value) {\n return value == null ? ''\n : isArray(value) ? formatArray(value)\n : isObject(value) && !isDate(value) ? formatObject(value)\n : value + '';\n}\n\nfunction formatObject(obj) {\n return Object.keys(obj).map(function(key) {\n var v = obj[key];\n return key + ': ' + (isArray(v) ? formatArray(v) : formatValue(v));\n }).join('\\n');\n}\n\nfunction formatArray(value) {\n return '[' + value.map(formatValue).join(', ') + ']';\n}\n\nfunction formatValue(value) {\n return isArray(value) ? '[\\u2026]'\n : isObject(value) && !isDate(value) ? '{\\u2026}'\n : value;\n}\n","import cursor from './cursor';\nimport {data, dataref, change, insert, remove} from './data';\nimport {initializeEventConfig, events} from './events';\nimport hover from './hover';\nimport finalize from './finalize';\nimport initialize from './initialize';\nimport renderToImageURL from './render-to-image-url';\nimport renderToCanvas from './render-to-canvas';\nimport renderToSVG from './render-to-svg';\nimport {resizeRenderer} from './render-size';\nimport runtime from './runtime';\nimport {scale} from './scale';\nimport {resizeView, initializeResize, viewWidth, viewHeight} from './size';\nimport {getState, setState} from './state';\nimport timer from './timer';\nimport defaultTooltip from './tooltip';\nimport trap from './trap';\n\nimport {asyncCallback, Dataflow} from 'vega-dataflow';\nimport {error, extend, inherits, stringValue} from 'vega-util';\nimport {\n CanvasHandler, Scenegraph,\n renderModule, RenderType\n} from 'vega-scenegraph';\n\n/**\n * Create a new View instance from a Vega dataflow runtime specification.\n * The generated View will not immediately be ready for display. Callers\n * should also invoke the initialize method (e.g., to set the parent\n * DOM element in browser-based deployment) and then invoke the run\n * method to evaluate the dataflow graph. Rendering will automatically\n * be peformed upon dataflow runs.\n * @constructor\n * @param {object} spec - The Vega dataflow runtime specification.\n */\nexport default function View(spec, options) {\n var view = this;\n options = options || {};\n\n Dataflow.call(view);\n if (options.loader) view.loader(options.loader);\n if (options.logger) view.logger(options.logger);\n if (options.logLevel != null) view.logLevel(options.logLevel);\n\n view._el = null;\n view._elBind = null;\n view._renderType = options.renderer || RenderType.Canvas;\n view._scenegraph = new Scenegraph();\n var root = view._scenegraph.root;\n\n // initialize renderer, handler and event management\n view._renderer = null;\n view._tooltip = options.tooltip || defaultTooltip,\n view._redraw = true;\n view._handler = new CanvasHandler().scene(root);\n view._preventDefault = false;\n view._timers = [];\n view._eventListeners = [];\n view._resizeListeners = [];\n\n // initialize dataflow graph\n var ctx = runtime(view, spec, options.functions);\n view._runtime = ctx;\n view._signals = ctx.signals;\n view._bind = (spec.bindings || []).map(function(_) {\n return {\n state: null,\n param: extend({}, _)\n };\n });\n\n // initialize scenegraph\n if (ctx.root) ctx.root.set(root);\n root.source = ctx.data.root.input;\n view.pulse(\n ctx.data.root.input,\n view.changeset().insert(root.items)\n );\n\n // initialize background color\n view._background = options.background || ctx.background || null;\n\n // initialize event configuration\n view._eventConfig = initializeEventConfig(ctx.eventConfig);\n\n // initialize view size\n view._width = view.width();\n view._height = view.height();\n view._viewWidth = viewWidth(view, view._width);\n view._viewHeight = viewHeight(view, view._height);\n view._origin = [0, 0];\n view._resize = 0;\n view._autosize = 1;\n initializeResize(view);\n\n // initialize cursor\n cursor(view);\n\n // initialize hover proessing, if requested\n if (options.hover) view.hover();\n\n // initialize DOM container(s) and renderer\n if (options.container) view.initialize(options.container, options.bind);\n}\n\nvar prototype = inherits(View, Dataflow);\n\n// -- DATAFLOW / RENDERING ----\n\nprototype.evaluate = async function(encode, prerun, postrun) {\n // evaluate dataflow and prerun\n await Dataflow.prototype.evaluate.call(this, encode, prerun);\n\n // render as needed\n if (this._redraw || this._resize) {\n try {\n if (this._renderer) {\n if (this._resize) {\n this._resize = 0;\n resizeRenderer(this);\n }\n await this._renderer.renderAsync(this._scenegraph.root);\n }\n this._redraw = false;\n } catch (e) {\n this.error(e);\n }\n }\n\n // evaluate postrun\n if (postrun) asyncCallback(this, postrun);\n\n return this;\n};\n\nprototype.dirty = function(item) {\n this._redraw = true;\n this._renderer && this._renderer.dirty(item);\n};\n\n// -- GET / SET ----\n\nprototype.container = function() {\n return this._el;\n};\n\nprototype.scenegraph = function() {\n return this._scenegraph;\n};\n\nprototype.origin = function() {\n return this._origin.slice();\n};\n\nfunction lookupSignal(view, name) {\n return view._signals.hasOwnProperty(name)\n ? view._signals[name]\n : error('Unrecognized signal name: ' + stringValue(name));\n}\n\nprototype.signal = function(name, value, options) {\n var op = lookupSignal(this, name);\n return arguments.length === 1\n ? op.value\n : this.update(op, value, options);\n};\n\nprototype.background = function(_) {\n if (arguments.length) {\n this._background = _;\n this._resize = 1;\n return this;\n } else {\n return this._background;\n }\n};\n\nprototype.width = function(_) {\n return arguments.length ? this.signal('width', _) : this.signal('width');\n};\n\nprototype.height = function(_) {\n return arguments.length ? this.signal('height', _) : this.signal('height');\n};\n\nprototype.padding = function(_) {\n return arguments.length ? this.signal('padding', _) : this.signal('padding');\n};\n\nprototype.autosize = function(_) {\n return arguments.length ? this.signal('autosize', _) : this.signal('autosize');\n};\n\nprototype.renderer = function(type) {\n if (!arguments.length) return this._renderType;\n if (!renderModule(type)) error('Unrecognized renderer type: ' + type);\n if (type !== this._renderType) {\n this._renderType = type;\n this._resetRenderer();\n }\n return this;\n};\n\nprototype.tooltip = function(handler) {\n if (!arguments.length) return this._tooltip;\n if (handler !== this._tooltip) {\n this._tooltip = handler;\n this._resetRenderer();\n }\n return this;\n};\n\nprototype.loader = function(loader) {\n if (!arguments.length) return this._loader;\n if (loader !== this._loader) {\n Dataflow.prototype.loader.call(this, loader);\n this._resetRenderer();\n }\n return this;\n};\n\nprototype.resize = function() {\n // set flag to perform autosize\n this._autosize = 1;\n // touch autosize signal to ensure top-level ViewLayout runs\n return this.touch(lookupSignal(this, 'autosize'));\n};\n\nprototype._resetRenderer = function() {\n if (this._renderer) {\n this._renderer = null;\n this.initialize(this._el, this._elBind);\n }\n};\n\n// -- SIZING ----\nprototype._resizeView = resizeView;\n\n// -- EVENT HANDLING ----\n\nprototype.addEventListener = function(type, handler, options) {\n var callback = handler;\n if (!(options && options.trap === false)) {\n // wrap callback in error handler\n callback = trap(this, handler);\n callback.raw = handler;\n }\n this._handler.on(type, callback);\n return this;\n};\n\nprototype.removeEventListener = function(type, handler) {\n var handlers = this._handler.handlers(type),\n i = handlers.length, h, t;\n\n // search registered handlers, remove if match found\n while (--i >= 0) {\n t = handlers[i].type;\n h = handlers[i].handler;\n if (type === t && (handler === h || handler === h.raw)) {\n this._handler.off(t, h);\n break;\n }\n }\n return this;\n};\n\nprototype.addResizeListener = function(handler) {\n var l = this._resizeListeners;\n if (l.indexOf(handler) < 0) {\n // add handler if it isn't already registered\n // note: error trapping handled elsewhere, so\n // no need to wrap handlers here\n l.push(handler);\n }\n return this;\n};\n\nprototype.removeResizeListener = function(handler) {\n var l = this._resizeListeners,\n i = l.indexOf(handler);\n if (i >= 0) {\n l.splice(i, 1);\n }\n return this;\n};\n\nfunction findOperatorHandler(op, handler) {\n var t = op._targets || [],\n h = t.filter(function(op) {\n var u = op._update;\n return u && u.handler === handler;\n });\n return h.length ? h[0] : null;\n}\n\nfunction addOperatorListener(view, name, op, handler) {\n var h = findOperatorHandler(op, handler);\n if (!h) {\n h = trap(this, function() { handler(name, op.value); });\n h.handler = handler;\n view.on(op, null, h);\n }\n return view;\n}\n\nfunction removeOperatorListener(view, op, handler) {\n var h = findOperatorHandler(op, handler);\n if (h) op._targets.remove(h);\n return view;\n}\n\nprototype.addSignalListener = function(name, handler) {\n return addOperatorListener(this, name, lookupSignal(this, name), handler);\n};\n\nprototype.removeSignalListener = function(name, handler) {\n return removeOperatorListener(this, lookupSignal(this, name), handler);\n};\n\nprototype.addDataListener = function(name, handler) {\n return addOperatorListener(this, name, dataref(this, name).values, handler);\n};\n\nprototype.removeDataListener = function(name, handler) {\n return removeOperatorListener(this, dataref(this, name).values, handler);\n};\n\nprototype.preventDefault = function(_) {\n if (arguments.length) {\n this._preventDefault = _;\n return this;\n } else {\n return this._preventDefault;\n }\n};\n\nprototype.timer = timer;\nprototype.events = events;\nprototype.finalize = finalize;\nprototype.hover = hover;\n\n// -- DATA ----\nprototype.data = data;\nprototype.change = change;\nprototype.insert = insert;\nprototype.remove = remove;\n\n// -- SCALES --\nprototype.scale = scale;\n\n// -- INITIALIZATION ----\nprototype.initialize = initialize;\n\n// -- HEADLESS RENDERING ----\nprototype.toImageURL = renderToImageURL;\nprototype.toCanvas = renderToCanvas;\nprototype.toSVG = renderToSVG;\n\n// -- SAVE / RESTORE STATE ----\nprototype.getState = getState;\nprototype.setState = setState;\n","import {CallExpression, parse} from 'vega-expression';\nimport {codeGenerator, codegenParams, SignalPrefix} from 'vega-functions';\nimport {error, isString, stringValue} from 'vega-util';\n\nexport default function(expr, scope, preamble) {\n var params = {}, ast, gen;\n\n // parse the expression to an abstract syntax tree (ast)\n try {\n expr = isString(expr) ? expr : (stringValue(expr) + '');\n ast = parse(expr);\n } catch (err) {\n error('Expression parse error: ' + expr);\n }\n\n // analyze ast function calls for dependencies\n ast.visit(function visitor(node) {\n if (node.type !== CallExpression) return;\n var name = node.callee.name,\n visit = codegenParams.visitors[name];\n if (visit) visit(name, node.arguments, scope, params);\n });\n\n // perform code generation\n gen = codeGenerator(ast);\n\n // collect signal dependencies\n gen.globals.forEach(function(name) {\n var signalName = SignalPrefix + name;\n if (!params.hasOwnProperty(signalName) && scope.getSignal(name)) {\n params[signalName] = scope.signalRef(name);\n }\n });\n\n // return generated expression code and dependencies\n return {\n $expr: preamble ? preamble + 'return(' + gen.code + ');' : gen.code,\n $fields: gen.fields,\n $params: params\n };\n}\n","import {isObject} from 'vega-util';\n\nexport function Entry(type, value, params, parent) {\n this.id = -1;\n this.type = type;\n this.value = value;\n this.params = params;\n if (parent) this.parent = parent;\n}\n\nexport function entry(type, value, params, parent) {\n return new Entry(type, value, params, parent);\n}\n\nexport function operator(value, params) {\n return entry('operator', value, params);\n}\n\n// -----\n\nexport function ref(op) {\n var ref = {$ref: op.id};\n // if operator not yet registered, cache ref to resolve later\n if (op.id < 0) (op.refs = op.refs || []).push(ref);\n return ref;\n}\n\nexport var tupleidRef = {\n $tupleid: 1,\n toString: function() { return ':_tupleid_:'; }\n};\n\nexport function fieldRef(field, name) {\n return name ? {$field: field, $name: name} : {$field: field};\n}\n\nexport var keyFieldRef = fieldRef('key');\n\nexport function compareRef(fields, orders) {\n return {$compare: fields, $order: orders};\n}\n\nexport function keyRef(fields, flat) {\n var ref = {$key: fields};\n if (flat) ref.$flat = true;\n return ref;\n}\n\n// -----\n\nexport var Ascending = 'ascending';\n\nexport var Descending = 'descending';\n\nexport function sortKey(sort) {\n return !isObject(sort) ? ''\n : (sort.order === Descending ? '-' : '+')\n + aggrField(sort.op, sort.field);\n}\n\nexport function aggrField(op, field) {\n return (op && op.signal ? '$' + op.signal : op || '')\n + (op && field ? '_' : '')\n + (field && field.signal ? '$' + field.signal : field || '');\n}\n\n// -----\n\nexport var Scope = 'scope';\n\nexport var View = 'view';\n\nexport function isSignal(_) {\n return _ && _.signal;\n}\n\nexport function isExpr(_) {\n return _ && _.expr;\n}\n\nexport function hasSignal(_) {\n if (isSignal(_)) return true;\n if (isObject(_)) for (var key in _) {\n if (hasSignal(_[key])) return true;\n }\n return false;\n}\n\nexport function value(specValue, defaultValue) {\n return specValue != null ? specValue : defaultValue;\n}\n\nexport function deref(v) {\n return v && v.signal || v;\n}\n","/**\n * Parse an event selector string.\n * Returns an array of event stream definitions.\n */\nexport default function(selector, source, marks) {\n DEFAULT_SOURCE = source || VIEW;\n MARKS = marks || DEFAULT_MARKS;\n return parseMerge(selector.trim()).map(parseSelector);\n}\n\nvar VIEW = 'view',\n LBRACK = '[',\n RBRACK = ']',\n LBRACE = '{',\n RBRACE = '}',\n COLON = ':',\n COMMA = ',',\n NAME = '@',\n GT = '>',\n ILLEGAL = /[[\\]{}]/,\n DEFAULT_SOURCE,\n MARKS,\n DEFAULT_MARKS = {\n '*': 1,\n arc: 1,\n area: 1,\n group: 1,\n image: 1,\n line: 1,\n path: 1,\n rect: 1,\n rule: 1,\n shape: 1,\n symbol: 1,\n text: 1,\n trail: 1\n };\n\nfunction isMarkType(type) {\n return MARKS.hasOwnProperty(type);\n}\n\nfunction find(s, i, endChar, pushChar, popChar) {\n var count = 0,\n n = s.length,\n c;\n for (; i= 0) --count;\n else if (pushChar && pushChar.indexOf(c) >= 0) ++count;\n }\n return i;\n}\n\nfunction parseMerge(s) {\n var output = [],\n start = 0,\n n = s.length,\n i = 0;\n\n while (i < n) {\n i = find(s, i, COMMA, LBRACK + LBRACE, RBRACK + RBRACE);\n output.push(s.substring(start, i).trim());\n start = ++i;\n }\n\n if (output.length === 0) {\n throw 'Empty event selector: ' + s;\n }\n return output;\n}\n\nfunction parseSelector(s) {\n return s[0] === '['\n ? parseBetween(s)\n : parseStream(s);\n}\n\nfunction parseBetween(s) {\n var n = s.length,\n i = 1,\n b, stream;\n\n i = find(s, i, RBRACK, LBRACK, RBRACK);\n if (i === n) {\n throw 'Empty between selector: ' + s;\n }\n\n b = parseMerge(s.substring(1, i));\n if (b.length !== 2) {\n throw 'Between selector must have two elements: ' + s;\n }\n\n s = s.slice(i + 1).trim();\n if (s[0] !== GT) {\n throw 'Expected \\'>\\' after between selector: ' + s;\n }\n\n b = b.map(parseSelector);\n\n stream = parseSelector(s.slice(1).trim());\n if (stream.between) {\n return {\n between: b,\n stream: stream\n };\n } else {\n stream.between = b;\n }\n\n return stream;\n}\n\nfunction parseStream(s) {\n var stream = {source: DEFAULT_SOURCE},\n source = [],\n throttle = [0, 0],\n markname = 0,\n start = 0,\n n = s.length,\n i = 0, j,\n filter;\n\n // extract throttle from end\n if (s[n-1] === RBRACE) {\n i = s.lastIndexOf(LBRACE);\n if (i >= 0) {\n try {\n throttle = parseThrottle(s.substring(i+1, n-1));\n } catch (e) {\n throw 'Invalid throttle specification: ' + s;\n }\n s = s.slice(0, i).trim();\n n = s.length;\n } else throw 'Unmatched right brace: ' + s;\n i = 0;\n }\n\n if (!n) throw s;\n\n // set name flag based on first char\n if (s[0] === NAME) markname = ++i;\n\n // extract first part of multi-part stream selector\n j = find(s, i, COLON);\n if (j < n) {\n source.push(s.substring(start, j).trim());\n start = i = ++j;\n }\n\n // extract remaining part of stream selector\n i = find(s, i, LBRACK);\n if (i === n) {\n source.push(s.substring(start, n).trim());\n } else {\n source.push(s.substring(start, i).trim());\n filter = [];\n start = ++i;\n if (start === n) throw 'Unmatched left bracket: ' + s;\n }\n\n // extract filters\n while (i < n) {\n i = find(s, i, RBRACK);\n if (i === n) throw 'Unmatched left bracket: ' + s;\n filter.push(s.substring(start, i).trim());\n if (i < n-1 && s[++i] !== LBRACK) throw 'Expected left bracket: ' + s;\n start = ++i;\n }\n\n // marshall event stream specification\n if (!(n = source.length) || ILLEGAL.test(source[n-1])) {\n throw 'Invalid event selector: ' + s;\n }\n\n if (n > 1) {\n stream.type = source[1];\n if (markname) {\n stream.markname = source[0].slice(1);\n } else if (isMarkType(source[0])) {\n stream.marktype = source[0];\n } else {\n stream.source = source[0];\n }\n } else {\n stream.type = source[0];\n }\n if (stream.type.slice(-1) === '!') {\n stream.consume = true;\n stream.type = stream.type.slice(0, -1)\n }\n if (filter != null) stream.filter = filter;\n if (throttle[0]) stream.throttle = throttle[0];\n if (throttle[1]) stream.debounce = throttle[1];\n\n return stream;\n}\n\nfunction parseThrottle(s) {\n var a = s.split(COMMA);\n if (!s.length || a.length > 2) throw s;\n return a.map(function(_) {\n var x = +_;\n if (x !== x) throw s;\n return x;\n });\n}\n","import {entry} from './util';\n\nfunction transform(name) {\n return function(params, value, parent) {\n return entry(name, value, params || undefined, parent);\n };\n}\n\nexport var Aggregate = transform('aggregate');\nexport var AxisTicks = transform('axisticks');\nexport var Bound = transform('bound');\nexport var Collect = transform('collect');\nexport var Compare = transform('compare');\nexport var DataJoin = transform('datajoin');\nexport var Encode = transform('encode');\nexport var Expression = transform('expression');\nexport var Extent = transform('extent');\nexport var Facet = transform('facet');\nexport var Field = transform('field');\nexport var Key = transform('key');\nexport var LegendEntries = transform('legendentries');\nexport var Load = transform('load');\nexport var Mark = transform('mark');\nexport var MultiExtent = transform('multiextent');\nexport var MultiValues = transform('multivalues');\nexport var Overlap = transform('overlap');\nexport var Params = transform('params');\nexport var PreFacet = transform('prefacet');\nexport var Projection = transform('projection');\nexport var Proxy = transform('proxy');\nexport var Relay = transform('relay');\nexport var Render = transform('render');\nexport var Scale = transform('scale');\nexport var Sieve = transform('sieve');\nexport var SortItems = transform('sortitems');\nexport var ViewLayout = transform('viewlayout');\nexport var Values = transform('values');\n","export const Top = 'top';\nexport const Left = 'left';\nexport const Right = 'right';\nexport const Bottom = 'bottom';\nexport const Center = 'center';\n\nexport const Vertical = 'vertical';\n\nexport const Start = 'start';\nexport const Middle = 'middle';\nexport const End = 'end';\n\nexport const Index = 'index';\nexport const Label = 'label';\nexport const Offset = 'offset';\nexport const Perc = 'perc';\nexport const Perc2 = 'perc2';\nexport const Size = 'size';\nexport const Value = 'value';\n\nexport const GuideLabelStyle = 'guide-label';\nexport const GuideTitleStyle = 'guide-title';\nexport const GroupTitleStyle = 'group-title';\n\nexport const Symbols = 'symbol';\nexport const Gradient = 'gradient';\nexport const Discrete = 'discrete';\n\n// Encoding channels supported by legends\n// In priority order of 'canonical' scale\nexport const LegendScales = [\n 'size',\n 'shape',\n 'fill',\n 'stroke',\n 'strokeWidth',\n 'strokeDash',\n 'opacity'\n];\n\nexport const Skip = {\n name: 1,\n interactive: 1\n};\n\nexport const zero = {value: 0};\nexport const one = {value: 1};\n","import {toSet} from 'vega-util';\n\nvar Skip = toSet(['rule']),\n Swap = toSet(['group', 'image', 'rect']);\n\nexport default function(encode, marktype) {\n var code = '';\n\n if (Skip[marktype]) return code;\n\n if (encode.x2) {\n if (encode.x) {\n if (Swap[marktype]) {\n code += 'if(o.x>o.x2)$=o.x,o.x=o.x2,o.x2=$;';\n }\n code += 'o.width=o.x2-o.x;';\n } else {\n code += 'o.x=o.x2-(o.width||0);';\n }\n }\n\n if (encode.xc) {\n code += 'o.x=o.xc-(o.width||0)/2;';\n }\n\n if (encode.y2) {\n if (encode.y) {\n if (Swap[marktype]) {\n code += 'if(o.y>o.y2)$=o.y,o.y=o.y2,o.y2=$;';\n }\n code += 'o.height=o.y2-o.y;';\n } else {\n code += 'o.y=o.y2-(o.height||0);';\n }\n }\n\n if (encode.yc) {\n code += 'o.y=o.yc-(o.height||0)/2;';\n }\n\n return code;\n}\n","import {Left, Right, Center, Start, End, Vertical} from './constants';\nimport {value} from '../../util';\nimport {stringValue} from 'vega-util';\n\nexport function lookup(spec, config) {\n const _ = name => value(spec[name], config[name]);\n\n _.isVertical = s => Vertical === value(\n spec.direction,\n config.direction || (s ? config.symbolDirection : config.gradientDirection)\n );\n\n _.gradientLength = () => value(\n spec.gradientLength,\n config.gradientLength || config.gradientWidth\n );\n\n _.gradientThickness = () => value(\n spec.gradientThickness,\n config.gradientThickness || config.gradientHeight\n );\n\n _.entryColumns = () => value(\n spec.columns,\n value(config.columns, +_.isVertical(true))\n );\n\n return _;\n}\n\nexport function getEncoding(name, encode) {\n var v = encode && (\n (encode.update && encode.update[name]) ||\n (encode.enter && encode.enter[name])\n );\n return v && v.signal ? v : v ? v.value : null;\n}\n\nexport function getStyle(name, scope, style) {\n var s = scope.config.style[style];\n return s && s[name];\n}\n\nexport function anchorExpr(s, e, m) {\n return `item.anchor === \"${Start}\" ? ${s} : item.anchor === \"${End}\" ? ${e} : ${m}`;\n}\n\nexport const alignExpr = anchorExpr(\n stringValue(Left),\n stringValue(Right),\n stringValue(Center)\n);\n","import {entry, ref, keyFieldRef, aggrField, sortKey} from './util';\nimport {Aggregate, Collect} from './transforms';\nimport {isString} from 'vega-util';\n\nexport default function DataScope(scope, input, output, values, aggr) {\n this.scope = scope; // parent scope object\n this.input = input; // first operator in pipeline (tuple input)\n this.output = output; // last operator in pipeline (tuple output)\n this.values = values; // operator for accessing tuples (but not tuple flow)\n\n // last aggregate in transform pipeline\n this.aggregate = aggr;\n\n // lookup table of field indices\n this.index = {};\n}\n\nDataScope.fromEntries = function(scope, entries) {\n var n = entries.length,\n i = 1,\n input = entries[0],\n values = entries[n-1],\n output = entries[n-2],\n aggr = null;\n\n if (input && input.type === 'load') {\n input = entries[1];\n }\n\n // add operator entries to this scope, wire up pulse chain\n scope.add(entries[0]);\n for (; i 0;\n};\n\nprototype.toRuntime = function() {\n this.finish();\n return {\n background: this.background,\n operators: this.operators,\n streams: this.streams,\n updates: this.updates,\n bindings: this.bindings,\n eventConfig: this.eventConfig\n };\n};\n\nprototype.id = function() {\n return (this._subid ? this._subid + ':' : 0) + this._id++;\n};\n\nprototype.add = function(op) {\n this.operators.push(op);\n op.id = this.id();\n // if pre-registration references exist, resolve them now\n if (op.refs) {\n op.refs.forEach(function(ref) { ref.$ref = op.id; });\n op.refs = null;\n }\n return op;\n};\n\nprototype.proxy = function(op) {\n var vref = op instanceof Entry ? ref(op) : op;\n return this.add(Proxy({value: vref}));\n};\n\nprototype.addStream = function(stream) {\n this.streams.push(stream);\n stream.id = this.id();\n return stream;\n};\n\nprototype.addUpdate = function(update) {\n this.updates.push(update);\n return update;\n};\n\n// Apply metadata\nprototype.finish = function() {\n var name, ds;\n\n // annotate root\n if (this.root) this.root.root = true;\n\n // annotate signals\n for (name in this.signals) {\n this.signals[name].signal = name;\n }\n\n // annotate scales\n for (name in this.scales) {\n this.scales[name].scale = name;\n }\n\n // annotate data sets\n function annotate(op, name, type) {\n var data, list;\n if (op) {\n data = op.data || (op.data = {});\n list = data[name] || (data[name] = []);\n list.push(type);\n }\n }\n for (name in this.data) {\n ds = this.data[name];\n annotate(ds.input, name, 'input');\n annotate(ds.output, name, 'output');\n annotate(ds.values, name, 'values');\n for (var field in ds.index) {\n annotate(ds.index[field], name, 'index:' + field);\n }\n }\n\n return this;\n};\n\n// ----\n\nprototype.pushState = function(encode, parent, lookup) {\n this._encode.push(ref(this.add(Sieve({pulse: encode}))));\n this._parent.push(parent);\n this._lookup.push(lookup ? ref(this.proxy(lookup)) : null);\n this._markpath.push(-1);\n};\n\nprototype.popState = function() {\n this._encode.pop();\n this._parent.pop();\n this._lookup.pop();\n this._markpath.pop();\n};\n\nprototype.parent = function() {\n return peek(this._parent);\n};\n\nprototype.encode = function() {\n return peek(this._encode);\n};\n\nprototype.lookup = function() {\n return peek(this._lookup);\n};\n\nprototype.markpath = function() {\n var p = this._markpath;\n return ++p[p.length-1];\n};\n\n// ----\n\nprototype.fieldRef = function(field, name) {\n if (isString(field)) return fieldRef(field, name);\n if (!field.signal) {\n error('Unsupported field reference: ' + stringValue(field));\n }\n\n var s = field.signal,\n f = this.field[s],\n params;\n\n if (!f) {\n params = {name: this.signalRef(s)};\n if (name) params.as = name;\n this.field[s] = f = ref(this.add(Field(params)));\n }\n return f;\n};\n\nprototype.compareRef = function(cmp, stable) {\n function check(_) {\n if (isSignal(_)) {\n signal = true;\n return scope.signalRef(_.signal);\n } else if (isExpr(_)) {\n signal = true;\n return scope.exprRef(_.expr);\n } else {\n return _;\n }\n }\n\n var scope = this,\n signal = false,\n fields = array(cmp.field).map(check),\n orders = array(cmp.order).map(check);\n\n if (stable) {\n fields.push(tupleidRef);\n }\n\n return signal\n ? ref(this.add(Compare({fields: fields, orders: orders})))\n : compareRef(fields, orders);\n};\n\nprototype.keyRef = function(fields, flat) {\n function check(_) {\n if (isSignal(_)) {\n signal = true;\n return ref(sig[_.signal]);\n } else {\n return _;\n }\n }\n\n var sig = this.signals,\n signal = false;\n fields = array(fields).map(check);\n\n return signal\n ? ref(this.add(Key({fields: fields, flat: flat})))\n : keyRef(fields, flat);\n};\n\nprototype.sortRef = function(sort) {\n if (!sort) return sort;\n\n // including id ensures stable sorting\n var a = [aggrField(sort.op, sort.field), tupleidRef],\n o = sort.order || Ascending;\n\n return o.signal\n ? ref(this.add(Compare({\n fields: a,\n orders: [o = this.signalRef(o.signal), o]\n })))\n : compareRef(a, [o, o]);\n};\n\n// ----\n\nprototype.event = function(source, type) {\n var key = source + ':' + type;\n if (!this.events[key]) {\n var id = this.id();\n this.streams.push({\n id: id,\n source: source,\n type: type\n });\n this.events[key] = id;\n }\n return this.events[key];\n};\n\n// ----\n\nprototype.addSignal = function(name, value) {\n if (this.signals.hasOwnProperty(name)) {\n error('Duplicate signal name: ' + stringValue(name));\n }\n var op = value instanceof Entry ? value : this.add(operator(value));\n return this.signals[name] = op;\n};\n\nprototype.getSignal = function(name) {\n if (!this.signals[name]) {\n error('Unrecognized signal name: ' + stringValue(name));\n }\n return this.signals[name];\n};\n\nprototype.signalRef = function(s) {\n if (this.signals[s]) {\n return ref(this.signals[s]);\n } else if (!this.lambdas.hasOwnProperty(s)) {\n this.lambdas[s] = this.add(operator(null));\n }\n return ref(this.lambdas[s]);\n};\n\nprototype.parseLambdas = function() {\n var code = Object.keys(this.lambdas);\n for (var i=0, n=code.length; i 0 ? ',' : '')\n + (isObject(value)\n ? (value.signal || propertyLambda(value))\n : stringValue(value));\n }\n return code + ']';\n}\n\nfunction objectLambda(obj) {\n var code = '{',\n i = 0,\n key, value;\n\n for (key in obj) {\n value = obj[key];\n code += (++i > 1 ? ',' : '')\n + stringValue(key) + ':'\n + (isObject(value)\n ? (value.signal || propertyLambda(value))\n : stringValue(value));\n }\n return code + '}';\n}\n\nprototype.exprRef = function(code, name) {\n var params = {expr: parseExpression(code, this)};\n if (name) params.expr.$name = name;\n return ref(this.add(Expression(params)));\n}\n\nprototype.addBinding = function(name, bind) {\n if (!this.bindings) {\n error('Nested signals do not support binding: ' + stringValue(name));\n }\n this.bindings.push(extend({signal: name}, bind));\n};\n\n// ----\n\nprototype.addScaleProj = function(name, transform) {\n if (this.scales.hasOwnProperty(name)) {\n error('Duplicate scale or projection name: ' + stringValue(name));\n }\n this.scales[name] = this.add(transform);\n};\n\nprototype.addScale = function(name, params) {\n this.addScaleProj(name, Scale(params));\n};\n\nprototype.addProjection = function(name, params) {\n this.addScaleProj(name, Projection(params));\n};\n\nprototype.getScale = function(name) {\n if (!this.scales[name]) {\n error('Unrecognized scale name: ' + stringValue(name));\n }\n return this.scales[name];\n};\n\nprototype.projectionRef =\nprototype.scaleRef = function(name) {\n return ref(this.getScale(name));\n};\n\nprototype.projectionType =\nprototype.scaleType = function(name) {\n return this.getScale(name).params.type;\n};\n\n// ----\n\nprototype.addData = function(name, dataScope) {\n if (this.data.hasOwnProperty(name)) {\n error('Duplicate data set name: ' + stringValue(name));\n }\n return (this.data[name] = dataScope);\n};\n\nprototype.getData = function(name) {\n if (!this.data[name]) {\n error('Undefined data set name: ' + stringValue(name));\n }\n return this.data[name];\n};\n\nprototype.addDataPipeline = function(name, entries) {\n if (this.data.hasOwnProperty(name)) {\n error('Duplicate data set name: ' + stringValue(name));\n }\n return this.addData(name, DataScope.fromEntries(this, entries));\n};\n","// -- Transforms -----\n\nimport {extend} from 'vega-util';\nimport {transforms} from 'vega-dataflow';\nimport * as tx from 'vega-transforms';\nimport * as vtx from 'vega-view-transforms';\nimport * as encode from 'vega-encode';\nimport * as geo from 'vega-geo';\nimport * as force from 'vega-force';\nimport * as tree from 'vega-hierarchy';\nimport * as voronoi from 'vega-voronoi';\nimport * as wordcloud from 'vega-wordcloud';\nimport * as xf from 'vega-crossfilter';\nextend(transforms, tx, vtx, encode, geo, force, tree, voronoi, wordcloud, xf);\n\n\n// -- Exports -----\n\nexport {\n version\n} from './package.json';\n\nexport * from 'vega-statistics';\n\nexport * from 'vega-util';\n\nexport * from 'vega-loader';\n\nexport * from 'vega-scenegraph';\n\nexport {\n Dataflow,\n EventStream,\n Parameters,\n Pulse,\n MultiPulse,\n Operator,\n Transform,\n changeset,\n ingest,\n isTuple,\n definition,\n transform,\n transforms,\n tupleid\n} from 'vega-dataflow';\n\nexport {\n scale,\n scheme,\n interpolate,\n interpolateColors,\n interpolateRange,\n timeInterval,\n quantizeInterpolator\n} from 'vega-scale';\n\nexport {\n projection\n} from 'vega-projection';\n\nexport {\n View\n} from 'vega-view';\n\nexport {\n expressionFunction,\n formatLocale,\n timeFormatLocale\n} from 'vega-functions';\n\nexport {\n parse\n} from 'vega-parser';\n\nexport {\n parse as runtime,\n context as runtimeContext\n} from 'vega-runtime';\n","import { extent } from \"d3-array\";\nimport { inferTypes } from \"vega\";\nexport class Data {\n static fromArray(arr) {\n const fields = getFieldsFromArr(arr);\n const inferredTypes = inferTypes(arr, fields);\n const schema = fields.reduce((schema, f) => {\n const descriptor = {\n type: inferredTypes[f],\n cardinality: getCardinalityFromArr(arr, f)\n };\n if (descriptor.type !== FieldType.STRING &&\n descriptor.type !== FieldType.BOOLEAN) {\n descriptor[\"extent\"] = extent(arr, d => d[f]);\n }\n schema[f] = descriptor;\n return schema;\n }, {});\n const numRows = arr.length;\n let asp = [Data.getNumRowsDeclaration(numRows)];\n asp = fields.reduce((asp, f) => {\n asp.push(Data.getFieldDeclaration(f, schema[f].type));\n asp.push(Data.getCardinalityDeclaration(f, schema[f].cardinality));\n // TODO: figure out how to handle non ints\n if (schema[f].extent && schema[f].type === FieldType.INTEGER) {\n asp.push(Data.getExtentDeclaration(f, schema[f].extent[0], schema[f].extent[1]));\n }\n return asp;\n }, asp);\n return {\n fields,\n schema,\n numRows,\n asp: asp.join(\"\\n\"),\n data: arr\n };\n }\n static getNumRowsDeclaration(numRows) {\n return `num_rows(${numRows}).`;\n }\n static getFieldDeclaration(fieldName, fieldType) {\n return `fieldtype(${cleanFieldName(fieldName)},${fieldType}).`;\n }\n static getCardinalityDeclaration(fieldName, cardinality) {\n return `cardinality(${cleanFieldName(fieldName)},${cardinality}).`;\n }\n static getExtentDeclaration(fieldName, min, max) {\n if (!Number.isInteger(min) || !Number.isInteger(max)) {\n throw new Error(`Extent is yet supported for floats: ${min} ${max}`);\n }\n return `extent(${cleanFieldName(fieldName)},${min},${max}).`;\n }\n}\nfunction cleanFieldName(fieldName) {\n return `\"${fieldName}\"`;\n}\nfunction getFieldsFromArr(arr) {\n if (!arr) {\n return [];\n }\n return Object.keys(arr[0]);\n}\nfunction getCardinalityFromArr(arr, field) {\n const unique = arr.reduce((set, d) => {\n set.add(d[field]);\n return set;\n }, new Set());\n return unique.size;\n}\nexport class FieldType {\n}\nFieldType.STRING = \"string\";\nFieldType.BOOLEAN = \"boolean\";\nFieldType.INTEGER = \"integer\";\nFieldType.NUMBER = \"number\";\nFieldType.DATE = \"date\";\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVVsQyxNQUFNLE9BQU8sSUFBSTtJQUNmLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBUTtRQUN2QixNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTlDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekMsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO2dCQUN0QixXQUFXLEVBQUUscUJBQXFCLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQzthQUMzQyxDQUFDO1lBRUYsSUFDRSxVQUFVLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxNQUFNO2dCQUNwQyxVQUFVLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxPQUFPLEVBQ3JDO2dCQUNBLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDL0M7WUFFRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDO1lBRXZCLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVQLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFFM0IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUVoRCxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUM3QixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDdEQsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDO1lBRW5FLDBDQUEwQztZQUMxQyxJQUFJLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsT0FBTyxFQUFFO2dCQUM1RCxHQUFHLENBQUMsSUFBSSxDQUNOLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQ3ZFLENBQUM7YUFDSDtZQUVELE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO1FBRVIsT0FBTztZQUNMLE1BQU07WUFDTixNQUFNO1lBQ04sT0FBTztZQUNQLEdBQUcsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztZQUNuQixJQUFJLEVBQUUsR0FBRztTQUNWLENBQUM7SUFDSixDQUFDO0lBRUQsTUFBTSxDQUFDLHFCQUFxQixDQUFDLE9BQWU7UUFDMUMsT0FBTyxZQUFZLE9BQU8sSUFBSSxDQUFDO0lBQ2pDLENBQUM7SUFFRCxNQUFNLENBQUMsbUJBQW1CLENBQ3hCLFNBQWlCLEVBQ2pCLFNBQXdCO1FBRXhCLE9BQU8sYUFBYSxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksU0FBUyxJQUFJLENBQUM7SUFDakUsQ0FBQztJQUVELE1BQU0sQ0FBQyx5QkFBeUIsQ0FDOUIsU0FBaUIsRUFDakIsV0FBbUI7UUFFbkIsT0FBTyxlQUFlLGNBQWMsQ0FBQyxTQUFTLENBQUMsSUFBSSxXQUFXLElBQUksQ0FBQztJQUNyRSxDQUFDO0lBRUQsTUFBTSxDQUFDLG9CQUFvQixDQUN6QixTQUFpQixFQUNqQixHQUFXLEVBQ1gsR0FBVztRQUVYLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNwRCxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztTQUN0RTtRQUVELE9BQU8sVUFBVSxjQUFjLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0lBQy9ELENBQUM7Q0FDRjtBQUVELFNBQVMsY0FBYyxDQUFDLFNBQWlCO0lBQ3ZDLE9BQU8sSUFBSSxTQUFTLEdBQUcsQ0FBQztBQUMxQixDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFRO0lBQ2hDLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDUixPQUFPLEVBQUUsQ0FBQztLQUNYO0lBRUQsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUFDLEdBQVEsRUFBRSxLQUFhO0lBQ3BELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDbkMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNsQixPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUMsRUFBRSxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFFZCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUM7QUFDckIsQ0FBQztBQVlELE1BQU0sT0FBTyxTQUFTOztBQUNiLGdCQUFNLEdBQWEsUUFBUSxDQUFDO0FBQzVCLGlCQUFPLEdBQWMsU0FBUyxDQUFDO0FBQy9CLGlCQUFPLEdBQWMsU0FBUyxDQUFDO0FBQy9CLGdCQUFNLEdBQWEsUUFBUSxDQUFDO0FBQzVCLGNBQUksR0FBVyxNQUFNLENBQUMifQ==","export function doesMatchRegex(s, regex) {\n const match = s.match(regex);\n return !!match;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxjQUFjLENBQUMsQ0FBUyxFQUFFLEtBQWE7SUFDckQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDakIsQ0FBQyJ9","import { doesMatchRegex } from './util';\nexport class Constraint {\n static isHardConstraint(constraint) {\n return constraint.type === Constraint.HARD_TYPE;\n }\n static isSoftConstraint(constraint) {\n return constraint.type === Constraint.SOFT_TYPE;\n }\n static getUniqueName(constraint) {\n return `${constraint.type}-${constraint.subtype}-${constraint.name}`;\n }\n static fromPrefAsp(asp) {\n const matches = doesMatchRegex(asp, PREF_ASP_REGEX);\n if (!matches) {\n throw new Error(`ASP (${asp}) does not match constraint regex.`);\n }\n const [fullMatch, description, code, type, subtype, name, view, parameters,] = PREF_ASP_REGEX.exec(asp);\n const definitions = code\n .trim()\n .split('\\n')\n .map(line => {\n const [fullMatch, definition] = PREF_DEFINITION_REGEX.exec(line);\n return definition;\n });\n return {\n subtype,\n name,\n view,\n parameters,\n description,\n definitions,\n type: type,\n };\n }\n static toPrefAsp(c) {\n const description = `% @constraint ${c.description}`;\n const head = `${c.type}(${c.subtype},${c.name},${c.view},${c.parameters})`;\n const code = c.definitions\n .map(def => {\n return `${head} :- ${def}`;\n })\n .join('\\n')\n .trim();\n return `${description}\\n${code}`;\n }\n}\nConstraint.HARD_TYPE = 'hard';\nConstraint.SOFT_TYPE = 'soft';\nconst PREF_ASP_REGEX = /%\\s*@constraint (.*)\\n((?:(hard|soft)\\((\\w+),(\\w+),(\\w+),(\\w+)\\).*\\n?)+)/;\nconst PREF_DEFINITION_REGEX = /:-\\s*(.*)/;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RyYWludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC9jb25zdHJhaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFrQnhDLE1BQU0sT0FBTyxVQUFVO0lBSXJCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUE0QjtRQUNsRCxPQUFPLFVBQVUsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLFNBQVMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFVBQTRCO1FBQ2xELE9BQU8sVUFBVSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsU0FBUyxDQUFDO0lBQ2xELENBQUM7SUFFRCxNQUFNLENBQUMsYUFBYSxDQUFDLFVBQTRCO1FBQy9DLE9BQU8sR0FBRyxVQUFVLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQVc7UUFDNUIsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLEdBQUcsb0NBQW9DLENBQUMsQ0FBQztTQUNsRTtRQUVELE1BQU0sQ0FDSixTQUFTLEVBQ1QsV0FBVyxFQUNYLElBQUksRUFDSixJQUFJLEVBQ0osT0FBTyxFQUNQLElBQUksRUFDSixJQUFJLEVBQ0osVUFBVSxFQUNYLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU3QixNQUFNLFdBQVcsR0FBRyxJQUFJO2FBQ3JCLElBQUksRUFBRTthQUNOLEtBQUssQ0FBQyxJQUFJLENBQUM7YUFDWCxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDVixNQUFNLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqRSxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztRQUVMLE9BQU87WUFDTCxPQUFPO1lBQ1AsSUFBSTtZQUNKLElBQUk7WUFDSixVQUFVO1lBQ1YsV0FBVztZQUNYLFdBQVc7WUFDWCxJQUFJLEVBQUUsSUFBc0I7U0FDN0IsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLENBQW1CO1FBQ2xDLE1BQU0sV0FBVyxHQUFHLGlCQUFpQixDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQztRQUMzRSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVzthQUN2QixHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDVCxPQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxJQUFJLENBQUM7YUFDVixJQUFJLEVBQUUsQ0FBQztRQUVWLE9BQU8sR0FBRyxXQUFXLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDbkMsQ0FBQzs7QUE5RE0sb0JBQVMsR0FBVyxNQUFNLENBQUM7QUFDM0Isb0JBQVMsR0FBVyxNQUFNLENBQUM7QUFrRXBDLE1BQU0sY0FBYyxHQUFHLDBFQUEwRSxDQUFDO0FBQ2xHLE1BQU0scUJBQXFCLEdBQUcsV0FBVyxDQUFDIn0=","import { Constraint, } from './constraint';\nimport { doesMatchRegex } from './util';\nexport class ConstraintDictionary {\n static isSoftConstraintDictionary(dict) {\n if (Object.entries(dict).length === 0) {\n return false;\n }\n const [firstName, firstConstraint] = Object.entries(dict)[0];\n return Constraint.isSoftConstraint(firstConstraint);\n }\n static isHardConstraintDictionary(dict) {\n if (Object.entries(dict).length === 0) {\n return false;\n }\n const [firstName, firstConstraint] = Object.entries(dict)[0];\n return Constraint.isHardConstraint(firstConstraint);\n }\n static fromAsp(prefAsp, weightAsp) {\n const prefMatches = doesMatchRegex(prefAsp, PREF_REGEX);\n let weightDictionary;\n if (!!weightAsp) {\n const weightMatches = doesMatchRegex(weightAsp, WEIGHT_REGEX);\n if (!weightMatches) {\n throw new Error(`Weight ASP: ${weightAsp} does not match weight regex.`);\n }\n const singleWeightAsps = weightAsp.match(WEIGHT_REGEX);\n weightDictionary = singleWeightAsps.reduce((dict, asp) => {\n const [fullMatch, subtype, name, weight] = WEIGHT_REGEX.exec(asp);\n WEIGHT_REGEX.lastIndex = 0;\n const uniqueName = `soft-${subtype}-${name}`;\n dict[uniqueName] = +weight;\n return dict;\n }, {});\n }\n if (!prefMatches) {\n throw new Error(`Pref ASP: ${prefMatches} does not match pref regex.`);\n }\n const singlePrefAsps = prefAsp.match(PREF_REGEX);\n const result = singlePrefAsps.reduce((dict, asp) => {\n const constraint = Constraint.fromPrefAsp(asp);\n const uniqueName = Constraint.getUniqueName(constraint);\n if (!!weightDictionary) {\n constraint.weight = weightDictionary[uniqueName];\n }\n dict[uniqueName] = constraint;\n return dict;\n }, {});\n return result;\n }\n}\nconst PREF_REGEX = /%\\s*@constraint(?:(?:.+)\\n?)+/g;\nconst WEIGHT_REGEX = /soft_weight\\((\\w+),(\\w+),(\\d+)\\).*/g;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RyYWludC1kaWN0aW9uYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL2NvbnN0cmFpbnQtZGljdGlvbmFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxHQUlYLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFNeEMsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixNQUFNLENBQUMsMEJBQTBCLENBQy9CLElBQWdDO1FBRWhDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3JDLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxNQUFNLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0QsT0FBTyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELE1BQU0sQ0FBQywwQkFBMEIsQ0FDL0IsSUFBZ0M7UUFFaEMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDckMsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE1BQU0sQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RCxPQUFPLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFlLEVBQUUsU0FBa0I7UUFDaEQsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUV4RCxJQUFJLGdCQUFnQixDQUFDO1FBQ3JCLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRTtZQUNmLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLFNBQVMsK0JBQStCLENBQUMsQ0FBQzthQUMxRTtZQUVELE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN2RCxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQ3hDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUNaLE1BQU0sQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNsRSxZQUFZLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztnQkFFM0IsTUFBTSxVQUFVLEdBQUcsUUFBUSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztnQkFFM0IsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDLEVBQ0QsRUFBUyxDQUNWLENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLFdBQVcsNkJBQTZCLENBQUMsQ0FBQztTQUN4RTtRQUVELE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FDbEMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDWixNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFeEQsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3JCLFVBQW1DLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQzVFO1lBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFVBQVUsQ0FBQztZQUM5QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsRUFDRCxFQUFnQyxDQUNqQyxDQUFDO1FBRUYsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGO0FBRUQsTUFBTSxVQUFVLEdBQUcsZ0NBQWdDLENBQUM7QUFDcEQsTUFBTSxZQUFZLEdBQUcscUNBQXFDLENBQUMifQ==","import { doesMatchRegex } from \"./util\";\nexport class Facts {\n static toVegaLiteSpecDictionary(facts) {\n const cleanedFacts = facts.map(fact => {\n const cleaned = fact.replace(/\\\"/g, \"\");\n return cleaned;\n });\n return facts2vl(cleanedFacts);\n }\n static toViews(facts) {\n return facts2views(facts);\n }\n static getHardViolations(facts) {\n return facts.filter(f => doesMatchRegex(f, /hard\\(.*/));\n }\n static getSoftViolations(facts) {\n return facts.filter(f => doesMatchRegex(f, /soft\\(.*/));\n }\n static getViewFacts(facts) {\n return facts.filter(f => doesMatchRegex(f, /view_fact\\(.*/));\n }\n}\nconst VIEW_REGEX_CAPTURE = /view\\((.*)\\)/;\nconst FACT_REGEX = /(\\w+)\\(([\\w\\.\\/]+)(,([\\w\\.]+))?(,([\\w\\.]+))?\\)/;\nfunction facts2vl(facts) {\n const views = facts2views(facts);\n const result = views.reduce((dict, v) => {\n dict[v] = facts2vl_single(facts, v);\n return dict;\n }, {});\n return result;\n}\nfunction facts2views(facts) {\n const views = facts\n .filter(fact => {\n return doesMatchRegex(fact, VIEW_REGEX_CAPTURE);\n })\n .map(fact => {\n const extract = VIEW_REGEX_CAPTURE.exec(fact);\n if (extract) {\n const [_, name] = extract;\n return name;\n }\n throw new Error(`Invalid view statement: ${fact}.`);\n });\n return views;\n}\nfunction facts2vl_single(facts, view) {\n let mark;\n const encodings = {};\n for (const value of facts) {\n const extract = FACT_REGEX.exec(value);\n if (!extract) {\n continue;\n }\n const [_, predicate, viz, __, first, ___, second] = extract;\n if (viz !== view) {\n continue;\n }\n if (predicate === \"view\") {\n continue;\n }\n switch (predicate) {\n case \"mark\":\n mark = first;\n break;\n case \"field\":\n case \"type\":\n case \"channel\":\n case \"scale\":\n case \"bin\":\n case \"aggregate\":\n case \"stack\":\n if (!encodings[first]) {\n encodings[first] = {};\n }\n encodings[first][predicate] = second;\n }\n }\n const encoding = {};\n for (const e of Object.keys(encodings)) {\n const enc = encodings[e];\n const scale = {\n ...(enc.scale === \"log\" ? { type: \"log\" } : {}),\n ...(enc.scale === \"zero\" ? { zero: true } : {})\n };\n const insert = {\n type: enc.type,\n ...(enc.aggregate ? { aggregate: enc.aggregate } : {}),\n ...(enc.field ? { field: enc.field } : {}),\n ...(enc.stack ? { stack: enc.stack } : {}),\n ...(enc.bin ? { bin: JSON.parse(enc.bin) } : {}),\n ...(enc.scale ? { scale } : {})\n };\n if (enc.aggregate) {\n encoding;\n }\n encoding[enc.channel] = insert;\n }\n const spec = {\n mark,\n encoding\n };\n return spec;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvZmFjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQU14QyxNQUFNLE9BQU8sS0FBSztJQUNoQixNQUFNLENBQUMsd0JBQXdCLENBQzdCLEtBQWtCO1FBRWxCLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDcEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDeEMsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFrQjtRQUMvQixPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEtBQWtCO1FBQ3pDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEtBQWtCO1FBQ3pDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFrQjtRQUNwQyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztDQUNG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","import { Facts } from \"./facts\";\nexport class Witness {\n static toVegaLiteSpecDictionary(witness) {\n return Facts.toVegaLiteSpecDictionary(witness.facts);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0bmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC93aXRuZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQTZDLE1BQU0sU0FBUyxDQUFDO0FBTzNFLE1BQU0sT0FBTyxPQUFPO0lBQ2xCLE1BQU0sQ0FBQyx3QkFBd0IsQ0FDN0IsT0FBc0I7UUFFdEIsT0FBTyxLQUFLLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELENBQUM7Q0FDRiJ9","import { Witness } from \"./witness\";\nexport class Result {\n static toWitnesses(result) {\n return (result.Call || []).reduce((arr, el) => {\n el.Witnesses.forEach((d, i) => {\n const facts = d.Value; // add line terminator period.\n let costs;\n if (result.Models.Costs) {\n costs = result.Models.Costs[i];\n }\n arr.push({\n costs,\n facts\n });\n });\n return arr;\n }, []);\n }\n static getBestVegaLiteSpecDictionary(result) {\n const witnesses = Result.toWitnesses(result);\n return Witness.toVegaLiteSpecDictionary(witnesses[0]);\n }\n static isSat(result) {\n return result.Result === \"OPTIMUM FOUND\" || result.Result === \"SATISFIABLE\";\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdWx0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL3Jlc3VsdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsT0FBTyxFQUFpQixNQUFNLFdBQVcsQ0FBQztBQUluRCxNQUFNLE9BQU8sTUFBTTtJQUNqQixNQUFNLENBQUMsV0FBVyxDQUFDLE1BQW9CO1FBQ3JDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQVUsRUFBRSxFQUFPLEVBQUUsRUFBRTtZQUN4RCxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxDQUFTLEVBQUUsRUFBRTtnQkFDekMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLDhCQUE4QjtnQkFFckQsSUFBSSxLQUFLLENBQUM7Z0JBRVYsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtvQkFDdkIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNoQztnQkFFRCxHQUFHLENBQUMsSUFBSSxDQUFDO29CQUNQLEtBQUs7b0JBQ0wsS0FBSztpQkFDTixDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQUVELE1BQU0sQ0FBQyw2QkFBNkIsQ0FDbEMsTUFBb0I7UUFFcEIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QyxPQUFPLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFvQjtRQUMvQixPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssZUFBZSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssYUFBYSxDQUFDO0lBQzlFLENBQUM7Q0FDRiJ9","import { Facts } from \"./model\";\nimport { ConstraintDictionary } from \"./model/constraint-dictionary\";\nimport { Result } from \"./model/result\";\nconst tmp = require(\"tmp\");\nconst fs = require(\"fs\");\nconst path = require(\"path\");\nconst { spawnSync } = require(\"child_process\");\ntmp.setGracefulCleanup();\nexport const DEFAULT_OPTIONS = {\n strictHard: true,\n generate: true,\n generateExtraEncodings: true,\n optimize: true,\n generateData: false\n};\nexport class Draco {\n static run(program, options, files) {\n let resolvedFiles = files ? files : [];\n resolvedFiles = resolvedFiles.concat(getFilesFromOptions(options));\n const tmpObj = tmp.fileSync({ postfix: \".lp\" });\n if (program) {\n fs.writeFileSync(tmpObj.name, program);\n resolvedFiles = resolvedFiles.concat([tmpObj.name]);\n }\n const opt = [];\n if (options) {\n if (options.models !== undefined) {\n opt.push(`--models=${options.models}`);\n }\n if (options.randomFreq !== undefined) {\n // opt.push(`--sign-def=3`);\n opt.push(`--rand-freq=${options.randomFreq}`);\n }\n if (options.randomSeed !== undefined) {\n opt.push(`--seed=${options.randomSeed}`);\n }\n }\n const out = runClingoSync(resolvedFiles, opt);\n const result = JSON.parse(out.output[1]);\n return result;\n }\n static runDebug(program, options, files) {\n const result = Draco.run(program, { strictHard: false }, files);\n if (!Result.isSat(result)) {\n return [];\n }\n const witness = Result.toWitnesses(result)[0];\n return Facts.getHardViolations(witness.facts);\n }\n static getProgram(data, query) {\n return `${data.asp}\n${query}`;\n }\n static getSoftConstraints() {\n const softDir = path.resolve(__dirname, \"../model/view/soft\");\n const subtypeDirs = fs\n .readdirSync(softDir)\n .filter(f => fs.statSync(path.join(softDir, f)).isDirectory());\n const result = subtypeDirs.reduce((dict, dir) => {\n const prefFile = path.resolve(softDir, dir, \"pref.lp\");\n const prefContents = fs.readFileSync(prefFile, \"utf8\");\n const weightFile = path.resolve(softDir, dir, \"weight.lp\");\n const weightContents = fs.readFileSync(weightFile, \"utf8\");\n const constraints = ConstraintDictionary.fromAsp(prefContents, weightContents);\n return {\n ...dict,\n ...constraints\n };\n }, {});\n return result;\n }\n}\nfunction runClingoSync(files, options) {\n return spawnSync(\"clingo\", [\"--outf=2\", \"--quiet=1,2,2\", ...options, ...files], {\n encoding: \"utf-8\"\n });\n}\nfunction resolvePathToModelProgram(file) {\n return path.resolve(__dirname, \"../model/program\", file);\n}\nfunction resolvePathToModelView(file) {\n return path.resolve(__dirname, \"../model/view\", file);\n}\nfunction getFilesFromOptions(options) {\n const result = [];\n const resolvedOptions = options\n ? Object.assign(Object.assign({}, DEFAULT_OPTIONS), options)\n : DEFAULT_OPTIONS;\n const { generate, generateExtraEncodings, strictHard, optimize, generateData } = resolvedOptions;\n if (generate && generateExtraEncodings && strictHard && optimize) {\n result.push(resolvePathToModelProgram(\"default.lp\"));\n }\n else {\n result.push(resolvePathToModelProgram(\"../data/index.lp\"));\n result.push(resolvePathToModelView(\"program/base.lp\"));\n if (generate) {\n result.push(resolvePathToModelView(\"generate.lp\"));\n }\n if (generateExtraEncodings) {\n result.push(resolvePathToModelView(\"generate_extra_encodings.lp\"));\n }\n if (strictHard) {\n result.push(resolvePathToModelView(\"hard_integrity.lp\"));\n }\n if (optimize) {\n result.push(resolvePathToModelView(\"optimize.lp\"));\n }\n }\n if (generateData) {\n result.push(resolvePathToModelProgram(\"../data/generate.lp\"));\n result.push(resolvePathToModelProgram(\"../data/grammar.lp\"));\n }\n return result;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhY28uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZHJhY28udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssRUFBZSxNQUFNLFNBQVMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsTUFBTSxFQUFnQixNQUFNLGdCQUFnQixDQUFDO0FBRXRELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzQixNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzdCLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDL0MsR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUM7QUFhekIsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzdCLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFFBQVEsRUFBRSxJQUFJO0lBQ2Qsc0JBQXNCLEVBQUUsSUFBSTtJQUM1QixRQUFRLEVBQUUsSUFBSTtJQUNkLFlBQVksRUFBRSxLQUFLO0NBQ3BCLENBQUM7QUFFRixNQUFNLE9BQU8sS0FBSztJQUNoQixNQUFNLENBQUMsR0FBRyxDQUNSLE9BQWdCLEVBQ2hCLE9BQXNCLEVBQ3RCLEtBQWdCO1FBRWhCLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFdkMsYUFBYSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUVuRSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFaEQsSUFBSSxPQUFPLEVBQUU7WUFDWCxFQUFFLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDdkMsYUFBYSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUNyRDtRQUVELE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksT0FBTyxFQUFFO1lBQ1gsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtnQkFDaEMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO2FBQ3hDO1lBRUQsSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRTtnQkFDcEMsNEJBQTRCO2dCQUM1QixHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7YUFDL0M7WUFFRCxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFO2dCQUNwQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7YUFDMUM7U0FDRjtRQUVELE1BQU0sR0FBRyxHQUFHLGFBQWEsQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFOUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFekMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxRQUFRLENBQ2IsT0FBZ0IsRUFDaEIsT0FBc0IsRUFDdEIsS0FBZ0I7UUFFaEIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDekIsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsT0FBTyxLQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLElBQWdCLEVBQUUsS0FBYTtRQUMvQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUc7RUFDcEIsS0FBSyxFQUFFLENBQUM7SUFDUixDQUFDO0lBRUQsTUFBTSxDQUFDLGtCQUFrQjtRQUN2QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBQzlELE1BQU0sV0FBVyxHQUFHLEVBQUU7YUFDbkIsV0FBVyxDQUFDLE9BQU8sQ0FBQzthQUNwQixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUVqRSxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQzlDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN2RCxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUV2RCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDM0QsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFM0QsTUFBTSxXQUFXLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxDQUM5QyxZQUFZLEVBQ1osY0FBYyxDQUNmLENBQUM7WUFFRixPQUFPO2dCQUNMLEdBQUcsSUFBSTtnQkFDUCxHQUFHLFdBQVc7YUFDZixDQUFDO1FBQ0osQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRVAsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGO0FBRUQsU0FBUyxhQUFhLENBQUMsS0FBZSxFQUFFLE9BQWlCO0lBQ3ZELE9BQU8sU0FBUyxDQUNkLFFBQVEsRUFDUixDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFDbkQ7UUFDRSxRQUFRLEVBQUUsT0FBTztLQUNsQixDQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyx5QkFBeUIsQ0FBQyxJQUFZO0lBQzdDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQUMsSUFBWTtJQUMxQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxPQUFxQjtJQUNoRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFFbEIsTUFBTSxlQUFlLEdBQUcsT0FBTztRQUM3QixDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxlQUFlLENBQUMsRUFBRSxPQUFPLENBQUM7UUFDNUQsQ0FBQyxDQUFDLGVBQWUsQ0FBQztJQUVwQixNQUFNLEVBQ0osUUFBUSxFQUNSLHNCQUFzQixFQUN0QixVQUFVLEVBQ1YsUUFBUSxFQUNSLFlBQVksRUFDYixHQUFHLGVBQWUsQ0FBQztJQUVwQixJQUFJLFFBQVEsSUFBSSxzQkFBc0IsSUFBSSxVQUFVLElBQUksUUFBUSxFQUFFO1FBQ2hFLE1BQU0sQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztLQUN0RDtTQUFNO1FBQ0wsTUFBTSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7UUFDM0QsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7UUFFdkQsSUFBSSxRQUFRLEVBQUU7WUFDWixNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7U0FDcEQ7UUFFRCxJQUFJLHNCQUFzQixFQUFFO1lBQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDO1NBQ3BFO1FBRUQsSUFBSSxVQUFVLEVBQUU7WUFDZCxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztTQUMxRDtRQUVELElBQUksUUFBUSxFQUFFO1lBQ1osTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1NBQ3BEO0tBQ0Y7SUFFRCxJQUFJLFlBQVksRUFBRTtRQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQztRQUM5RCxNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztLQUM5RDtJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMifQ=="],"names":["stringValue","Error","log","prototype","isBoolean","isNumber","isDate","pad","dsv","identity","feature","interval","formatYear","day","timeMonday","timeDay","timeYear","timeSunday","timeThursday","parse","ingest","SKIP","ascendingComparator","ascending","ascendingBisect","bisector","gaussian","update","parseDist","extent","quantile","number","numbers","partition","None","get","max","min","epsilon","pi","tau","constant","x","pointX","y","pointY","line","point","curveMonotoneY","curveMonotoneX","curveStepAfter","curveStepBefore","noop","add","context","Empty","compare","pick","attr","bound","draw","path","measure","truncate","hit","arc","area","image","shape","symbol","trail","marks","tempBounds","translate","clip","base","object","emit","intersect","boundContext","boundItem","lookup","Linear","timeMillisecond","timeSecond","timeMinute","timeHour","timeWeek","timeMonth","utcMillisecond","utcSecond","utcWeek","bisectRight","extend","color","t0","t1","rgb","colorRgb","basis","value","zero","one","array","hsl","colorHsl","lab","colorLab","hcl","colorHcl","cubehelix","colorCubehelix","bisect","interpolate","interpolateValue","locale","format","defaultLocale","formatLocale","tickFormat","linear","symlog","pow","sqrt","threshold","quantize","durationSecond","durationMinute","durationHour","durationDay","durationWeek","date","transformer","copy","scale","$.scaleIdentity","$.scaleLinear","$.scaleLog","$.scalePow","$.scaleSqrt","$.scaleSymlog","$.scaleTime","$.scaleUtc","$.scaleSequential","$.scaleSequentialLog","$.scaleSequentialPow","$.scaleSequentialSqrt","$.scaleSequentialSymlog","$.scaleDiverging","$.scaleDivergingLog","$.scaleDivergingPow","$.scaleDivergingSqrt","$.scaleDivergingSymlog","$.scaleQuantile","$.scaleQuantize","$.scaleThreshold","$.scaleOrdinal","scaleBand","scalePoint","key","$.piecewise","getScale","$","continuous","discrete","numberFormat","filter","Symbols","Gradient","symbols","formats","binValues","range","scaleImplicit","sequence","getInterpolate","scheme","getScheme","e10","e5","e2","tickStep","slice","temp","epsilon2","halfPi","degrees","abs","atan2","cos","exp","sin","sign","acos","asin","stream","lambda0","lambda00","phi00","sum","merge","areaSum","areaRingSum","x0","y0","areaStream","areaRingStart","areaRingEnd","areaPointFirst","areaPoint","boundsStream","boundsPoint","X0","Y0","Z0","X1","Y1","Z1","X2","Y2","Z2","x00","y00","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","lengthSum","circle","pathArea","pathMeasure","pathBounds","pathCentroid","resample","conicEqualArea","albers","scaleTranslate","create","projection","geoGraticule","set","fit","defaultX","defaultY","tree_addAll","tree_removeAll","find","Node","defaultSeparation","squarify","dice","Output","Params","offset","events","element","bind","Type","Identifier","children","source","index","peek","constants","Constants","functions","Functions","data","d3_format","timeFormat","d3_timeFormat","utcFormat","d3_utcFormat","timeParse","d3_timeParse","utcParse","d3_utcParse","time","bounds","DataPrefix","IndexPrefix","encode","getField","parseDataflow","Padding","getState","setState","formatValue","defaultTooltip","timer","initialize","transform","Aggregate","Collect","Compare","Expression","Field","Key","Projection","Proxy","Scale","Sieve","Left","Right","Center","Start","End","Skip","parseExpression","tree","voronoi"],"mappings":"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"} \ No newline at end of file diff --git a/build/data.d.ts b/build/data.d.ts new file mode 100644 index 0000000..4c79c51 --- /dev/null +++ b/build/data.d.ts @@ -0,0 +1,30 @@ +export interface DataObject { + data: any[]; + numRows: number; + fields: string[]; + schema: any; + asp: string; +} +export declare class Data { + static fromArray(arr: any): DataObject; + static getNumRowsDeclaration(numRows: number): string; + static getFieldDeclaration(fieldName: string, fieldType: FieldTypeType): string; + static getCardinalityDeclaration(fieldName: string, cardinality: number): string; + static getExtentDeclaration(fieldName: string, min: number, max: number): string; +} +export interface SchemaObject { + [field: string]: FieldDescriptorObject; +} +export interface FieldDescriptorObject { + type: FieldTypeType; + cardinality: number; + extent?: [number, number]; +} +export declare class FieldType { + static STRING: "string"; + static BOOLEAN: "boolean"; + static INTEGER: "integer"; + static NUMBER: "number"; + static DATE: "date"; +} +export declare type FieldTypeType = typeof FieldType.STRING | typeof FieldType.BOOLEAN | typeof FieldType.INTEGER | typeof FieldType.NUMBER | typeof FieldType.DATE; diff --git a/build/data.js b/build/data.js new file mode 100644 index 0000000..9b26bc2 --- /dev/null +++ b/build/data.js @@ -0,0 +1,77 @@ +import { extent } from "d3-array"; +import { inferTypes } from "vega"; +export class Data { + static fromArray(arr) { + const fields = getFieldsFromArr(arr); + const inferredTypes = inferTypes(arr, fields); + const schema = fields.reduce((schema, f) => { + const descriptor = { + type: inferredTypes[f], + cardinality: getCardinalityFromArr(arr, f) + }; + if (descriptor.type !== FieldType.STRING && + descriptor.type !== FieldType.BOOLEAN) { + descriptor["extent"] = extent(arr, d => d[f]); + } + schema[f] = descriptor; + return schema; + }, {}); + const numRows = arr.length; + let asp = [Data.getNumRowsDeclaration(numRows)]; + asp = fields.reduce((asp, f) => { + asp.push(Data.getFieldDeclaration(f, schema[f].type)); + asp.push(Data.getCardinalityDeclaration(f, schema[f].cardinality)); + // TODO: figure out how to handle non ints + if (schema[f].extent && schema[f].type === FieldType.INTEGER) { + asp.push(Data.getExtentDeclaration(f, schema[f].extent[0], schema[f].extent[1])); + } + return asp; + }, asp); + return { + fields, + schema, + numRows, + asp: asp.join("\n"), + data: arr + }; + } + static getNumRowsDeclaration(numRows) { + return `num_rows(${numRows}).`; + } + static getFieldDeclaration(fieldName, fieldType) { + return `fieldtype(${cleanFieldName(fieldName)},${fieldType}).`; + } + static getCardinalityDeclaration(fieldName, cardinality) { + return `cardinality(${cleanFieldName(fieldName)},${cardinality}).`; + } + static getExtentDeclaration(fieldName, min, max) { + if (!Number.isInteger(min) || !Number.isInteger(max)) { + throw new Error(`Extent is yet supported for floats: ${min} ${max}`); + } + return `extent(${cleanFieldName(fieldName)},${min},${max}).`; + } +} +function cleanFieldName(fieldName) { + return `"${fieldName}"`; +} +function getFieldsFromArr(arr) { + if (!arr) { + return []; + } + return Object.keys(arr[0]); +} +function getCardinalityFromArr(arr, field) { + const unique = arr.reduce((set, d) => { + set.add(d[field]); + return set; + }, new Set()); + return unique.size; +} +export class FieldType { +} +FieldType.STRING = "string"; +FieldType.BOOLEAN = "boolean"; +FieldType.INTEGER = "integer"; +FieldType.NUMBER = "number"; +FieldType.DATE = "date"; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVVsQyxNQUFNLE9BQU8sSUFBSTtJQUNmLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBUTtRQUN2QixNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTlDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekMsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO2dCQUN0QixXQUFXLEVBQUUscUJBQXFCLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQzthQUMzQyxDQUFDO1lBRUYsSUFDRSxVQUFVLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxNQUFNO2dCQUNwQyxVQUFVLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxPQUFPLEVBQ3JDO2dCQUNBLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDL0M7WUFFRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDO1lBRXZCLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVQLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFFM0IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENB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 \ No newline at end of file diff --git a/build/draco.d.ts b/build/draco.d.ts new file mode 100644 index 0000000..2f8f07e --- /dev/null +++ b/build/draco.d.ts @@ -0,0 +1,27 @@ +import { DataObject } from "./data"; +import { FactsObject } from "./model"; +import { ConstraintDictionary } from "./model/constraint-dictionary"; +import { ResultObject } from "./model/result"; +export interface DracoOptions { + strictHard?: boolean; + generate?: boolean; + generateExtraEncodings?: boolean; + optimize?: boolean; + generateData?: boolean; + models?: number; + randomFreq?: number; + randomSeed?: number; +} +export declare const DEFAULT_OPTIONS: { + strictHard: boolean; + generate: boolean; + generateExtraEncodings: boolean; + optimize: boolean; + generateData: boolean; +}; +export declare class Draco { + static run(program?: string, options?: DracoOptions, files?: string[]): ResultObject; + static runDebug(program?: string, options?: DracoOptions, files?: string[]): FactsObject; + static getProgram(data: DataObject, query: string): string; + static getSoftConstraints(): ConstraintDictionary; +} diff --git a/build/draco.js b/build/draco.js new file mode 100644 index 0000000..9c6a18c --- /dev/null +++ b/build/draco.js @@ -0,0 +1,115 @@ +import { Facts } from "./model"; +import { ConstraintDictionary } from "./model/constraint-dictionary"; +import { Result } from "./model/result"; +const tmp = require("tmp"); +const fs = require("fs"); +const path = require("path"); +const { spawnSync } = require("child_process"); +tmp.setGracefulCleanup(); +export const DEFAULT_OPTIONS = { + strictHard: true, + generate: true, + generateExtraEncodings: true, + optimize: true, + generateData: false +}; +export class Draco { + static run(program, options, files) { + let resolvedFiles = files ? files : []; + resolvedFiles = resolvedFiles.concat(getFilesFromOptions(options)); + const tmpObj = tmp.fileSync({ postfix: ".lp" }); + if (program) { + fs.writeFileSync(tmpObj.name, program); + resolvedFiles = resolvedFiles.concat([tmpObj.name]); + } + const opt = []; + if (options) { + if (options.models !== undefined) { + opt.push(`--models=${options.models}`); + } + if (options.randomFreq !== undefined) { + // opt.push(`--sign-def=3`); + opt.push(`--rand-freq=${options.randomFreq}`); + } + if (options.randomSeed !== undefined) { + opt.push(`--seed=${options.randomSeed}`); + } + } + const out = runClingoSync(resolvedFiles, opt); + const result = JSON.parse(out.output[1]); + return result; + } + static runDebug(program, options, files) { + const result = Draco.run(program, { strictHard: false }, files); + if (!Result.isSat(result)) { + return []; + } + const witness = Result.toWitnesses(result)[0]; + return Facts.getHardViolations(witness.facts); + } + static getProgram(data, query) { + return `${data.asp} +${query}`; + } + static getSoftConstraints() { + const softDir = path.resolve(__dirname, "../model/view/soft"); + const subtypeDirs = fs + .readdirSync(softDir) + .filter(f => fs.statSync(path.join(softDir, f)).isDirectory()); + const result = subtypeDirs.reduce((dict, dir) => { + const prefFile = path.resolve(softDir, dir, "pref.lp"); + const prefContents = fs.readFileSync(prefFile, "utf8"); + const weightFile = path.resolve(softDir, dir, "weight.lp"); + const weightContents = fs.readFileSync(weightFile, "utf8"); + const constraints = ConstraintDictionary.fromAsp(prefContents, weightContents); + return { + ...dict, + ...constraints + }; + }, {}); + return result; + } +} +function runClingoSync(files, options) { + return spawnSync("clingo", ["--outf=2", "--quiet=1,2,2", ...options, ...files], { + encoding: "utf-8" + }); +} +function resolvePathToModelProgram(file) { + return path.resolve(__dirname, "../model/program", file); +} +function resolvePathToModelView(file) { + return path.resolve(__dirname, "../model/view", file); +} +function getFilesFromOptions(options) { + const result = []; + const resolvedOptions = options + ? Object.assign(Object.assign({}, DEFAULT_OPTIONS), options) + : DEFAULT_OPTIONS; + const { generate, generateExtraEncodings, strictHard, optimize, generateData } = resolvedOptions; + if (generate && generateExtraEncodings && strictHard && optimize) { + result.push(resolvePathToModelProgram("default.lp")); + } + else { + result.push(resolvePathToModelProgram("../data/index.lp")); + result.push(resolvePathToModelView("program/base.lp")); + if (generate) { + result.push(resolvePathToModelView("generate.lp")); + } + if (generateExtraEncodings) { + result.push(resolvePathToModelView("generate_extra_encodings.lp")); + } + if (strictHard) { + result.push(resolvePathToModelView("hard_integrity.lp")); + } + if (optimize) { + result.push(resolvePathToModelView("optimize.lp")); + } + } + if (generateData) { + result.push(resolvePathToModelProgram("../data/generate.lp")); + result.push(resolvePathToModelProgram("../data/grammar.lp")); + } + return result; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhY28uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZHJhY28udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssRUFBZSxNQUFNLFNBQVMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsTUFBTSxFQUFnQixNQUFNLGdCQUFnQixDQUFDO0FBRXRELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzQixNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzdCLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDL0MsR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUM7QUFhekIsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzdCLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFFBQVEsRUFBRSxJQUFJO0lBQ2Qsc0JBQXNCLEVBQUUsSUFBSTtJQUM1QixRQUFRLEVBQUUsSUFBSTtJQUNkLFlBQVksRUFBRSxLQUFLO0NBQ3BCLENBQUM7QUFFRixNQUFNLE9BQU8sS0FBSztJQUNoQixNQUFNLENBQUMsR0FBRyxDQUNSLE9BQWdCLEVBQ2hCLE9BQXNCLEVBQ3RCLEtBQWdCO1FBRWhCLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFdkMsYUFBYSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUVuRSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFaEQsSUFBSSxPQUFPLEVBQUU7WUFDWCxFQUFFLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7WUFDdkMsYUFBYSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztTQUNyRDtRQUVELE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQztRQUNmLElBQUksT0FBTyxFQUFFO1lBQ1gsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLFNBQVMsRUFBRTtnQkFDaEMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO2FBQ3hDO1lBRUQsSUFBSSxPQUFPLENBQUMsVUFBVSxLQUFLLFNBQVMsRUFBRTtnQkFDcEMsNEJBQTRCO2dCQUM1QixHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7YUFDL0M7WUFFRCxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFFO2dCQUNwQyxHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUM7YUFDMUM7U0FDRjtRQUVELE1BQU0sR0FBRyxHQUFHLGFBQWEsQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFOUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFekMsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELE1BQU0sQ0FBQyxRQUFRLENBQ2IsT0FBZ0IsRUFDaEIsT0FBc0IsRUFDdEIsS0FBZ0I7UUFFaEIsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDaEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDekIsT0FBTyxFQUFFLENBQUM7U0FDWDtRQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDOUMsT0FBTyxLQUFLLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2hELENBQUM7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUFDLElBQWdCLEVBQUUsS0FBYTtRQUMvQyxPQUFPLEdBQUcsSUFBSSxDQUFDLEdBQUc7RUFDcEIsS0FBSyxFQUFFLENBQUM7SUFDUixDQUFDO0lBRUQsTUFBTSxDQUFDLGtCQUFrQjtRQUN2QixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxvQkFBb0IsQ0FBQyxDQUFDO1FBQzlELE1BQU0sV0FBVyxHQUFHLEVBQUU7YUFDbkIsV0FBVyxDQUFDLE9BQU8sQ0FBQzthQUNwQixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUVqRSxNQUFNLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO1lBQzlDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN2RCxNQUFNLFlBQVksR0FBRyxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUV2RCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFDM0QsTUFBTSxjQUFjLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxVQUFVLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFFM0QsTUFBTSxXQUFXLEdBQUcsb0JBQW9CLENBQUMsT0FBTyxDQUM5QyxZQUFZLEVBQ1osY0FBYyxDQUNmLENBQUM7WUFFRixPQUFPO2dCQUNMLEdBQUcsSUFBSTtnQkFDUCxHQUFHLFdBQVc7YUFDZixDQUFDO1FBQ0osQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRVAsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGO0FBRUQsU0FBUyxhQUFhLENBQUMsS0FBZSxFQUFFLE9BQWlCO0lBQ3ZELE9BQU8sU0FBUyxDQUNkLFFBQVEsRUFDUixDQUFDLFVBQVUsRUFBRSxlQUFlLEVBQUUsR0FBRyxPQUFPLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFDbkQ7UUFDRSxRQUFRLEVBQUUsT0FBTztLQUNsQixDQUNGLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyx5QkFBeUIsQ0FBQyxJQUFZO0lBQzdDLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDM0QsQ0FBQztBQUVELFNBQVMsc0JBQXNCLENBQUMsSUFBWTtJQUMxQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLGVBQWUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxPQUFxQjtJQUNoRCxNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7SUFFbEIsTUFBTSxlQUFlLEdBQUcsT0FBTztRQUM3QixDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxlQUFlLENBQUMsRUFBRSxPQUFPLENBQUM7UUFDNUQsQ0FBQyxDQUFDLGVBQWUsQ0FBQztJQUVwQixNQUFNLEVBQ0osUUFBUSxFQUNSLHNCQUFzQixFQUN0QixVQUFVLEVBQ1YsUUFBUSxFQUNSLFlBQVksRUFDYixHQUFHLGVBQWUsQ0FBQztJQUVwQixJQUFJLFFBQVEsSUFBSSxzQkFBc0IsSUFBSSxVQUFVLElBQUksUUFBUSxFQUFFO1FBQ2hFLE1BQU0sQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztLQUN0RDtTQUFNO1FBQ0wsTUFBTSxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDLENBQUM7UUFDM0QsTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7UUFFdkQsSUFBSSxRQUFRLEVBQUU7WUFDWixNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUM7U0FDcEQ7UUFFRCxJQUFJLHNCQUFzQixFQUFFO1lBQzFCLE1BQU0sQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFDO1NBQ3BFO1FBRUQsSUFBSSxVQUFVLEVBQUU7WUFDZCxNQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQztTQUMxRDtRQUVELElBQUksUUFBUSxFQUFFO1lBQ1osTUFBTSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO1NBQ3BEO0tBQ0Y7SUFFRCxJQUFJLFlBQVksRUFBRTtRQUNoQixNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQztRQUM5RCxNQUFNLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQztLQUM5RDtJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUMifQ== \ No newline at end of file diff --git a/build/index.d.ts b/build/index.d.ts new file mode 100644 index 0000000..7ac3e63 --- /dev/null +++ b/build/index.d.ts @@ -0,0 +1,3 @@ +export * from "./data"; +export * from "./draco"; +export * from "./model"; diff --git a/build/index.js b/build/index.js new file mode 100644 index 0000000..b0e447f --- /dev/null +++ b/build/index.js @@ -0,0 +1,4 @@ +export * from "./data"; +export * from "./draco"; +export * from "./model"; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxTQUFTLENBQUMifQ== \ No newline at end of file diff --git a/build/model/constraint-dictionary.d.ts b/build/model/constraint-dictionary.d.ts new file mode 100644 index 0000000..207da8c --- /dev/null +++ b/build/model/constraint-dictionary.d.ts @@ -0,0 +1,15 @@ +import { ConstraintObject, HardConstraintObject, SoftConstraintObject } from './constraint'; +export declare type ConstraintDictionaryObject = { + [name: string]: ConstraintObject; +}; +export declare type SoftConstraintDictionaryObject = { + [name: string]: SoftConstraintObject; +}; +export declare type HardConstraintDictionaryObject = { + [name: string]: HardConstraintObject; +}; +export declare class ConstraintDictionary { + static isSoftConstraintDictionary(dict: ConstraintDictionaryObject): dict is SoftConstraintDictionaryObject; + static isHardConstraintDictionary(dict: ConstraintDictionaryObject): dict is SoftConstraintDictionaryObject; + static fromAsp(prefAsp: string, weightAsp?: string): ConstraintDictionaryObject; +} diff --git a/build/model/constraint-dictionary.js b/build/model/constraint-dictionary.js new file mode 100644 index 0000000..218e986 --- /dev/null +++ b/build/model/constraint-dictionary.js @@ -0,0 +1,53 @@ +import { Constraint, } from './constraint'; +import { doesMatchRegex } from './util'; +export class ConstraintDictionary { + static isSoftConstraintDictionary(dict) { + if (Object.entries(dict).length === 0) { + return false; + } + const [firstName, firstConstraint] = Object.entries(dict)[0]; + return Constraint.isSoftConstraint(firstConstraint); + } + static isHardConstraintDictionary(dict) { + if (Object.entries(dict).length === 0) { + return false; + } + const [firstName, firstConstraint] = Object.entries(dict)[0]; + return Constraint.isHardConstraint(firstConstraint); + } + static fromAsp(prefAsp, weightAsp) { + const prefMatches = doesMatchRegex(prefAsp, PREF_REGEX); + let weightDictionary; + if (!!weightAsp) { + const weightMatches = doesMatchRegex(weightAsp, WEIGHT_REGEX); + if (!weightMatches) { + throw new Error(`Weight ASP: ${weightAsp} does not match weight regex.`); + } + const singleWeightAsps = weightAsp.match(WEIGHT_REGEX); + weightDictionary = singleWeightAsps.reduce((dict, asp) => { + const [fullMatch, subtype, name, weight] = WEIGHT_REGEX.exec(asp); + WEIGHT_REGEX.lastIndex = 0; + const uniqueName = `soft-${subtype}-${name}`; + dict[uniqueName] = +weight; + return dict; + }, {}); + } + if (!prefMatches) { + throw new Error(`Pref ASP: ${prefMatches} does not match pref regex.`); + } + const singlePrefAsps = prefAsp.match(PREF_REGEX); + const result = singlePrefAsps.reduce((dict, asp) => { + const constraint = Constraint.fromPrefAsp(asp); + const uniqueName = Constraint.getUniqueName(constraint); + if (!!weightDictionary) { + constraint.weight = weightDictionary[uniqueName]; + } + dict[uniqueName] = constraint; + return dict; + }, {}); + return result; + } +} +const PREF_REGEX = /%\s*@constraint(?:(?:.+)\n?)+/g; +const WEIGHT_REGEX = /soft_weight\((\w+),(\w+),(\d+)\).*/g; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RyYWludC1kaWN0aW9uYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL2NvbnN0cmFpbnQtZGljdGlvbmFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxHQUlYLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFNeEMsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixNQUFNLENBQUMsMEJBQTBCLENBQy9CLElBQWdDO1FBRWhDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3JDLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxNQUFNLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0QsT0FBTyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELE1BQU0sQ0FBQywwQkFBMEIsQ0FDL0IsSUFBZ0M7UUFFaEMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDckMsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE1BQU0sQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RCxPQUFPLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFlLEVBQUUsU0FBa0I7UUFDaEQsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUV4RCxJQUFJLGdCQUFnQixDQUFDO1FBQ3JCLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRTtZQUNmLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLFNBQVMsK0JBQStCLENBQUMsQ0FBQzthQUMxRTtZQUVELE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN2RCxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQ3hDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUNaLE1BQU0sQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNsRSxZQUFZLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztnQkFFM0IsTUFBTSxVQUFVLEdBQUcsUUFBUSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztnQkFFM0IsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDLEVBQ0QsRUFBUyxDQUNWLENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLFdBQVcsNkJBQTZCLENBQUMsQ0FBQztTQUN4RTtRQUVELE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FDbEMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDWixNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFeEQsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3JCLFVBQW1DLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQzVFO1lBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFVBQVUsQ0FBQztZQUM5QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsRUFDRCxFQUFnQyxDQUNqQyxDQUFDO1FBRUYsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGO0FBRUQsTUFBTSxVQUFVLEdBQUcsZ0NBQWdDLENBQUM7QUFDcEQsTUFBTSxZQUFZLEdBQUcscUNBQXFDLENBQUMifQ== \ No newline at end of file diff --git a/build/model/constraint.d.ts b/build/model/constraint.d.ts new file mode 100644 index 0000000..8de3a7e --- /dev/null +++ b/build/model/constraint.d.ts @@ -0,0 +1,24 @@ +export interface ConstraintObject { + type: ConstraintType; + subtype: string; + name: string; + view: string; + parameters: string; + description: string; + definitions: string[]; +} +export interface HardConstraintObject extends ConstraintObject { +} +export interface SoftConstraintObject extends ConstraintObject { + weight?: number; +} +export declare class Constraint { + static HARD_TYPE: 'hard'; + static SOFT_TYPE: 'soft'; + static isHardConstraint(constraint: ConstraintObject): constraint is HardConstraintObject; + static isSoftConstraint(constraint: ConstraintObject): constraint is SoftConstraintObject; + static getUniqueName(constraint: ConstraintObject): string; + static fromPrefAsp(asp: string): ConstraintObject; + static toPrefAsp(c: ConstraintObject): string; +} +export declare type ConstraintType = typeof Constraint.HARD_TYPE | typeof Constraint.SOFT_TYPE; diff --git a/build/model/constraint.js b/build/model/constraint.js new file mode 100644 index 0000000..0c11fc8 --- /dev/null +++ b/build/model/constraint.js @@ -0,0 +1,51 @@ +import { doesMatchRegex } from './util'; +export class Constraint { + static isHardConstraint(constraint) { + return constraint.type === Constraint.HARD_TYPE; + } + static isSoftConstraint(constraint) { + return constraint.type === Constraint.SOFT_TYPE; + } + static getUniqueName(constraint) { + return `${constraint.type}-${constraint.subtype}-${constraint.name}`; + } + static fromPrefAsp(asp) { + const matches = doesMatchRegex(asp, PREF_ASP_REGEX); + if (!matches) { + throw new Error(`ASP (${asp}) does not match constraint regex.`); + } + const [fullMatch, description, code, type, subtype, name, view, parameters,] = PREF_ASP_REGEX.exec(asp); + const definitions = code + .trim() + .split('\n') + .map(line => { + const [fullMatch, definition] = PREF_DEFINITION_REGEX.exec(line); + return definition; + }); + return { + subtype, + name, + view, + parameters, + description, + definitions, + type: type, + }; + } + static toPrefAsp(c) { + const description = `% @constraint ${c.description}`; + const head = `${c.type}(${c.subtype},${c.name},${c.view},${c.parameters})`; + const code = c.definitions + .map(def => { + return `${head} :- ${def}`; + }) + .join('\n') + .trim(); + return `${description}\n${code}`; + } +} +Constraint.HARD_TYPE = 'hard'; +Constraint.SOFT_TYPE = 'soft'; +const PREF_ASP_REGEX = /%\s*@constraint (.*)\n((?:(hard|soft)\((\w+),(\w+),(\w+),(\w+)\).*\n?)+)/; +const PREF_DEFINITION_REGEX = /:-\s*(.*)/; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RyYWludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC9jb25zdHJhaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFrQnhDLE1BQU0sT0FBTyxVQUFVO0lBSXJCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUE0QjtRQUNsRCxPQUFPLFVBQVUsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLFNBQVMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFVBQTRCO1FBQ2xELE9BQU8sVUFBVSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsU0FBUyxDQUFDO0lBQ2xELENBQUM7SUFFRCxNQUFNLENBQUMsYUFBYSxDQUFDLFVBQTRCO1FBQy9DLE9BQU8sR0FBRyxVQUFVLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQVc7UUFDNUIsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLEdBQUcsb0NBQW9DLENBQUMsQ0FBQztTQUNsRTtRQUVELE1BQU0sQ0FDSixTQUFTLEVBQ1QsV0FBVyxFQUNYLElBQUksRUFDSixJQUFJLEVBQ0osT0FBTyxFQUNQLElBQUksRUFDSixJQUFJLEVBQ0osVUFBVSxFQUNYLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU3QixNQUFNLFdBQVcsR0FBRyxJQUFJO2FBQ3JCLElBQUksRUFBRTthQUNOLEtBQUssQ0FBQyxJQUFJLENBQUM7YUFDWCxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDVixNQUFNLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqRSxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztRQUVMLE9BQU87WUFDTCxPQUFPO1lBQ1AsSUFBSTtZQUNKLElBQUk7WUFDSixVQUFVO1lBQ1YsV0FBVztZQUNYLFdBQVc7WUFDWCxJQUFJLEVBQUUsSUFBc0I7U0FDN0IsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLENBQW1CO1FBQ2xDLE1BQU0sV0FBVyxHQUFHLGlCQUFpQixDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQztRQUMzRSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVzthQUN2QixHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDVCxPQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxJQUFJLENBQUM7YUFDVixJQUFJLEVBQUUsQ0FBQztRQUVWLE9BQU8sR0FBRyxXQUFXLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDbkMsQ0FBQzs7QUE5RE0sb0JBQVMsR0FBVyxNQUFNLENBQUM7QUFDM0Isb0JBQVMsR0FBVyxNQUFNLENBQUM7QUFrRXBDLE1BQU0sY0FBYyxHQUFHLDBFQUEwRSxDQUFDO0FBQ2xHLE1BQU0scUJBQXFCLEdBQUcsV0FBVyxDQUFDIn0= \ No newline at end of file diff --git a/build/model/facts.d.ts b/build/model/facts.d.ts new file mode 100644 index 0000000..631ef55 --- /dev/null +++ b/build/model/facts.d.ts @@ -0,0 +1,12 @@ +import { TopLevelUnitSpec } from "vega-lite/src/spec/unit"; +export declare type VegaLiteSpecDictionaryObject = { + [name: string]: TopLevelUnitSpec; +}; +export declare type FactsObject = string[]; +export declare class Facts { + static toVegaLiteSpecDictionary(facts: FactsObject): VegaLiteSpecDictionaryObject; + static toViews(facts: FactsObject): string[]; + static getHardViolations(facts: FactsObject): FactsObject; + static getSoftViolations(facts: FactsObject): FactsObject; + static getViewFacts(facts: FactsObject): FactsObject; +} diff --git a/build/model/facts.js b/build/model/facts.js new file mode 100644 index 0000000..dd66069 --- /dev/null +++ b/build/model/facts.js @@ -0,0 +1,106 @@ +import { doesMatchRegex } from "./util"; +export class Facts { + static toVegaLiteSpecDictionary(facts) { + const cleanedFacts = facts.map(fact => { + const cleaned = fact.replace(/\"/g, ""); + return cleaned; + }); + return facts2vl(cleanedFacts); + } + static toViews(facts) { + return facts2views(facts); + } + static getHardViolations(facts) { + return facts.filter(f => doesMatchRegex(f, /hard\(.*/)); + } + static getSoftViolations(facts) { + return facts.filter(f => doesMatchRegex(f, /soft\(.*/)); + } + static getViewFacts(facts) { + return facts.filter(f => doesMatchRegex(f, /view_fact\(.*/)); + } +} +const VIEW_REGEX_CAPTURE = /view\((.*)\)/; +const FACT_REGEX = /(\w+)\(([\w\.\/]+)(,([\w\.]+))?(,([\w\.]+))?\)/; +function facts2vl(facts) { + const views = facts2views(facts); + const result = views.reduce((dict, v) => { + dict[v] = facts2vl_single(facts, v); + return dict; + }, {}); + return result; +} +function facts2views(facts) { + const views = facts + .filter(fact => { + return doesMatchRegex(fact, VIEW_REGEX_CAPTURE); + }) + .map(fact => { + const extract = VIEW_REGEX_CAPTURE.exec(fact); + if (extract) { + const [_, name] = extract; + return name; + } + throw new Error(`Invalid view statement: ${fact}.`); + }); + return views; +} +function facts2vl_single(facts, view) { + let mark; + const encodings = {}; + for (const value of facts) { + const extract = FACT_REGEX.exec(value); + if (!extract) { + continue; + } + const [_, predicate, viz, __, first, ___, second] = extract; + if (viz !== view) { + continue; + } + if (predicate === "view") { + continue; + } + switch (predicate) { + case "mark": + mark = first; + break; + case "field": + case "type": + case "channel": + case "scale": + case "bin": + case "aggregate": + case "stack": + if (!encodings[first]) { + encodings[first] = {}; + } + encodings[first][predicate] = second; + } + } + const encoding = {}; + for (const e of Object.keys(encodings)) { + const enc = encodings[e]; + const scale = { + ...(enc.scale === "log" ? { type: "log" } : {}), + ...(enc.scale === "zero" ? { zero: true } : {}) + }; + const insert = { + type: enc.type, + ...(enc.aggregate ? { aggregate: enc.aggregate } : {}), + ...(enc.field ? { field: enc.field } : {}), + ...(enc.stack ? { stack: enc.stack } : {}), + ...(enc.bin ? { bin: JSON.parse(enc.bin) } : {}), + ...(enc.scale ? { scale } : {}) + }; + if (enc.aggregate) { + encoding; + } + encoding[enc.channel] = insert; + } + const spec = { + mark, + encoding + }; + return spec; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvZmFjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQU14QyxNQUFNLE9BQU8sS0FBSztJQUNoQixNQUFNLENBQUMsd0JBQXdCLENBQzdCLEtBQWtCO1FBRWxCLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDcEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDeEMsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFrQjtRQUMvQixPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEtBQWtCO1FBQ3pDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEtBQWtCO1FBQ3pDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFrQjtRQUNwQyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztDQUNG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 \ No newline at end of file diff --git a/build/model/index.d.ts b/build/model/index.d.ts new file mode 100644 index 0000000..099a260 --- /dev/null +++ b/build/model/index.d.ts @@ -0,0 +1,5 @@ +export * from './constraint'; +export * from './constraint-dictionary'; +export * from './facts'; +export * from './witness'; +export * from './result'; diff --git a/build/model/index.js b/build/model/index.js new file mode 100644 index 0000000..3249412 --- /dev/null +++ b/build/model/index.js @@ -0,0 +1,6 @@ +export * from './constraint'; +export * from './constraint-dictionary'; +export * from './facts'; +export * from './witness'; +export * from './result'; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFVBQVUsQ0FBQyJ9 \ No newline at end of file diff --git a/build/model/result.d.ts b/build/model/result.d.ts new file mode 100644 index 0000000..a0f87cb --- /dev/null +++ b/build/model/result.d.ts @@ -0,0 +1,8 @@ +import { VegaLiteSpecDictionaryObject } from "./facts"; +import { WitnessObject } from "./witness"; +export declare type ResultObject = any; +export declare class Result { + static toWitnesses(result: ResultObject): WitnessObject[]; + static getBestVegaLiteSpecDictionary(result: ResultObject): VegaLiteSpecDictionaryObject; + static isSat(result: ResultObject): boolean; +} diff --git a/build/model/result.js b/build/model/result.js new file mode 100644 index 0000000..a327ce0 --- /dev/null +++ b/build/model/result.js @@ -0,0 +1,27 @@ +import { Witness } from "./witness"; +export class Result { + static toWitnesses(result) { + return (result.Call || []).reduce((arr, el) => { + el.Witnesses.forEach((d, i) => { + const facts = d.Value; // add line terminator period. + let costs; + if (result.Models.Costs) { + costs = result.Models.Costs[i]; + } + arr.push({ + costs, + facts + }); + }); + return arr; + }, []); + } + static getBestVegaLiteSpecDictionary(result) { + const witnesses = Result.toWitnesses(result); + return Witness.toVegaLiteSpecDictionary(witnesses[0]); + } + static isSat(result) { + return result.Result === "OPTIMUM FOUND" || result.Result === "SATISFIABLE"; + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdWx0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL3Jlc3VsdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsT0FBTyxFQUFpQixNQUFNLFdBQVcsQ0FBQztBQUluRCxNQUFNLE9BQU8sTUFBTTtJQUNqQixNQUFNLENBQUMsV0FBVyxDQUFDLE1BQW9CO1FBQ3JDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQVUsRUFBRSxFQUFPLEVBQUUsRUFBRTtZQUN4RCxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxDQUFTLEVBQUUsRUFBRTtnQkFDekMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLDhCQUE4QjtnQkFFckQsSUFBSSxLQUFLLENBQUM7Z0JBRVYsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtvQkFDdkIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNoQztnQkFFRCxHQUFHLENBQUMsSUFBSSxDQUFDO29CQUNQLEtBQUs7b0JBQ0wsS0FBSztpQkFDTixDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQUVELE1BQU0sQ0FBQyw2QkFBNkIsQ0FDbEMsTUFBb0I7UUFFcEIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QyxPQUFPLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFvQjtRQUMvQixPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssZUFBZSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssYUFBYSxDQUFDO0lBQzlFLENBQUM7Q0FDRiJ9 \ No newline at end of file diff --git a/build/model/util.d.ts b/build/model/util.d.ts new file mode 100644 index 0000000..e7076a5 --- /dev/null +++ b/build/model/util.d.ts @@ -0,0 +1 @@ +export declare function doesMatchRegex(s: string, regex: RegExp): boolean; diff --git a/build/model/util.js b/build/model/util.js new file mode 100644 index 0000000..b86ca64 --- /dev/null +++ b/build/model/util.js @@ -0,0 +1,5 @@ +export function doesMatchRegex(s, regex) { + const match = s.match(regex); + return !!match; +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxjQUFjLENBQUMsQ0FBUyxFQUFFLEtBQWE7SUFDckQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDakIsQ0FBQyJ9 \ No newline at end of file diff --git a/build/model/witness.d.ts b/build/model/witness.d.ts new file mode 100644 index 0000000..0156e21 --- /dev/null +++ b/build/model/witness.d.ts @@ -0,0 +1,8 @@ +import { FactsObject, VegaLiteSpecDictionaryObject } from "./facts"; +export interface WitnessObject { + costs?: number[]; + facts: FactsObject; +} +export declare class Witness { + static toVegaLiteSpecDictionary(witness: WitnessObject): VegaLiteSpecDictionaryObject; +} diff --git a/build/model/witness.js b/build/model/witness.js new file mode 100644 index 0000000..70dedf5 --- /dev/null +++ b/build/model/witness.js @@ -0,0 +1,7 @@ +import { Facts } from "./facts"; +export class Witness { + static toVegaLiteSpecDictionary(witness) { + return Facts.toVegaLiteSpecDictionary(witness.facts); + } +} +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0bmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC93aXRuZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQTZDLE1BQU0sU0FBUyxDQUFDO0FBTzNFLE1BQU0sT0FBTyxPQUFPO0lBQ2xCLE1BQU0sQ0FBQyx3QkFBd0IsQ0FDN0IsT0FBc0I7UUFFdEIsT0FBTyxLQUFLLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELENBQUM7Q0FDRiJ9 \ No newline at end of file From 3390622baa8e8b0205b605b449509c5a9cddcb44 Mon Sep 17 00:00:00 2001 From: Halden Lin Date: Fri, 30 Aug 2019 11:38:40 -0700 Subject: [PATCH 15/25] Add bin hard constraints. --- build/bundle.js | 35941 ----------------------- build/bundle.js.map | 1 - build/data.d.ts | 30 - build/data.js | 77 - build/draco.d.ts | 27 - build/draco.js | 115 - build/index.d.ts | 3 - build/index.js | 4 - build/model/constraint-dictionary.d.ts | 15 - build/model/constraint-dictionary.js | 53 - build/model/constraint.d.ts | 24 - build/model/constraint.js | 51 - build/model/facts.d.ts | 12 - build/model/facts.js | 106 - build/model/index.d.ts | 5 - build/model/index.js | 6 - build/model/result.d.ts | 8 - build/model/result.js | 27 - build/model/util.d.ts | 1 - build/model/util.js | 5 - build/model/witness.d.ts | 8 - build/model/witness.js | 7 - 22 files changed, 36526 deletions(-) delete mode 100644 build/bundle.js delete mode 100644 build/bundle.js.map delete mode 100644 build/data.d.ts delete mode 100644 build/data.js delete mode 100644 build/draco.d.ts delete mode 100644 build/draco.js delete mode 100644 build/index.d.ts delete mode 100644 build/index.js delete mode 100644 build/model/constraint-dictionary.d.ts delete mode 100644 build/model/constraint-dictionary.js delete mode 100644 build/model/constraint.d.ts delete mode 100644 build/model/constraint.js delete mode 100644 build/model/facts.d.ts delete mode 100644 build/model/facts.js delete mode 100644 build/model/index.d.ts delete mode 100644 build/model/index.js delete mode 100644 build/model/result.d.ts delete mode 100644 build/model/result.js delete mode 100644 build/model/util.d.ts delete mode 100644 build/model/util.js delete mode 100644 build/model/witness.d.ts delete mode 100644 build/model/witness.js diff --git a/build/bundle.js b/build/bundle.js deleted file mode 100644 index 3902879..0000000 --- a/build/bundle.js +++ /dev/null @@ -1,35941 +0,0 @@ -'use strict'; - -Object.defineProperty(exports, '__esModule', { value: true }); - -function ascending(a, b) { - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; -} - -function bisector(compare) { - if (compare.length === 1) compare = ascendingComparator(compare); - return { - left: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) < 0) lo = mid + 1; - else hi = mid; - } - return lo; - }, - right: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) > 0) hi = mid; - else lo = mid + 1; - } - return lo; - } - }; -} - -function ascendingComparator(f) { - return function(d, x) { - return ascending(f(d), x); - }; -} - -var ascendingBisect = bisector(ascending); - -function extent(values, valueof) { - let min; - let max; - if (valueof === undefined) { - for (const value of values) { - if (value != null) { - if (min === undefined) { - if (value >= value) min = max = value; - } else { - if (min > value) min = value; - if (max < value) max = value; - } - } - } - } else { - let index = -1; - for (let value of values) { - if ((value = valueof(value, ++index, values)) != null) { - if (min === undefined) { - if (value >= value) min = max = value; - } else { - if (min > value) min = value; - if (max < value) max = value; - } - } - } - } - return [min, max]; -} - -function accessor(fn, fields, name) { - fn.fields = fields || []; - fn.fname = name; - return fn; -} - -function accessorName(fn) { - return fn == null ? null : fn.fname; -} - -function accessorFields(fn) { - return fn == null ? null : fn.fields; -} - -function error(message) { - throw Error(message); -} - -function splitAccessPath(p) { - var path = [], - q = null, - b = 0, - n = p.length, - s = '', - i, j, c; - - p = p + ''; - - function push() { - path.push(s + p.substring(i, j)); - s = ''; - i = j + 1; - } - - for (i=j=0; j i) { - push(); - } else { - i = j + 1; - } - } else if (c === '[') { - if (j > i) push(); - b = i = j + 1; - } else if (c === ']') { - if (!b) error('Access path missing open bracket: ' + p); - if (b > 0) push(); - b = 0; - i = j + 1; - } - } - - if (b) error('Access path missing closing bracket: ' + p); - if (q) error('Access path missing closing quote: ' + p); - - if (j > i) { - j++; - push(); - } - - return path; -} - -var isArray = Array.isArray; - -function isObject(_) { - return _ === Object(_); -} - -function isString(_) { - return typeof _ === 'string'; -} - -function $(x) { - return isArray(x) ? '[' + x.map($) + ']' - : isObject(x) || isString(x) ? - // Output valid JSON and JS source strings. - // See http://timelessrepo.com/json-isnt-a-javascript-subset - JSON.stringify(x).replace('\u2028','\\u2028').replace('\u2029', '\\u2029') - : x; -} - -function field(field, name) { - var path = splitAccessPath(field), - code = 'return _[' + path.map($).join('][') + '];'; - - return accessor( - Function('_', code), - [(field = path.length===1 ? path[0] : field)], - name || field - ); -} - -var empty = []; - -var id = field('id'); - -var identity = accessor(function(_) { return _; }, empty, 'identity'); - -var zero = accessor(function() { return 0; }, empty, 'zero'); - -var one = accessor(function() { return 1; }, empty, 'one'); - -var truthy = accessor(function() { return true; }, empty, 'true'); - -var falsy = accessor(function() { return false; }, empty, 'false'); - -function log(method, level, input) { - var msg = [level].concat([].slice.call(input)); - console[method](...msg); // eslint-disable-line no-console -} - -var None = 0; -var Error$1 = 1; -var Warn = 2; -var Info = 3; -var Debug = 4; - -function logger(_, method) { - var level = _ || None; - return { - level: function(_) { - if (arguments.length) { - level = +_; - return this; - } else { - return level; - } - }, - error: function() { - if (level >= Error$1) log(method || 'error', 'ERROR', arguments); - return this; - }, - warn: function() { - if (level >= Warn) log(method || 'warn', 'WARN', arguments); - return this; - }, - info: function() { - if (level >= Info) log(method || 'log', 'INFO', arguments); - return this; - }, - debug: function() { - if (level >= Debug) log(method || 'log', 'DEBUG', arguments); - return this; - } - } -} - -function peek(array) { - return array[array.length - 1]; -} - -function toNumber(_) { - return _ == null || _ === '' ? null : +_; -} - -function exp(sign) { - return function(x) { return sign * Math.exp(x); }; -} - -function log$1(sign) { - return function(x) { return Math.log(sign * x); }; -} - -function symlog(c) { - return function(x) { return Math.sign(x) * Math.log1p(Math.abs(x / c)); }; -} - -function symexp(c) { - return function(x) { return Math.sign(x) * Math.expm1(Math.abs(x)) * c; }; -} - -function pow(exponent) { - return function(x) { - return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent); - }; -} - -function pan(domain, delta, lift, ground) { - var d0 = lift(domain[0]), - d1 = lift(peek(domain)), - dd = (d1 - d0) * delta; - - return [ - ground(d0 - dd), - ground(d1 - dd) - ]; -} - -function panLinear(domain, delta) { - return pan(domain, delta, toNumber, identity); -} - -function panLog(domain, delta) { - var sign = Math.sign(domain[0]); - return pan(domain, delta, log$1(sign), exp(sign)); -} - -function panPow(domain, delta, exponent) { - return pan(domain, delta, pow(exponent), pow(1/exponent)); -} - -function panSymlog(domain, delta, constant) { - return pan(domain, delta, symlog(constant), symexp(constant)); -} - -function zoom(domain, anchor, scale, lift, ground) { - var d0 = lift(domain[0]), - d1 = lift(peek(domain)), - da = anchor != null ? lift(anchor) : (d0 + d1) / 2; - - return [ - ground(da + (d0 - da) * scale), - ground(da + (d1 - da) * scale) - ]; -} - -function zoomLinear(domain, anchor, scale) { - return zoom(domain, anchor, scale, toNumber, identity); -} - -function zoomLog(domain, anchor, scale) { - var sign = Math.sign(domain[0]); - return zoom(domain, anchor, scale, log$1(sign), exp(sign)); -} - -function zoomPow(domain, anchor, scale, exponent) { - return zoom(domain, anchor, scale, pow(exponent), pow(1/exponent)); -} - -function zoomSymlog(domain, anchor, scale, constant) { - return zoom(domain, anchor, scale, symlog(constant), symexp(constant)); -} - -function quarter(date) { - return 1 + ~~(new Date(date).getMonth() / 3); -} - -function utcquarter(date) { - return 1 + ~~(new Date(date).getUTCMonth() / 3); -} - -function array(_) { - return _ != null ? (isArray(_) ? _ : [_]) : []; -} - -/** - * Span-preserving range clamp. If the span of the input range is less - * than (max - min) and an endpoint exceeds either the min or max value, - * the range is translated such that the span is preserved and one - * endpoint touches the boundary of the min/max range. - * If the span exceeds (max - min), the range [min, max] is returned. - */ -function clampRange(range, min, max) { - var lo = range[0], - hi = range[1], - span; - - if (hi < lo) { - span = hi; - hi = lo; - lo = span; - } - span = hi - lo; - - return span >= (max - min) - ? [min, max] - : [ - (lo = Math.min(Math.max(lo, min), max - span)), - lo + span - ]; -} - -function isFunction(_) { - return typeof _ === 'function'; -} - -function compare(fields, orders) { - var idx = [], - cmp = (fields = array(fields)).map(function(f, i) { - if (f == null) { - return null; - } else { - idx.push(i); - return isFunction(f) ? f - : splitAccessPath(f).map($).join(']['); - } - }), - n = idx.length - 1, - ord = array(orders), - code = 'var u,v;return ', - i, j, f, u, v, d, t, lt, gt; - - if (n < 0) return null; - - for (j=0; j<=n; ++j) { - i = idx[j]; - f = cmp[i]; - - if (isFunction(f)) { - d = 'f' + i; - u = '(u=this.' + d + '(a))'; - v = '(v=this.' + d + '(b))'; - (t = t || {})[d] = f; - } else { - u = '(u=a['+f+'])'; - v = '(v=b['+f+'])'; - } - - d = '((v=v instanceof Date?+v:v),(u=u instanceof Date?+u:u))'; - - if (ord[i] !== 'descending') { - gt = 1; - lt = -1; - } else { - gt = -1; - lt = 1; - } - - code += '(' + u+'<'+v+'||u==null)&&v!=null?' + lt - + ':(u>v||v==null)&&u!=null?' + gt - + ':'+d+'!==u&&v===v?' + lt - + ':v!==v&&u===u?' + gt - + (i < n ? ':' : ':0'); - } - - f = Function('a', 'b', code + ';'); - if (t) f = f.bind(t); - - fields = fields.reduce(function(map, field) { - if (isFunction(field)) { - (accessorFields(field) || []).forEach(function(_) { map[_] = 1; }); - } else if (field != null) { - map[field + ''] = 1; - } - return map; - }, {}); - - return accessor(f, Object.keys(fields)); -} - -function constant(_) { - return isFunction(_) ? _ : function() { return _; }; -} - -function debounce(delay, handler) { - var tid, evt; - - function callback() { - handler(evt); - tid = evt = null; - } - - return function(e) { - evt = e; - if (tid) clearTimeout(tid); - tid = setTimeout(callback, delay); - }; -} - -function extend(_) { - for (var x, k, i=1, len=arguments.length; i max) max = v; - } - } - } else { - // find first valid value - for (v = f(array[i]); v == null || v !== v; v = f(array[++i])); - min = max = v; - - // visit all other values - for (; i max) max = v; - } - } - } - } - - return [min, max]; -} - -function extentIndex(array, f) { - var i = -1, - n = array.length, - a, b, c, u, v; - - if (f == null) { - while (++i < n) { - b = array[i]; - if (b != null && b >= b) { - a = c = b; - break; - } - } - u = v = i; - while (++i < n) { - b = array[i]; - if (b != null) { - if (a > b) { - a = b; - u = i; - } - if (c < b) { - c = b; - v = i; - } - } - } - } else { - while (++i < n) { - b = f(array[i], i, array); - if (b != null && b >= b) { - a = c = b; - break; - } - } - u = v = i; - while (++i < n) { - b = f(array[i], i, array); - if (b != null) { - if (a > b) { - a = b; - u = i; - } - if (c < b) { - c = b; - v = i; - } - } - } - } - - return [u, v]; -} - -var NULL = {}; - -function fastmap(input) { - var obj = {}, - map, - test; - - function has(key) { - return obj.hasOwnProperty(key) && obj[key] !== NULL; - } - - map = { - size: 0, - empty: 0, - object: obj, - has: has, - get: function(key) { - return has(key) ? obj[key] : undefined; - }, - set: function(key, value) { - if (!has(key)) { - ++map.size; - if (obj[key] === NULL) --map.empty; - } - obj[key] = value; - return this; - }, - delete: function(key) { - if (has(key)) { - --map.size; - ++map.empty; - obj[key] = NULL; - } - return this; - }, - clear: function() { - map.size = map.empty = 0; - map.object = obj = {}; - }, - test: function(_) { - if (arguments.length) { - test = _; - return map; - } else { - return test; - } - }, - clean: function() { - var next = {}, - size = 0, - key, value; - for (key in obj) { - value = obj[key]; - if (value !== NULL && (!test || !test(value))) { - next[key] = value; - ++size; - } - } - map.size = size; - map.empty = 0; - map.object = (obj = next); - } - }; - - if (input) Object.keys(input).forEach(function(key) { - map.set(key, input[key]); - }); - - return map; -} - -function flush(range, value, threshold, left, right, center) { - if (!threshold && threshold !== 0) return center; - - var a = range[0], - b = peek(range), - t = +threshold, - l, r; - - // swap endpoints if range is reversed - if (b < a) { - l = a; a = b; b = l; - } - - // compare value to endpoints - l = Math.abs(value - a); - r = Math.abs(b - value); - - // adjust if value is within threshold distance of endpoint - return l < r && l <= t ? left : r <= t ? right : center; -} - -function inherits(child, parent) { - var proto = (child.prototype = Object.create(parent.prototype)); - proto.constructor = child; - return proto; -} - -/** - * Predicate that returns true if the value lies within the span - * of the given range. The left and right flags control the use - * of inclusive (true) or exclusive (false) comparisons. - */ -function inrange(value, range, left, right) { - var r0 = range[0], r1 = range[range.length-1], t; - if (r0 > r1) { - t = r0; - r0 = r1; - r1 = t; - } - left = left === undefined || left; - right = right === undefined || right; - - return (left ? r0 <= value : r0 < value) && - (right ? value <= r1 : value < r1); -} - -function isBoolean(_) { - return typeof _ === 'boolean'; -} - -function isDate(_) { - return Object.prototype.toString.call(_) === '[object Date]'; -} - -function isNumber(_) { - return typeof _ === 'number'; -} - -function isRegExp(_) { - return Object.prototype.toString.call(_) === '[object RegExp]'; -} - -function key(fields, flat) { - if (fields) { - fields = flat - ? array(fields).map(function(f) { return f.replace(/\\(.)/g, '$1'); }) - : array(fields); - } - - var fn = !(fields && fields.length) - ? function() { return ''; } - : Function('_', 'return \'\'+' + - fields.map(function(f) { - return '_[' + (flat - ? $(f) - : splitAccessPath(f).map($).join('][') - ) + ']'; - }).join('+\'|\'+') + ';'); - - return accessor(fn, fields, 'key'); -} - -function lerp(array, frac) { - const lo = array[0], - hi = peek(array), - f = +frac; - return !f ? lo : f === 1 ? hi : lo + f * (hi - lo); -} - -function merge(compare, array0, array1, output) { - var n0 = array0.length, - n1 = array1.length; - - if (!n1) return array0; - if (!n0) return array1; - - var merged = output || new array0.constructor(n0 + n1), - i0 = 0, i1 = 0, i = 0; - - for (; i0 0 - ? array1[i1++] - : array0[i0++]; - } - - for (; i0= 0) s += str; - return s; -} - -function pad(str, length, padchar, align) { - var c = padchar || ' ', - s = str + '', - n = length - s.length; - - return n <= 0 ? s - : align === 'left' ? repeat(c, n) + s - : align === 'center' ? repeat(c, ~~(n/2)) + s + repeat(c, Math.ceil(n/2)) - : s + repeat(c, n); -} - -/** - * Return the numerical span of an array: the difference between - * the last and first values. - */ -function span(array) { - return (peek(array) - array[0]) || 0; -} - -function toBoolean(_) { - return _ == null || _ === '' ? null : !_ || _ === 'false' || _ === '0' ? false : !!_; -} - -function defaultParser(_) { - return isNumber(_) ? _ : isDate(_) ? _ : Date.parse(_); -} - -function toDate(_, parser) { - parser = parser || defaultParser; - return _ == null || _ === '' ? null : parser(_); -} - -function toString(_) { - return _ == null || _ === '' ? null : _ + ''; -} - -function toSet(_) { - for (var s={}, i=0, n=_.length; i= 0) { - list.splice(idx, 1); - } - } - return list; - }; - - return list; -} - -/** - * Invoke and await a potentially async callback function. If - * an error occurs, trap it and route to Dataflow.error. - * @param {Dataflow} df - The dataflow instance - * @param {function} callback - A callback function to invoke - * and then await. The dataflow will be passed as the single - * argument to the function. - */ -async function asyncCallback(df, callback) { - try { await callback(df); } catch (err) { df.error(err); } -} - -var TUPLE_ID_KEY = Symbol('vega_id'), - TUPLE_ID = 1; - -/** - * Checks if an input value is a registered tuple. - * @param {*} t - The value to check. - * @return {boolean} True if the input is a tuple, false otherwise. - */ -function isTuple(t) { - return !!(t && tupleid(t)); -} - -/** - * Returns the id of a tuple. - * @param {object} t - The input tuple. - * @return {*} the tuple id. - */ -function tupleid(t) { - return t[TUPLE_ID_KEY]; -} - -/** - * Sets the id of a tuple. - * @param {object} t - The input tuple. - * @param {*} id - The id value to set. - * @return {object} the input tuple. - */ -function setid(t, id) { - t[TUPLE_ID_KEY] = id; - return t; -} - -/** - * Ingest an object or value as a data tuple. - * If the input value is an object, an id field will be added to it. For - * efficiency, the input object is modified directly. A copy is not made. - * If the input value is a literal, it will be wrapped in a new object - * instance, with the value accessible as the 'data' property. - * @param datum - The value to ingest. - * @return {object} The ingested data tuple. - */ -function ingest(datum) { - var t = (datum === Object(datum)) ? datum : {data: datum}; - return tupleid(t) ? t : setid(t, TUPLE_ID++); -} - -/** - * Given a source tuple, return a derived copy. - * @param {object} t - The source tuple. - * @return {object} The derived tuple. - */ -function derive(t) { - return rederive(t, ingest({})); -} - -/** - * Rederive a derived tuple by copying values from the source tuple. - * @param {object} t - The source tuple. - * @param {object} d - The derived tuple. - * @return {object} The derived tuple. - */ -function rederive(t, d) { - for (var k in t) d[k] = t[k]; - return d; -} - -/** - * Replace an existing tuple with a new tuple. - * @param {object} t - The existing data tuple. - * @param {object} d - The new tuple that replaces the old. - * @return {object} The new tuple. - */ -function replace(t, d) { - return setid(d, tupleid(t)); -} - -function isChangeSet(v) { - return v && v.constructor === changeset; -} - -function changeset() { - var add = [], // insert tuples - rem = [], // remove tuples - mod = [], // modify tuples - remp = [], // remove by predicate - modp = [], // modify by predicate - reflow = false; - - return { - constructor: changeset, - insert: function(t) { - var d = array(t), i = 0, n = d.length; - for (; i 0) { - modify(t, f, m.value); - pulse.modifies(f); - } - } - - // process predicate-based modifications - for (i=0, n=modp.length; i 0) { - modify(t, m.field, m.value); - } - }); - pulse.modifies(m.field); - } - - // upon reflow request, populate mod with all non-removed tuples - // otherwise, populate mod with modified tuples only - if (reflow) { - pulse.mod = rem.length || remp.length - ? tuples.filter(function(t) { return cur[tupleid(t)] > 0; }) - : tuples.slice(); - } else { - for (id in out) pulse.mod.push(out[id]); - } - - return pulse; - } - }; -} - -var CACHE = '_:mod:_'; - -/** - * Hash that tracks modifications to assigned values. - * Callers *must* use the set method to update values. - */ -function Parameters() { - Object.defineProperty(this, CACHE, {writable: true, value: {}}); -} - -var prototype = Parameters.prototype; - -/** - * Set a parameter value. If the parameter value changes, the parameter - * will be recorded as modified. - * @param {string} name - The parameter name. - * @param {number} index - The index into an array-value parameter. Ignored if - * the argument is undefined, null or less than zero. - * @param {*} value - The parameter value to set. - * @param {boolean} [force=false] - If true, records the parameter as modified - * even if the value is unchanged. - * @return {Parameters} - This parameter object. - */ -prototype.set = function(name, index, value, force) { - var o = this, - v = o[name], - mod = o[CACHE]; - - if (index != null && index >= 0) { - if (v[index] !== value || force) { - v[index] = value; - mod[index + ':' + name] = -1; - mod[name] = -1; - } - } else if (v !== value || force) { - o[name] = value; - mod[name] = isArray(value) ? 1 + value.length : -1; - } - - return o; -}; - -/** - * Tests if one or more parameters has been modified. If invoked with no - * arguments, returns true if any parameter value has changed. If the first - * argument is array, returns trues if any parameter name in the array has - * changed. Otherwise, tests if the given name and optional array index has - * changed. - * @param {string} name - The parameter name to test. - * @param {number} [index=undefined] - The parameter array index to test. - * @return {boolean} - Returns true if a queried parameter was modified. - */ -prototype.modified = function(name, index) { - var mod = this[CACHE], k; - if (!arguments.length) { - for (k in mod) { if (mod[k]) return true; } - return false; - } else if (isArray(name)) { - for (k=0; k= 0) - ? (index + 1 < mod[name] || !!mod[index + ':' + name]) - : !!mod[name]; -}; - -/** - * Clears the modification records. After calling this method, - * all parameters are considered unmodified. - */ -prototype.clear = function() { - this[CACHE] = {}; - return this; -}; - -var OP_ID = 0; -var PULSE = 'pulse'; -var NO_PARAMS = new Parameters(); - -// Boolean Flags -var SKIP = 1, - MODIFIED = 2; - -/** - * An Operator is a processing node in a dataflow graph. - * Each operator stores a value and an optional value update function. - * Operators can accept a hash of named parameters. Parameter values can - * either be direct (JavaScript literals, arrays, objects) or indirect - * (other operators whose values will be pulled dynamically). Operators - * included as parameters will have this operator added as a dependency. - * @constructor - * @param {*} [init] - The initial value for this operator. - * @param {function(object, Pulse)} [update] - An update function. Upon - * evaluation of this operator, the update function will be invoked and the - * return value will be used as the new value of this operator. - * @param {object} [params] - The parameters for this operator. - * @param {boolean} [react=true] - Flag indicating if this operator should - * listen for changes to upstream operators included as parameters. - * @see parameters - */ -function Operator(init, update, params, react) { - this.id = ++OP_ID; - this.value = init; - this.stamp = -1; - this.rank = -1; - this.qrank = -1; - this.flags = 0; - - if (update) { - this._update = update; - } - if (params) this.parameters(params, react); -} - -var prototype$1 = Operator.prototype; - -/** - * Returns a list of target operators dependent on this operator. - * If this list does not exist, it is created and then returned. - * @return {UniqueList} - */ -prototype$1.targets = function() { - return this._targets || (this._targets = UniqueList(id)); -}; - -/** - * Sets the value of this operator. - * @param {*} value - the value to set. - * @return {Number} Returns 1 if the operator value has changed - * according to strict equality, returns 0 otherwise. - */ -prototype$1.set = function(value) { - if (this.value !== value) { - this.value = value; - return 1; - } else { - return 0; - } -}; - -function flag(bit) { - return function(state) { - var f = this.flags; - if (arguments.length === 0) return !!(f & bit); - this.flags = state ? (f | bit) : (f & ~bit); - return this; - }; -} - -/** - * Indicates that operator evaluation should be skipped on the next pulse. - * This operator will still propagate incoming pulses, but its update function - * will not be invoked. The skip flag is reset after every pulse, so calling - * this method will affect processing of the next pulse only. - */ -prototype$1.skip = flag(SKIP); - -/** - * Indicates that this operator's value has been modified on its most recent - * pulse. Normally modification is checked via strict equality; however, in - * some cases it is more efficient to update the internal state of an object. - * In those cases, the modified flag can be used to trigger propagation. Once - * set, the modification flag persists across pulses until unset. The flag can - * be used with the last timestamp to test if a modification is recent. - */ -prototype$1.modified = flag(MODIFIED); - -/** - * Sets the parameters for this operator. The parameter values are analyzed for - * operator instances. If found, this operator will be added as a dependency - * of the parameterizing operator. Operator values are dynamically marshalled - * from each operator parameter prior to evaluation. If a parameter value is - * an array, the array will also be searched for Operator instances. However, - * the search does not recurse into sub-arrays or object properties. - * @param {object} params - A hash of operator parameters. - * @param {boolean} [react=true] - A flag indicating if this operator should - * automatically update (react) when parameter values change. In other words, - * this flag determines if the operator registers itself as a listener on - * any upstream operators included in the parameters. - * @param {boolean} [initonly=false] - A flag indicating if this operator - * should calculate an update only upon its initiatal evaluation, then - * deregister dependencies and suppress all future update invocations. - * @return {Operator[]} - An array of upstream dependencies. - */ -prototype$1.parameters = function(params, react, initonly) { - react = react !== false; - var self = this, - argval = (self._argval = self._argval || new Parameters()), - argops = (self._argops = self._argops || []), - deps = [], - name, value, n, i; - - function add(name, index, value) { - if (value instanceof Operator) { - if (value !== self) { - if (react) value.targets().add(self); - deps.push(value); - } - argops.push({op:value, name:name, index:index}); - } else { - argval.set(name, index, value); - } - } - - for (name in params) { - value = params[name]; - - if (name === PULSE) { - array(value).forEach(function(op) { - if (!(op instanceof Operator)) { - error('Pulse parameters must be operator instances.'); - } else if (op !== self) { - op.targets().add(self); - deps.push(op); - } - }); - self.source = value; - } else if (isArray(value)) { - argval.set(name, -1, Array(n = value.length)); - for (i=0; i} - The source operators that should propagate - * to the target operator. - */ -function connect(target, sources) { - var targetRank = target.rank, i, n; - - for (i=0, n=sources.length; i pause) { - t = now; - return 1; - } else { - return 0; - } - }); -}; - -prototype$2.debounce = function(delay) { - var s = stream(); - - this.targets().add(stream(null, null, - debounce(delay, function(e) { - var df = e.dataflow; - s.receive(e); - if (df && df.run) df.run(); - }) - )); - - return s; -}; - -prototype$2.between = function(a, b) { - var active = false; - a.targets().add(stream(null, null, function() { active = true; })); - b.targets().add(stream(null, null, function() { active = false; })); - return this.filter(function() { return active; }); -}; - -/** - * Create a new event stream from an event source. - * @param {object} source - The event source to monitor. The input must - * support the addEventListener method. - * @param {string} type - The event type. - * @param {function(object): boolean} [filter] - Event filter function. - * @param {function(object): *} [apply] - Event application function. - * If provided, this function will be invoked and the result will be - * used as the downstream event value. - * @return {EventStream} - */ -function events(source, type, filter, apply) { - var df = this, - s = stream(filter, apply), - send = function(e) { - e.dataflow = df; - try { - s.receive(e); - } catch (error) { - df.error(error); - } finally { - df.run(); - } - }, - sources; - - if (typeof source === 'string' && typeof document !== 'undefined') { - sources = document.querySelectorAll(source); - } else { - sources = array(source); - } - - for (var i=0, n=sources.length; i 9999 ? "+" + pad$1(year, 6) - : pad$1(year, 4); -} - -function formatDate(date) { - var hours = date.getUTCHours(), - minutes = date.getUTCMinutes(), - seconds = date.getUTCSeconds(), - milliseconds = date.getUTCMilliseconds(); - return isNaN(date) ? "Invalid Date" - : formatYear(date.getUTCFullYear(), 4) + "-" + pad$1(date.getUTCMonth() + 1, 2) + "-" + pad$1(date.getUTCDate(), 2) - + (milliseconds ? "T" + pad$1(hours, 2) + ":" + pad$1(minutes, 2) + ":" + pad$1(seconds, 2) + "." + pad$1(milliseconds, 3) + "Z" - : seconds ? "T" + pad$1(hours, 2) + ":" + pad$1(minutes, 2) + ":" + pad$1(seconds, 2) + "Z" - : minutes || hours ? "T" + pad$1(hours, 2) + ":" + pad$1(minutes, 2) + "Z" - : ""); -} - -function dsvFormat(delimiter) { - var reFormat = new RegExp("[\"" + delimiter + "\n\r]"), - DELIMITER = delimiter.charCodeAt(0); - - function parse(text, f) { - var convert, columns, rows = parseRows(text, function(row, i) { - if (convert) return convert(row, i - 1); - columns = row, convert = f ? customConverter(row, f) : objectConverter(row); - }); - rows.columns = columns || []; - return rows; - } - - function parseRows(text, f) { - var rows = [], // output rows - N = text.length, - I = 0, // current character index - n = 0, // current line number - t, // current token - eof = N <= 0, // current token followed by EOF? - eol = false; // current token followed by EOL? - - // Strip the trailing newline. - if (text.charCodeAt(N - 1) === NEWLINE) --N; - if (text.charCodeAt(N - 1) === RETURN) --N; - - function token() { - if (eof) return EOF; - if (eol) return eol = false, EOL; - - // Unescape quotes. - var i, j = I, c; - if (text.charCodeAt(j) === QUOTE) { - while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE); - if ((i = I) >= N) eof = true; - else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true; - else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; } - return text.slice(j + 1, i - 1).replace(/""/g, "\""); - } - - // Find next delimiter or newline. - while (I < N) { - if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true; - else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; } - else if (c !== DELIMITER) continue; - return text.slice(j, i); - } - - // Return last token before EOF. - return eof = true, text.slice(j, N); - } - - while ((t = token()) !== EOF) { - var row = []; - while (t !== EOL && t !== EOF) row.push(t), t = token(); - if (f && (row = f(row, n++)) == null) continue; - rows.push(row); - } - - return rows; - } - - function preformatBody(rows, columns) { - return rows.map(function(row) { - return columns.map(function(column) { - return formatValue(row[column]); - }).join(delimiter); - }); - } - - function format(rows, columns) { - if (columns == null) columns = inferColumns(rows); - return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join("\n"); - } - - function formatBody(rows, columns) { - if (columns == null) columns = inferColumns(rows); - return preformatBody(rows, columns).join("\n"); - } - - function formatRows(rows) { - return rows.map(formatRow).join("\n"); - } - - function formatRow(row) { - return row.map(formatValue).join(delimiter); - } - - function formatValue(value) { - return value == null ? "" - : value instanceof Date ? formatDate(value) - : reFormat.test(value += "") ? "\"" + value.replace(/"/g, "\"\"") + "\"" - : value; - } - - return { - parse: parse, - parseRows: parseRows, - format: format, - formatBody: formatBody, - formatRows: formatRows - }; -} - -var csv = dsvFormat(","); - -var tsv = dsvFormat("\t"); - -function delimitedFormat(delimiter) { - const parse = function(data, format) { - const delim = {delimiter: delimiter}; - return dsv(data, format ? extend(format, delim) : delim); - }; - - parse.responseType = 'text'; - - return parse; -} - -function dsv(data, format) { - if (format.header) { - data = format.header - .map($) - .join(format.delimiter) + '\n' + data; - } - return dsvFormat(format.delimiter).parse(data + ''); -} - -dsv.responseType = 'text'; - -function isBuffer(_) { - return (typeof Buffer === 'function' && isFunction(Buffer.isBuffer)) - ? Buffer.isBuffer(_) : false; -} - -function json(data, format) { - const prop = (format && format.property) ? field(format.property) : identity; - return isObject(data) && !isBuffer(data) - ? parseJSON(prop(data)) - : prop(JSON.parse(data)); -} - -json.responseType = 'json'; - -function parseJSON(data, format) { - return (format && format.copy) - ? JSON.parse(JSON.stringify(data)) - : data; -} - -function identity$1(x) { - return x; -} - -function transform(transform) { - if (transform == null) return identity$1; - var x0, - y0, - kx = transform.scale[0], - ky = transform.scale[1], - dx = transform.translate[0], - dy = transform.translate[1]; - return function(input, i) { - if (!i) x0 = y0 = 0; - var j = 2, n = input.length, output = new Array(n); - output[0] = (x0 += input[0]) * kx + dx; - output[1] = (y0 += input[1]) * ky + dy; - while (j < n) output[j] = input[j], ++j; - return output; - }; -} - -function reverse(array, n) { - var t, j = array.length, i = j - n; - while (i < --j) t = array[i], array[i++] = array[j], array[j] = t; -} - -function feature(topology, o) { - return o.type === "GeometryCollection" - ? {type: "FeatureCollection", features: o.geometries.map(function(o) { return feature$1(topology, o); })} - : feature$1(topology, o); -} - -function feature$1(topology, o) { - var id = o.id, - bbox = o.bbox, - properties = o.properties == null ? {} : o.properties, - geometry = object(topology, o); - return id == null && bbox == null ? {type: "Feature", properties: properties, geometry: geometry} - : bbox == null ? {type: "Feature", id: id, properties: properties, geometry: geometry} - : {type: "Feature", id: id, bbox: bbox, properties: properties, geometry: geometry}; -} - -function object(topology, o) { - var transformPoint = transform(topology.transform), - arcs = topology.arcs; - - function arc(i, points) { - if (points.length) points.pop(); - for (var a = arcs[i < 0 ? ~i : i], k = 0, n = a.length; k < n; ++k) { - points.push(transformPoint(a[k], k)); - } - if (i < 0) reverse(points, n); - } - - function point(p) { - return transformPoint(p); - } - - function line(arcs) { - var points = []; - for (var i = 0, n = arcs.length; i < n; ++i) arc(arcs[i], points); - if (points.length < 2) points.push(points[0]); // This should never happen per the specification. - return points; - } - - function ring(arcs) { - var points = line(arcs); - while (points.length < 4) points.push(points[0]); // This may happen if an arc has only two points. - return points; - } - - function polygon(arcs) { - return arcs.map(ring); - } - - function geometry(o) { - var type = o.type, coordinates; - switch (type) { - case "GeometryCollection": return {type: type, geometries: o.geometries.map(geometry)}; - case "Point": coordinates = point(o.coordinates); break; - case "MultiPoint": coordinates = o.coordinates.map(point); break; - case "LineString": coordinates = line(o.arcs); break; - case "MultiLineString": coordinates = o.arcs.map(line); break; - case "Polygon": coordinates = polygon(o.arcs); break; - case "MultiPolygon": coordinates = o.arcs.map(polygon); break; - default: return null; - } - return {type: type, coordinates: coordinates}; - } - - return geometry(o); -} - -function stitch(topology, arcs) { - var stitchedArcs = {}, - fragmentByStart = {}, - fragmentByEnd = {}, - fragments = [], - emptyIndex = -1; - - // Stitch empty arcs first, since they may be subsumed by other arcs. - arcs.forEach(function(i, j) { - var arc = topology.arcs[i < 0 ? ~i : i], t; - if (arc.length < 3 && !arc[1][0] && !arc[1][1]) { - t = arcs[++emptyIndex], arcs[emptyIndex] = i, arcs[j] = t; - } - }); - - arcs.forEach(function(i) { - var e = ends(i), - start = e[0], - end = e[1], - f, g; - - if (f = fragmentByEnd[start]) { - delete fragmentByEnd[f.end]; - f.push(i); - f.end = end; - if (g = fragmentByStart[end]) { - delete fragmentByStart[g.start]; - var fg = g === f ? f : f.concat(g); - fragmentByStart[fg.start = f.start] = fragmentByEnd[fg.end = g.end] = fg; - } else { - fragmentByStart[f.start] = fragmentByEnd[f.end] = f; - } - } else if (f = fragmentByStart[end]) { - delete fragmentByStart[f.start]; - f.unshift(i); - f.start = start; - if (g = fragmentByEnd[start]) { - delete fragmentByEnd[g.end]; - var gf = g === f ? f : g.concat(f); - fragmentByStart[gf.start = g.start] = fragmentByEnd[gf.end = f.end] = gf; - } else { - fragmentByStart[f.start] = fragmentByEnd[f.end] = f; - } - } else { - f = [i]; - fragmentByStart[f.start = start] = fragmentByEnd[f.end = end] = f; - } - }); - - function ends(i) { - var arc = topology.arcs[i < 0 ? ~i : i], p0 = arc[0], p1; - if (topology.transform) p1 = [0, 0], arc.forEach(function(dp) { p1[0] += dp[0], p1[1] += dp[1]; }); - else p1 = arc[arc.length - 1]; - return i < 0 ? [p1, p0] : [p0, p1]; - } - - function flush(fragmentByEnd, fragmentByStart) { - for (var k in fragmentByEnd) { - var f = fragmentByEnd[k]; - delete fragmentByStart[f.start]; - delete f.start; - delete f.end; - f.forEach(function(i) { stitchedArcs[i < 0 ? ~i : i] = 1; }); - fragments.push(f); - } - } - - flush(fragmentByEnd, fragmentByStart); - flush(fragmentByStart, fragmentByEnd); - arcs.forEach(function(i) { if (!stitchedArcs[i < 0 ? ~i : i]) fragments.push([i]); }); - - return fragments; -} - -function mesh(topology) { - return object(topology, meshArcs.apply(this, arguments)); -} - -function meshArcs(topology, object, filter) { - var arcs, i, n; - if (arguments.length > 1) arcs = extractArcs(topology, object, filter); - else for (i = 0, arcs = new Array(n = topology.arcs.length); i < n; ++i) arcs[i] = i; - return {type: "MultiLineString", arcs: stitch(topology, arcs)}; -} - -function extractArcs(topology, object, filter) { - var arcs = [], - geomsByArc = [], - geom; - - function extract0(i) { - var j = i < 0 ? ~i : i; - (geomsByArc[j] || (geomsByArc[j] = [])).push({i: i, g: geom}); - } - - function extract1(arcs) { - arcs.forEach(extract0); - } - - function extract2(arcs) { - arcs.forEach(extract1); - } - - function extract3(arcs) { - arcs.forEach(extract2); - } - - function geometry(o) { - switch (geom = o, o.type) { - case "GeometryCollection": o.geometries.forEach(geometry); break; - case "LineString": extract1(o.arcs); break; - case "MultiLineString": case "Polygon": extract2(o.arcs); break; - case "MultiPolygon": extract3(o.arcs); break; - } - } - - geometry(object); - - geomsByArc.forEach(filter == null - ? function(geoms) { arcs.push(geoms[0].i); } - : function(geoms) { if (filter(geoms[0].g, geoms[geoms.length - 1].g)) arcs.push(geoms[0].i); }); - - return arcs; -} - -const filters = { - interior: (a, b) => a !== b, - exterior: (a, b) => a === b -}; - -function topojson(data, format) { - let method, object, property, filter; - data = json(data, format); - - if (format && format.feature) { - method = feature; - property = format.feature; - } else if (format && format.mesh) { - method = mesh; - property = format.mesh; - filter = filters[format.filter]; - } else { - error('Missing TopoJSON feature or mesh parameter.'); - } - - object = (object = data.objects[property]) - ? method(data, object, filter) - : error('Invalid TopoJSON object: ' + property); - - return object && object.features || [object]; -} - -topojson.responseType = 'json'; - -const format = { - dsv: dsv, - csv: delimitedFormat(','), - tsv: delimitedFormat('\t'), - json: json, - topojson: topojson -}; - -function formats(name, reader) { - if (arguments.length > 1) { - format[name] = reader; - return this; - } else { - return format.hasOwnProperty(name) ? format[name] : null; - } -} - -function responseType(type) { - const f = formats(type); - return f && f.responseType || 'text'; -} - -var t0 = new Date, - t1 = new Date; - -function newInterval(floori, offseti, count, field) { - - function interval(date) { - return floori(date = new Date(+date)), date; - } - - interval.floor = interval; - - interval.ceil = function(date) { - return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date; - }; - - interval.round = function(date) { - var d0 = interval(date), - d1 = interval.ceil(date); - return date - d0 < d1 - date ? d0 : d1; - }; - - interval.offset = function(date, step) { - return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date; - }; - - interval.range = function(start, stop, step) { - var range = [], previous; - start = interval.ceil(start); - step = step == null ? 1 : Math.floor(step); - if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date - do range.push(previous = new Date(+start)), offseti(start, step), floori(start); - while (previous < start && start < stop); - return range; - }; - - interval.filter = function(test) { - return newInterval(function(date) { - if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1); - }, function(date, step) { - if (date >= date) { - if (step < 0) while (++step <= 0) { - while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty - } else while (--step >= 0) { - while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty - } - } - }); - }; - - if (count) { - interval.count = function(start, end) { - t0.setTime(+start), t1.setTime(+end); - floori(t0), floori(t1); - return Math.floor(count(t0, t1)); - }; - - interval.every = function(step) { - step = Math.floor(step); - return !isFinite(step) || !(step > 0) ? null - : !(step > 1) ? interval - : interval.filter(field - ? function(d) { return field(d) % step === 0; } - : function(d) { return interval.count(0, d) % step === 0; }); - }; - } - - return interval; -} - -var millisecond = newInterval(function() { - // noop -}, function(date, step) { - date.setTime(+date + step); -}, function(start, end) { - return end - start; -}); - -// An optimized implementation for this simple case. -millisecond.every = function(k) { - k = Math.floor(k); - if (!isFinite(k) || !(k > 0)) return null; - if (!(k > 1)) return millisecond; - return newInterval(function(date) { - date.setTime(Math.floor(date / k) * k); - }, function(date, step) { - date.setTime(+date + step * k); - }, function(start, end) { - return (end - start) / k; - }); -}; - -var durationSecond = 1e3; -var durationMinute = 6e4; -var durationHour = 36e5; -var durationDay = 864e5; -var durationWeek = 6048e5; - -var second = newInterval(function(date) { - date.setTime(date - date.getMilliseconds()); -}, function(date, step) { - date.setTime(+date + step * durationSecond); -}, function(start, end) { - return (end - start) / durationSecond; -}, function(date) { - return date.getUTCSeconds(); -}); - -var minute = newInterval(function(date) { - date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond); -}, function(date, step) { - date.setTime(+date + step * durationMinute); -}, function(start, end) { - return (end - start) / durationMinute; -}, function(date) { - return date.getMinutes(); -}); - -var hour = newInterval(function(date) { - date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute); -}, function(date, step) { - date.setTime(+date + step * durationHour); -}, function(start, end) { - return (end - start) / durationHour; -}, function(date) { - return date.getHours(); -}); - -var day = newInterval(function(date) { - date.setHours(0, 0, 0, 0); -}, function(date, step) { - date.setDate(date.getDate() + step); -}, function(start, end) { - return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay; -}, function(date) { - return date.getDate() - 1; -}); - -function weekday(i) { - return newInterval(function(date) { - date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7); - date.setHours(0, 0, 0, 0); - }, function(date, step) { - date.setDate(date.getDate() + step * 7); - }, function(start, end) { - return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek; - }); -} - -var sunday = weekday(0); -var monday = weekday(1); -var tuesday = weekday(2); -var wednesday = weekday(3); -var thursday = weekday(4); -var friday = weekday(5); -var saturday = weekday(6); - -var month = newInterval(function(date) { - date.setDate(1); - date.setHours(0, 0, 0, 0); -}, function(date, step) { - date.setMonth(date.getMonth() + step); -}, function(start, end) { - return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12; -}, function(date) { - return date.getMonth(); -}); - -var year = newInterval(function(date) { - date.setMonth(0, 1); - date.setHours(0, 0, 0, 0); -}, function(date, step) { - date.setFullYear(date.getFullYear() + step); -}, function(start, end) { - return end.getFullYear() - start.getFullYear(); -}, function(date) { - return date.getFullYear(); -}); - -// An optimized implementation for this simple case. -year.every = function(k) { - return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) { - date.setFullYear(Math.floor(date.getFullYear() / k) * k); - date.setMonth(0, 1); - date.setHours(0, 0, 0, 0); - }, function(date, step) { - date.setFullYear(date.getFullYear() + step * k); - }); -}; - -var utcMinute = newInterval(function(date) { - date.setUTCSeconds(0, 0); -}, function(date, step) { - date.setTime(+date + step * durationMinute); -}, function(start, end) { - return (end - start) / durationMinute; -}, function(date) { - return date.getUTCMinutes(); -}); - -var utcHour = newInterval(function(date) { - date.setUTCMinutes(0, 0, 0); -}, function(date, step) { - date.setTime(+date + step * durationHour); -}, function(start, end) { - return (end - start) / durationHour; -}, function(date) { - return date.getUTCHours(); -}); - -var utcDay = newInterval(function(date) { - date.setUTCHours(0, 0, 0, 0); -}, function(date, step) { - date.setUTCDate(date.getUTCDate() + step); -}, function(start, end) { - return (end - start) / durationDay; -}, function(date) { - return date.getUTCDate() - 1; -}); - -function utcWeekday(i) { - return newInterval(function(date) { - date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7); - date.setUTCHours(0, 0, 0, 0); - }, function(date, step) { - date.setUTCDate(date.getUTCDate() + step * 7); - }, function(start, end) { - return (end - start) / durationWeek; - }); -} - -var utcSunday = utcWeekday(0); -var utcMonday = utcWeekday(1); -var utcTuesday = utcWeekday(2); -var utcWednesday = utcWeekday(3); -var utcThursday = utcWeekday(4); -var utcFriday = utcWeekday(5); -var utcSaturday = utcWeekday(6); - -var utcMonth = newInterval(function(date) { - date.setUTCDate(1); - date.setUTCHours(0, 0, 0, 0); -}, function(date, step) { - date.setUTCMonth(date.getUTCMonth() + step); -}, function(start, end) { - return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12; -}, function(date) { - return date.getUTCMonth(); -}); - -var utcYear = newInterval(function(date) { - date.setUTCMonth(0, 1); - date.setUTCHours(0, 0, 0, 0); -}, function(date, step) { - date.setUTCFullYear(date.getUTCFullYear() + step); -}, function(start, end) { - return end.getUTCFullYear() - start.getUTCFullYear(); -}, function(date) { - return date.getUTCFullYear(); -}); - -// An optimized implementation for this simple case. -utcYear.every = function(k) { - return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) { - date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k); - date.setUTCMonth(0, 1); - date.setUTCHours(0, 0, 0, 0); - }, function(date, step) { - date.setUTCFullYear(date.getUTCFullYear() + step * k); - }); -}; - -function localDate(d) { - if (0 <= d.y && d.y < 100) { - var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L); - date.setFullYear(d.y); - return date; - } - return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L); -} - -function utcDate(d) { - if (0 <= d.y && d.y < 100) { - var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L)); - date.setUTCFullYear(d.y); - return date; - } - return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L)); -} - -function newYear(y) { - return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0}; -} - -function formatLocale(locale) { - var locale_dateTime = locale.dateTime, - locale_date = locale.date, - locale_time = locale.time, - locale_periods = locale.periods, - locale_weekdays = locale.days, - locale_shortWeekdays = locale.shortDays, - locale_months = locale.months, - locale_shortMonths = locale.shortMonths; - - var periodRe = formatRe(locale_periods), - periodLookup = formatLookup(locale_periods), - weekdayRe = formatRe(locale_weekdays), - weekdayLookup = formatLookup(locale_weekdays), - shortWeekdayRe = formatRe(locale_shortWeekdays), - shortWeekdayLookup = formatLookup(locale_shortWeekdays), - monthRe = formatRe(locale_months), - monthLookup = formatLookup(locale_months), - shortMonthRe = formatRe(locale_shortMonths), - shortMonthLookup = formatLookup(locale_shortMonths); - - var formats = { - "a": formatShortWeekday, - "A": formatWeekday, - "b": formatShortMonth, - "B": formatMonth, - "c": null, - "d": formatDayOfMonth, - "e": formatDayOfMonth, - "f": formatMicroseconds, - "H": formatHour24, - "I": formatHour12, - "j": formatDayOfYear, - "L": formatMilliseconds, - "m": formatMonthNumber, - "M": formatMinutes, - "p": formatPeriod, - "Q": formatUnixTimestamp, - "s": formatUnixTimestampSeconds, - "S": formatSeconds, - "u": formatWeekdayNumberMonday, - "U": formatWeekNumberSunday, - "V": formatWeekNumberISO, - "w": formatWeekdayNumberSunday, - "W": formatWeekNumberMonday, - "x": null, - "X": null, - "y": formatYear$1, - "Y": formatFullYear, - "Z": formatZone, - "%": formatLiteralPercent - }; - - var utcFormats = { - "a": formatUTCShortWeekday, - "A": formatUTCWeekday, - "b": formatUTCShortMonth, - "B": formatUTCMonth, - "c": null, - "d": formatUTCDayOfMonth, - "e": formatUTCDayOfMonth, - "f": formatUTCMicroseconds, - "H": formatUTCHour24, - "I": formatUTCHour12, - "j": formatUTCDayOfYear, - "L": formatUTCMilliseconds, - "m": formatUTCMonthNumber, - "M": formatUTCMinutes, - "p": formatUTCPeriod, - "Q": formatUnixTimestamp, - "s": formatUnixTimestampSeconds, - "S": formatUTCSeconds, - "u": formatUTCWeekdayNumberMonday, - "U": formatUTCWeekNumberSunday, - "V": formatUTCWeekNumberISO, - "w": formatUTCWeekdayNumberSunday, - "W": formatUTCWeekNumberMonday, - "x": null, - "X": null, - "y": formatUTCYear, - "Y": formatUTCFullYear, - "Z": formatUTCZone, - "%": formatLiteralPercent - }; - - var parses = { - "a": parseShortWeekday, - "A": parseWeekday, - "b": parseShortMonth, - "B": parseMonth, - "c": parseLocaleDateTime, - "d": parseDayOfMonth, - "e": parseDayOfMonth, - "f": parseMicroseconds, - "H": parseHour24, - "I": parseHour24, - "j": parseDayOfYear, - "L": parseMilliseconds, - "m": parseMonthNumber, - "M": parseMinutes, - "p": parsePeriod, - "Q": parseUnixTimestamp, - "s": parseUnixTimestampSeconds, - "S": parseSeconds, - "u": parseWeekdayNumberMonday, - "U": parseWeekNumberSunday, - "V": parseWeekNumberISO, - "w": parseWeekdayNumberSunday, - "W": parseWeekNumberMonday, - "x": parseLocaleDate, - "X": parseLocaleTime, - "y": parseYear, - "Y": parseFullYear, - "Z": parseZone, - "%": parseLiteralPercent - }; - - // These recursive directive definitions must be deferred. - formats.x = newFormat(locale_date, formats); - formats.X = newFormat(locale_time, formats); - formats.c = newFormat(locale_dateTime, formats); - utcFormats.x = newFormat(locale_date, utcFormats); - utcFormats.X = newFormat(locale_time, utcFormats); - utcFormats.c = newFormat(locale_dateTime, utcFormats); - - function newFormat(specifier, formats) { - return function(date) { - var string = [], - i = -1, - j = 0, - n = specifier.length, - c, - pad, - format; - - if (!(date instanceof Date)) date = new Date(+date); - - while (++i < n) { - if (specifier.charCodeAt(i) === 37) { - string.push(specifier.slice(j, i)); - if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i); - else pad = c === "e" ? " " : "0"; - if (format = formats[c]) c = format(date, pad); - string.push(c); - j = i + 1; - } - } - - string.push(specifier.slice(j, i)); - return string.join(""); - }; - } - - function newParse(specifier, newDate) { - return function(string) { - var d = newYear(1900), - i = parseSpecifier(d, specifier, string += "", 0), - week, day$1; - if (i != string.length) return null; - - // If a UNIX timestamp is specified, return it. - if ("Q" in d) return new Date(d.Q); - - // The am-pm flag is 0 for AM, and 1 for PM. - if ("p" in d) d.H = d.H % 12 + d.p * 12; - - // Convert day-of-week and week-of-year to day-of-year. - if ("V" in d) { - if (d.V < 1 || d.V > 53) return null; - if (!("w" in d)) d.w = 1; - if ("Z" in d) { - week = utcDate(newYear(d.y)), day$1 = week.getUTCDay(); - week = day$1 > 4 || day$1 === 0 ? utcMonday.ceil(week) : utcMonday(week); - week = utcDay.offset(week, (d.V - 1) * 7); - d.y = week.getUTCFullYear(); - d.m = week.getUTCMonth(); - d.d = week.getUTCDate() + (d.w + 6) % 7; - } else { - week = newDate(newYear(d.y)), day$1 = week.getDay(); - week = day$1 > 4 || day$1 === 0 ? monday.ceil(week) : monday(week); - week = day.offset(week, (d.V - 1) * 7); - d.y = week.getFullYear(); - d.m = week.getMonth(); - d.d = week.getDate() + (d.w + 6) % 7; - } - } else if ("W" in d || "U" in d) { - if (!("w" in d)) d.w = "u" in d ? d.u % 7 : "W" in d ? 1 : 0; - day$1 = "Z" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay(); - d.m = 0; - d.d = "W" in d ? (d.w + 6) % 7 + d.W * 7 - (day$1 + 5) % 7 : d.w + d.U * 7 - (day$1 + 6) % 7; - } - - // If a time zone is specified, all fields are interpreted as UTC and then - // offset according to the specified time zone. - if ("Z" in d) { - d.H += d.Z / 100 | 0; - d.M += d.Z % 100; - return utcDate(d); - } - - // Otherwise, all fields are in local time. - return newDate(d); - }; - } - - function parseSpecifier(d, specifier, string, j) { - var i = 0, - n = specifier.length, - m = string.length, - c, - parse; - - while (i < n) { - if (j >= m) return -1; - c = specifier.charCodeAt(i++); - if (c === 37) { - c = specifier.charAt(i++); - parse = parses[c in pads ? specifier.charAt(i++) : c]; - if (!parse || ((j = parse(d, string, j)) < 0)) return -1; - } else if (c != string.charCodeAt(j++)) { - return -1; - } - } - - return j; - } - - function parsePeriod(d, string, i) { - var n = periodRe.exec(string.slice(i)); - return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1; - } - - function parseShortWeekday(d, string, i) { - var n = shortWeekdayRe.exec(string.slice(i)); - return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1; - } - - function parseWeekday(d, string, i) { - var n = weekdayRe.exec(string.slice(i)); - return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1; - } - - function parseShortMonth(d, string, i) { - var n = shortMonthRe.exec(string.slice(i)); - return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1; - } - - function parseMonth(d, string, i) { - var n = monthRe.exec(string.slice(i)); - return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1; - } - - function parseLocaleDateTime(d, string, i) { - return parseSpecifier(d, locale_dateTime, string, i); - } - - function parseLocaleDate(d, string, i) { - return parseSpecifier(d, locale_date, string, i); - } - - function parseLocaleTime(d, string, i) { - return parseSpecifier(d, locale_time, string, i); - } - - function formatShortWeekday(d) { - return locale_shortWeekdays[d.getDay()]; - } - - function formatWeekday(d) { - return locale_weekdays[d.getDay()]; - } - - function formatShortMonth(d) { - return locale_shortMonths[d.getMonth()]; - } - - function formatMonth(d) { - return locale_months[d.getMonth()]; - } - - function formatPeriod(d) { - return locale_periods[+(d.getHours() >= 12)]; - } - - function formatUTCShortWeekday(d) { - return locale_shortWeekdays[d.getUTCDay()]; - } - - function formatUTCWeekday(d) { - return locale_weekdays[d.getUTCDay()]; - } - - function formatUTCShortMonth(d) { - return locale_shortMonths[d.getUTCMonth()]; - } - - function formatUTCMonth(d) { - return locale_months[d.getUTCMonth()]; - } - - function formatUTCPeriod(d) { - return locale_periods[+(d.getUTCHours() >= 12)]; - } - - return { - format: function(specifier) { - var f = newFormat(specifier += "", formats); - f.toString = function() { return specifier; }; - return f; - }, - parse: function(specifier) { - var p = newParse(specifier += "", localDate); - p.toString = function() { return specifier; }; - return p; - }, - utcFormat: function(specifier) { - var f = newFormat(specifier += "", utcFormats); - f.toString = function() { return specifier; }; - return f; - }, - utcParse: function(specifier) { - var p = newParse(specifier, utcDate); - p.toString = function() { return specifier; }; - return p; - } - }; -} - -var pads = {"-": "", "_": " ", "0": "0"}, - numberRe = /^\s*\d+/, // note: ignores next directive - percentRe = /^%/, - requoteRe = /[\\^$*+?|[\]().{}]/g; - -function pad$2(value, fill, width) { - var sign = value < 0 ? "-" : "", - string = (sign ? -value : value) + "", - length = string.length; - return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string); -} - -function requote(s) { - return s.replace(requoteRe, "\\$&"); -} - -function formatRe(names) { - return new RegExp("^(?:" + names.map(requote).join("|") + ")", "i"); -} - -function formatLookup(names) { - var map = {}, i = -1, n = names.length; - while (++i < n) map[names[i].toLowerCase()] = i; - return map; -} - -function parseWeekdayNumberSunday(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 1)); - return n ? (d.w = +n[0], i + n[0].length) : -1; -} - -function parseWeekdayNumberMonday(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 1)); - return n ? (d.u = +n[0], i + n[0].length) : -1; -} - -function parseWeekNumberSunday(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.U = +n[0], i + n[0].length) : -1; -} - -function parseWeekNumberISO(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.V = +n[0], i + n[0].length) : -1; -} - -function parseWeekNumberMonday(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.W = +n[0], i + n[0].length) : -1; -} - -function parseFullYear(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 4)); - return n ? (d.y = +n[0], i + n[0].length) : -1; -} - -function parseYear(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1; -} - -function parseZone(d, string, i) { - var n = /^(Z)|([+-]\d\d)(?::?(\d\d))?/.exec(string.slice(i, i + 6)); - return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || "00")), i + n[0].length) : -1; -} - -function parseMonthNumber(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.m = n[0] - 1, i + n[0].length) : -1; -} - -function parseDayOfMonth(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.d = +n[0], i + n[0].length) : -1; -} - -function parseDayOfYear(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 3)); - return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1; -} - -function parseHour24(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.H = +n[0], i + n[0].length) : -1; -} - -function parseMinutes(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.M = +n[0], i + n[0].length) : -1; -} - -function parseSeconds(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 2)); - return n ? (d.S = +n[0], i + n[0].length) : -1; -} - -function parseMilliseconds(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 3)); - return n ? (d.L = +n[0], i + n[0].length) : -1; -} - -function parseMicroseconds(d, string, i) { - var n = numberRe.exec(string.slice(i, i + 6)); - return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1; -} - -function parseLiteralPercent(d, string, i) { - var n = percentRe.exec(string.slice(i, i + 1)); - return n ? i + n[0].length : -1; -} - -function parseUnixTimestamp(d, string, i) { - var n = numberRe.exec(string.slice(i)); - return n ? (d.Q = +n[0], i + n[0].length) : -1; -} - -function parseUnixTimestampSeconds(d, string, i) { - var n = numberRe.exec(string.slice(i)); - return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1; -} - -function formatDayOfMonth(d, p) { - return pad$2(d.getDate(), p, 2); -} - -function formatHour24(d, p) { - return pad$2(d.getHours(), p, 2); -} - -function formatHour12(d, p) { - return pad$2(d.getHours() % 12 || 12, p, 2); -} - -function formatDayOfYear(d, p) { - return pad$2(1 + day.count(year(d), d), p, 3); -} - -function formatMilliseconds(d, p) { - return pad$2(d.getMilliseconds(), p, 3); -} - -function formatMicroseconds(d, p) { - return formatMilliseconds(d, p) + "000"; -} - -function formatMonthNumber(d, p) { - return pad$2(d.getMonth() + 1, p, 2); -} - -function formatMinutes(d, p) { - return pad$2(d.getMinutes(), p, 2); -} - -function formatSeconds(d, p) { - return pad$2(d.getSeconds(), p, 2); -} - -function formatWeekdayNumberMonday(d) { - var day = d.getDay(); - return day === 0 ? 7 : day; -} - -function formatWeekNumberSunday(d, p) { - return pad$2(sunday.count(year(d), d), p, 2); -} - -function formatWeekNumberISO(d, p) { - var day = d.getDay(); - d = (day >= 4 || day === 0) ? thursday(d) : thursday.ceil(d); - return pad$2(thursday.count(year(d), d) + (year(d).getDay() === 4), p, 2); -} - -function formatWeekdayNumberSunday(d) { - return d.getDay(); -} - -function formatWeekNumberMonday(d, p) { - return pad$2(monday.count(year(d), d), p, 2); -} - -function formatYear$1(d, p) { - return pad$2(d.getFullYear() % 100, p, 2); -} - -function formatFullYear(d, p) { - return pad$2(d.getFullYear() % 10000, p, 4); -} - -function formatZone(d) { - var z = d.getTimezoneOffset(); - return (z > 0 ? "-" : (z *= -1, "+")) - + pad$2(z / 60 | 0, "0", 2) - + pad$2(z % 60, "0", 2); -} - -function formatUTCDayOfMonth(d, p) { - return pad$2(d.getUTCDate(), p, 2); -} - -function formatUTCHour24(d, p) { - return pad$2(d.getUTCHours(), p, 2); -} - -function formatUTCHour12(d, p) { - return pad$2(d.getUTCHours() % 12 || 12, p, 2); -} - -function formatUTCDayOfYear(d, p) { - return pad$2(1 + utcDay.count(utcYear(d), d), p, 3); -} - -function formatUTCMilliseconds(d, p) { - return pad$2(d.getUTCMilliseconds(), p, 3); -} - -function formatUTCMicroseconds(d, p) { - return formatUTCMilliseconds(d, p) + "000"; -} - -function formatUTCMonthNumber(d, p) { - return pad$2(d.getUTCMonth() + 1, p, 2); -} - -function formatUTCMinutes(d, p) { - return pad$2(d.getUTCMinutes(), p, 2); -} - -function formatUTCSeconds(d, p) { - return pad$2(d.getUTCSeconds(), p, 2); -} - -function formatUTCWeekdayNumberMonday(d) { - var dow = d.getUTCDay(); - return dow === 0 ? 7 : dow; -} - -function formatUTCWeekNumberSunday(d, p) { - return pad$2(utcSunday.count(utcYear(d), d), p, 2); -} - -function formatUTCWeekNumberISO(d, p) { - var day = d.getUTCDay(); - d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d); - return pad$2(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2); -} - -function formatUTCWeekdayNumberSunday(d) { - return d.getUTCDay(); -} - -function formatUTCWeekNumberMonday(d, p) { - return pad$2(utcMonday.count(utcYear(d), d), p, 2); -} - -function formatUTCYear(d, p) { - return pad$2(d.getUTCFullYear() % 100, p, 2); -} - -function formatUTCFullYear(d, p) { - return pad$2(d.getUTCFullYear() % 10000, p, 4); -} - -function formatUTCZone() { - return "+0000"; -} - -function formatLiteralPercent() { - return "%"; -} - -function formatUnixTimestamp(d) { - return +d; -} - -function formatUnixTimestampSeconds(d) { - return Math.floor(+d / 1000); -} - -var locale; -var timeFormat; -var timeParse; -var utcFormat; -var utcParse; - -defaultLocale({ - dateTime: "%x, %X", - date: "%-m/%-d/%Y", - time: "%-I:%M:%S %p", - periods: ["AM", "PM"], - days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"], - shortDays: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"], - months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], - shortMonths: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] -}); - -function defaultLocale(definition) { - locale = formatLocale(definition); - timeFormat = locale.format; - timeParse = locale.parse; - utcFormat = locale.utcFormat; - utcParse = locale.utcParse; - return locale; -} - -var isoSpecifier = "%Y-%m-%dT%H:%M:%S.%LZ"; - -function formatIsoNative(date) { - return date.toISOString(); -} - -var formatIso = Date.prototype.toISOString - ? formatIsoNative - : utcFormat(isoSpecifier); - -function parseIsoNative(string) { - var date = new Date(string); - return isNaN(date) ? null : date; -} - -var parseIso = +new Date("2000-01-01T00:00:00.000Z") - ? parseIsoNative - : utcParse(isoSpecifier); - -function read(data, schema, dateParse) { - schema = schema || {}; - - const reader = formats(schema.type || 'json'); - if (!reader) error('Unknown data format type: ' + schema.type); - - data = reader(data, schema); - if (schema.parse) parse(data, schema.parse, dateParse); - - if (data.hasOwnProperty('columns')) delete data.columns; - return data; -} - -function parse(data, types, dateParse) { - if (!data.length) return; // early exit for empty data - - dateParse = dateParse || timeParse; - - var fields = data.columns || Object.keys(data[0]), - parsers, datum, field, i, j, n, m; - - if (types === 'auto') types = inferTypes(data, fields); - - fields = Object.keys(types); - parsers = fields.map(function(field) { - var type = types[field], - parts, pattern; - - if (type && (type.indexOf('date:') === 0 || type.indexOf('utc:') === 0)) { - parts = type.split(/:(.+)?/, 2); // split on first : - pattern = parts[1]; - - if ((pattern[0] === '\'' && pattern[pattern.length-1] === '\'') || - (pattern[0] === '"' && pattern[pattern.length-1] === '"')) { - pattern = pattern.slice(1, -1); - } - - return parts[0] === 'utc' ? utcParse(pattern) : dateParse(pattern); - } - - if (!typeParsers[type]) { - throw Error('Illegal format pattern: ' + field + ':' + type); - } - - return typeParsers[type]; - }); - - for (i=0, n=data.length, m=fields.length; i df.touch(target(e)); - } else if (isFunction(update)) { - op = new Operator(null, update, params, false); - func = e => { - op.evaluate(e); - const t = target(e), v = op.value; - isChangeSet(v) ? df.pulse(t, v, options) : df.update(t, v, opt); - }; - } else { - func = e => df.update(target(e), update, opt); - } - - stream.apply(func); -} - -function onOperator(df, source, target, update, params, options) { - if (update === undefined) { - source.targets().add(target); - } else { - const opt = options || {}, - op = new Operator(null, updater(target, update), params, false); - op.modified(opt.force); - op.rank = source.rank; // immediately follow source - source.targets().add(op); // add dependency - - if (target) { - op.skip(true); // skip first invocation - op.value = target.value; // initialize value - op.targets().add(target); // chain dependencies - df.connect(target, [op]); // rerank as needed, #1672 - } - } -} - -function updater(target, update) { - update = isFunction(update) ? update : constant(update); - return target - ? function(_, pulse) { - const value = update(_, pulse); - if (!target.skip()) { - target.skip(value !== this.value).value = value; - } - return value; - } - : update; -} - -/** - * Assigns a rank to an operator. Ranks are assigned in increasing order - * by incrementing an internal rank counter. - * @param {Operator} op - The operator to assign a rank. - */ -function rank(op) { - op.rank = ++this._rank; -} - -/** - * Re-ranks an operator and all downstream target dependencies. This - * is necessary when upstream dependencies of higher rank are added to - * a target operator. - * @param {Operator} op - The operator to re-rank. - */ -function rerank(op) { - var queue = [op], - cur, list, i; - - while (queue.length) { - this.rank(cur = queue.pop()); - if (list = cur._targets) { - for (i=list.length; --i >= 0;) { - queue.push(cur = list[i]); - if (cur === op) error('Cycle detected in dataflow graph.'); - } - } - } -} - -/** - * Sentinel value indicating pulse propagation should stop. - */ -var StopPropagation = {}; - -// Pulse visit type flags -var ADD = (1 << 0), - REM = (1 << 1), - MOD = (1 << 2), - ADD_REM = ADD | REM, - ADD_MOD = ADD | MOD, - ALL = ADD | REM | MOD, - REFLOW = (1 << 3), - SOURCE = (1 << 4), - NO_SOURCE = (1 << 5), - NO_FIELDS = (1 << 6); - -/** - * A Pulse enables inter-operator communication during a run of the - * dataflow graph. In addition to the current timestamp, a pulse may also - * contain a change-set of added, removed or modified data tuples, as well as - * a pointer to a full backing data source. Tuple change sets may not - * be fully materialized; for example, to prevent needless array creation - * a change set may include larger arrays and corresponding filter functions. - * The pulse provides a {@link visit} method to enable proper and efficient - * iteration over requested data tuples. - * - * In addition, each pulse can track modification flags for data tuple fields. - * Responsible transform operators should call the {@link modifies} method to - * indicate changes to data fields. The {@link modified} method enables - * querying of this modification state. - * - * @constructor - * @param {Dataflow} dataflow - The backing dataflow instance. - * @param {number} stamp - The current propagation timestamp. - * @param {string} [encode] - An optional encoding set name, which is then - * accessible as Pulse.encode. Operators can respond to (or ignore) this - * setting as appropriate. This parameter can be used in conjunction with - * the Encode transform in the vega-encode module. - */ -function Pulse(dataflow, stamp, encode) { - this.dataflow = dataflow; - this.stamp = stamp == null ? -1 : stamp; - this.add = []; - this.rem = []; - this.mod = []; - this.fields = null; - this.encode = encode || null; -} - -var prototype$3 = Pulse.prototype; - -/** - * Sentinel value indicating pulse propagation should stop. - */ -prototype$3.StopPropagation = StopPropagation; - -/** - * Boolean flag indicating ADD (added) tuples. - */ -prototype$3.ADD = ADD; - -/** - * Boolean flag indicating REM (removed) tuples. - */ -prototype$3.REM = REM; - -/** - * Boolean flag indicating MOD (modified) tuples. - */ -prototype$3.MOD = MOD; - -/** - * Boolean flag indicating ADD (added) and REM (removed) tuples. - */ -prototype$3.ADD_REM = ADD_REM; - -/** - * Boolean flag indicating ADD (added) and MOD (modified) tuples. - */ -prototype$3.ADD_MOD = ADD_MOD; - -/** - * Boolean flag indicating ADD, REM and MOD tuples. - */ -prototype$3.ALL = ALL; - -/** - * Boolean flag indicating all tuples in a data source - * except for the ADD, REM and MOD tuples. - */ -prototype$3.REFLOW = REFLOW; - -/** - * Boolean flag indicating a 'pass-through' to a - * backing data source, ignoring ADD, REM and MOD tuples. - */ -prototype$3.SOURCE = SOURCE; - -/** - * Boolean flag indicating that source data should be - * suppressed when creating a forked pulse. - */ -prototype$3.NO_SOURCE = NO_SOURCE; - -/** - * Boolean flag indicating that field modifications should be - * suppressed when creating a forked pulse. - */ -prototype$3.NO_FIELDS = NO_FIELDS; - -/** - * Creates a new pulse based on the values of this pulse. - * The dataflow, time stamp and field modification values are copied over. - * By default, new empty ADD, REM and MOD arrays are created. - * @param {number} flags - Integer of boolean flags indicating which (if any) - * tuple arrays should be copied to the new pulse. The supported flag values - * are ADD, REM and MOD. Array references are copied directly: new array - * instances are not created. - * @return {Pulse} - The forked pulse instance. - * @see init - */ -prototype$3.fork = function(flags) { - return new Pulse(this.dataflow).init(this, flags); -}; - -/** - * Creates a copy of this pulse with new materialized array - * instances for the ADD, REM, MOD, and SOURCE arrays. - * The dataflow, time stamp and field modification values are copied over. - * @return {Pulse} - The cloned pulse instance. - * @see init - */ -prototype$3.clone = function() { - var p = this.fork(ALL); - p.add = p.add.slice(); - p.rem = p.rem.slice(); - p.mod = p.mod.slice(); - if (p.source) p.source = p.source.slice(); - return p.materialize(ALL | SOURCE); -}; - -/** - * Returns a pulse that adds all tuples from a backing source. This is - * useful for cases where operators are added to a dataflow after an - * upstream data pipeline has already been processed, ensuring that - * new operators can observe all tuples within a stream. - * @return {Pulse} - A pulse instance with all source tuples included - * in the add array. If the current pulse already has all source - * tuples in its add array, it is returned directly. If the current - * pulse does not have a backing source, it is returned directly. - */ -prototype$3.addAll = function() { - var p = this; - if (!this.source || this.source.length === this.add.length) { - return p; - } else { - p = new Pulse(this.dataflow).init(this); - p.add = p.source; - return p; - } -}; - -/** - * Initialize this pulse based on the values of another pulse. This method - * is used internally by {@link fork} to initialize a new forked tuple. - * The dataflow, time stamp and field modification values are copied over. - * By default, new empty ADD, REM and MOD arrays are created. - * @param {Pulse} src - The source pulse to copy from. - * @param {number} flags - Integer of boolean flags indicating which (if any) - * tuple arrays should be copied to the new pulse. The supported flag values - * are ADD, REM and MOD. Array references are copied directly: new array - * instances are not created. By default, source data arrays are copied - * to the new pulse. Use the NO_SOURCE flag to enforce a null source. - * @return {Pulse} - Returns this Pulse instance. - */ -prototype$3.init = function(src, flags) { - var p = this; - p.stamp = src.stamp; - p.encode = src.encode; - - if (src.fields && !(flags & NO_FIELDS)) { - p.fields = src.fields; - } - - if (flags & ADD) { - p.addF = src.addF; - p.add = src.add; - } else { - p.addF = null; - p.add = []; - } - - if (flags & REM) { - p.remF = src.remF; - p.rem = src.rem; - } else { - p.remF = null; - p.rem = []; - } - - if (flags & MOD) { - p.modF = src.modF; - p.mod = src.mod; - } else { - p.modF = null; - p.mod = []; - } - - if (flags & NO_SOURCE) { - p.srcF = null; - p.source = null; - } else { - p.srcF = src.srcF; - p.source = src.source; - } - - return p; -}; - -/** - * Schedules a function to run after pulse propagation completes. - * @param {function} func - The function to run. - */ -prototype$3.runAfter = function(func) { - this.dataflow.runAfter(func); -}; - -/** - * Indicates if tuples have been added, removed or modified. - * @param {number} [flags] - The tuple types (ADD, REM or MOD) to query. - * Defaults to ALL, returning true if any tuple type has changed. - * @return {boolean} - Returns true if one or more queried tuple types have - * changed, false otherwise. - */ -prototype$3.changed = function(flags) { - var f = flags || ALL; - return ((f & ADD) && this.add.length) - || ((f & REM) && this.rem.length) - || ((f & MOD) && this.mod.length); -}; - -/** - * Forces a "reflow" of tuple values, such that all tuples in the backing - * source are added to the MOD set, unless already present in the ADD set. - * @param {boolean} [fork=false] - If true, returns a forked copy of this - * pulse, and invokes reflow on that derived pulse. - * @return {Pulse} - The reflowed pulse instance. - */ -prototype$3.reflow = function(fork) { - if (fork) return this.fork(ALL).reflow(); - - var len = this.add.length, - src = this.source && this.source.length; - if (src && src !== len) { - this.mod = this.source; - if (len) this.filter(MOD, filter(this, ADD)); - } - return this; -}; - -/** - * Marks one or more data field names as modified to assist dependency - * tracking and incremental processing by transform operators. - * @param {string|Array} _ - The field(s) to mark as modified. - * @return {Pulse} - This pulse instance. - */ -prototype$3.modifies = function(_) { - var fields = array(_), - hash = this.fields || (this.fields = {}); - fields.forEach(function(f) { hash[f] = true; }); - return this; -}; - -/** - * Checks if one or more data fields have been modified during this pulse - * propagation timestamp. - * @param {string|Array} _ - The field(s) to check for modified. - * @return {boolean} - Returns true if any of the provided fields has been - * marked as modified, false otherwise. - */ -prototype$3.modified = function(_) { - var fields = this.fields; - return !(this.mod.length && fields) ? false - : !arguments.length ? !!fields - : isArray(_) ? _.some(function(f) { return fields[f]; }) - : fields[_]; -}; - -/** - * Adds a filter function to one more tuple sets. Filters are applied to - * backing tuple arrays, to determine the actual set of tuples considered - * added, removed or modified. They can be used to delay materialization of - * a tuple set in order to avoid expensive array copies. In addition, the - * filter functions can serve as value transformers: unlike standard predicate - * function (which return boolean values), Pulse filters should return the - * actual tuple value to process. If a tuple set is already filtered, the - * new filter function will be appended into a conjuntive ('and') query. - * @param {number} flags - Flags indicating the tuple set(s) to filter. - * @param {function(*):object} filter - Filter function that will be applied - * to the tuple set array, and should return a data tuple if the value - * should be included in the tuple set, and falsy (or null) otherwise. - * @return {Pulse} - Returns this pulse instance. - */ -prototype$3.filter = function(flags, filter) { - var p = this; - if (flags & ADD) p.addF = addFilter(p.addF, filter); - if (flags & REM) p.remF = addFilter(p.remF, filter); - if (flags & MOD) p.modF = addFilter(p.modF, filter); - if (flags & SOURCE) p.srcF = addFilter(p.srcF, filter); - return p; -}; - -function addFilter(a, b) { - return a ? function(t,i) { return a(t,i) && b(t,i); } : b; -} - -/** - * Materialize one or more tuple sets in this pulse. If the tuple set(s) have - * a registered filter function, it will be applied and the tuple set(s) will - * be replaced with materialized tuple arrays. - * @param {number} flags - Flags indicating the tuple set(s) to materialize. - * @return {Pulse} - Returns this pulse instance. - */ -prototype$3.materialize = function(flags) { - flags = flags || ALL; - var p = this; - if ((flags & ADD) && p.addF) { - p.add = materialize(p.add, p.addF); - p.addF = null; - } - if ((flags & REM) && p.remF) { - p.rem = materialize(p.rem, p.remF); - p.remF = null; - } - if ((flags & MOD) && p.modF) { - p.mod = materialize(p.mod, p.modF); - p.modF = null; - } - if ((flags & SOURCE) && p.srcF) { - p.source = p.source.filter(p.srcF); - p.srcF = null; - } - return p; -}; - -function materialize(data, filter) { - var out = []; - visitArray(data, filter, function(_) { out.push(_); }); - return out; -} - -function filter(pulse, flags) { - var map = {}; - pulse.visit(flags, function(t) { map[tupleid(t)] = 1; }); - return function(t) { return map[tupleid(t)] ? null : t; }; -} - -/** - * Visit one or more tuple sets in this pulse. - * @param {number} flags - Flags indicating the tuple set(s) to visit. - * Legal values are ADD, REM, MOD and SOURCE (if a backing data source - * has been set). - * @param {function(object):*} - Visitor function invoked per-tuple. - * @return {Pulse} - Returns this pulse instance. - */ -prototype$3.visit = function(flags, visitor) { - var p = this, v = visitor, src, sum; - - if (flags & SOURCE) { - visitArray(p.source, p.srcF, v); - return p; - } - - if (flags & ADD) visitArray(p.add, p.addF, v); - if (flags & REM) visitArray(p.rem, p.remF, v); - if (flags & MOD) visitArray(p.mod, p.modF, v); - - if ((flags & REFLOW) && (src = p.source)) { - sum = p.add.length + p.mod.length; - if (sum === src.length) ; else if (sum) { - visitArray(src, filter(p, ADD_MOD), v); - } else { - // if no add/rem/mod tuples, visit source - visitArray(src, p.srcF, v); - } - } - - return p; -}; - -/** - * Represents a set of multiple pulses. Used as input for operators - * that accept multiple pulses at a time. Contained pulses are - * accessible via the public "pulses" array property. This pulse doe - * not carry added, removed or modified tuples directly. However, - * the visit method can be used to traverse all such tuples contained - * in sub-pulses with a timestamp matching this parent multi-pulse. - * @constructor - * @param {Dataflow} dataflow - The backing dataflow instance. - * @param {number} stamp - The timestamp. - * @param {Array} pulses - The sub-pulses for this multi-pulse. - */ -function MultiPulse(dataflow, stamp, pulses, encode) { - var p = this, - c = 0, - pulse, hash, i, n, f; - - this.dataflow = dataflow; - this.stamp = stamp; - this.fields = null; - this.encode = encode || null; - this.pulses = pulses; - - for (i=0, n=pulses.length; i= Info) { - dt = Date.now(); - df.debug('-- START PROPAGATION (' + stamp + ') -----'); - } - - // initialize priority queue, reset touched operators - df._touched.forEach(function(op) { df._enqueue(op, true); }); - df._touched = UniqueList(id); - - try { - while (df._heap.size() > 0) { - // dequeue operator with highest priority - op = df._heap.pop(); - - // re-queue if rank changed - if (op.rank !== op.qrank) { df._enqueue(op, true); continue; } - - // otherwise, evaluate the operator - next = op.run(df._getPulse(op, encode)); - - // await if operator returned a promise - if (next.then) { - next = await next; - } - - if (level >= Debug) { - df.debug(op.id, next === StopPropagation ? 'STOP' : next, op); - } - - // propagate evaluation, enqueue dependent operators - if (next !== StopPropagation) { - df._pulse = next; - if (op._targets) op._targets.forEach(op => df._enqueue(op)); - } - - // increment visit counter - ++count; - } - } catch (err) { - error = err; - } - - // reset pulse map - df._pulses = {}; - df._pulse = null; - - if (level >= Info) { - dt = Date.now() - dt; - df.info('> Pulse ' + stamp + ': ' + count + ' operators; ' + dt + 'ms'); - } - - if (error) { - df._postrun = []; - df.error(error); - } - - // invoke callbacks queued via runAfter - if (df._postrun.length) { - const pr = df._postrun.sort((a, b) => b.priority - a.priority); - df._postrun = []; - for (let i=0; i this._running = null; - (this._running = this.evaluate(encode, prerun, postrun)) - .then(clear, clear); - - return this._running; -} - -/** - * Requests dataflow evaluation and the immediately returns this dataflow - * instance. If there are pending data loading or other asynchronous - * operations, the dataflow will evaluate asynchronously after this method - * has been invoked. To track when dataflow evaluation completes, use the - * {@link runAsync} method instead. This method will raise an error if - * invoked while the dataflow is already in the midst of evaluation. - * @param {string} [encode] - The name of an encoding set to invoke during - * propagation. This value is added to generated Pulse instances; - * operators can then respond to (or ignore) this setting as appropriate. - * This parameter can be used in conjunction with the Encode transform in - * the vega-encode module. - * @param {function} [prerun] - An optional callback function to invoke - * immediately before dataflow evaluation commences. - * @param {function} [postrun] - An optional callback function to invoke - * after dataflow evaluation completes. The callback will be invoked - * after those registered via {@link runAfter}. - * @return {Dataflow} - This dataflow instance. - */ -function run(encode, prerun, postrun) { - return this._pulse ? reentrant(this) - : (this.evaluate(encode, prerun, postrun), this); -} - -/** - * Schedules a callback function to be invoked after the current pulse - * propagation completes. If no propagation is currently occurring, - * the function is invoked immediately. Callbacks scheduled via runAfter - * are invoked immediately upon completion of the current cycle, before - * any request queued via runAsync. This method is primarily intended for - * internal use. Third-party callers using runAfter to schedule a callback - * that invokes {@link run} or {@link runAsync} should not use this method, - * but instead use {@link runAsync} with prerun or postrun arguments. - * @param {function(Dataflow)} callback - The callback function to run. - * The callback will be invoked with this Dataflow instance as its - * sole argument. - * @param {boolean} enqueue - A boolean flag indicating that the - * callback should be queued up to run after the next propagation - * cycle, suppressing immediate invocation when propagation is not - * currently occurring. - * @param {number} [priority] - A priority value used to sort registered - * callbacks to determine execution order. This argument is intended - * for internal Vega use only. - */ -function runAfter(callback, enqueue, priority) { - if (this._pulse || enqueue) { - // pulse propagation is currently running, queue to run after - this._postrun.push({ - priority: priority || 0, - callback: callback - }); - } else { - // pulse propagation already complete, invoke immediately - try { callback(this); } catch (err) { this.error(err); } - } -} - -/** - * Raise an error for re-entrant dataflow evaluation. - */ -function reentrant(df) { - df.error('Dataflow already running. Use runAsync() to chain invocations.'); - return df; -} - -/** - * Enqueue an operator into the priority queue for evaluation. The operator - * will be enqueued if it has no registered pulse for the current cycle, or if - * the force argument is true. Upon enqueue, this method also sets the - * operator's qrank to the current rank value. - * @param {Operator} op - The operator to enqueue. - * @param {boolean} [force] - A flag indicating if the operator should be - * forceably added to the queue, even if it has already been previously - * enqueued during the current pulse propagation. This is useful when the - * dataflow graph is dynamically modified and the operator rank changes. - */ -function enqueue(op, force) { - var p = !this._pulses[op.id]; - if (p) this._pulses[op.id] = this._pulse; - if (p || force) { - op.qrank = op.rank; - this._heap.push(op); - } -} - -/** - * Provide a correct pulse for evaluating an operator. If the operator has an - * explicit source operator, we will try to pull the pulse(s) from it. - * If there is an array of source operators, we build a multi-pulse. - * Otherwise, we return a current pulse with correct source data. - * If the pulse is the pulse map has an explicit target set, we use that. - * Else if the pulse on the upstream source operator is current, we use that. - * Else we use the pulse from the pulse map, but copy the source tuple array. - * @param {Operator} op - The operator for which to get an input pulse. - * @param {string} [encode] - An (optional) encoding set name with which to - * annotate the returned pulse. See {@link run} for more information. - */ -function getPulse(op, encode) { - var s = op.source, - stamp = this._clock, - p; - - if (s && isArray(s)) { - p = s.map(function(_) { return _.pulse; }); - return new MultiPulse(this, stamp, p, encode); - } - - p = this._pulses[op.id]; - if (s) { - s = s.pulse; - if (!s || s === StopPropagation) { - p.source = []; - } else if (s.stamp === stamp && p.target !== op) { - p = s; - } else { - p.source = s.source; - } - } - - return p; -} - -var NO_OPT = {skip: false, force: false}; - -/** - * Touches an operator, scheduling it to be evaluated. If invoked outside of - * a pulse propagation, the operator will be evaluated the next time this - * dataflow is run. If invoked in the midst of pulse propagation, the operator - * will be queued for evaluation if and only if the operator has not yet been - * evaluated on the current propagation timestamp. - * @param {Operator} op - The operator to touch. - * @param {object} [options] - Additional options hash. - * @param {boolean} [options.skip] - If true, the operator will - * be skipped: it will not be evaluated, but its dependents will be. - * @return {Dataflow} - */ -function touch(op, options) { - var opt = options || NO_OPT; - if (this._pulse) { - // if in midst of propagation, add to priority queue - this._enqueue(op); - } else { - // otherwise, queue for next propagation - this._touched.add(op); - } - if (opt.skip) op.skip(true); - return this; -} - -/** - * Updates the value of the given operator. - * @param {Operator} op - The operator to update. - * @param {*} value - The value to set. - * @param {object} [options] - Additional options hash. - * @param {boolean} [options.force] - If true, the operator will - * be re-evaluated even if its value has not changed. - * @param {boolean} [options.skip] - If true, the operator will - * be skipped: it will not be evaluated, but its dependents will be. - * @return {Dataflow} - */ -function update(op, value, options) { - var opt = options || NO_OPT; - if (op.set(value) || opt.force) { - this.touch(op, opt); - } - return this; -} - -/** - * Pulses an operator with a changeset of tuples. If invoked outside of - * a pulse propagation, the pulse will be applied the next time this - * dataflow is run. If invoked in the midst of pulse propagation, the pulse - * will be added to the set of active pulses and will be applied if and - * only if the target operator has not yet been evaluated on the current - * propagation timestamp. - * @param {Operator} op - The operator to pulse. - * @param {ChangeSet} value - The tuple changeset to apply. - * @param {object} [options] - Additional options hash. - * @param {boolean} [options.skip] - If true, the operator will - * be skipped: it will not be evaluated, but its dependents will be. - * @return {Dataflow} - */ -function pulse(op, changeset, options) { - this.touch(op, options || NO_OPT); - - var p = new Pulse(this, this._clock + (this._pulse ? 0 : 1)), - t = op.pulse && op.pulse.source || []; - p.target = op; - this._pulses[op.id] = changeset.pulse(p, t); - - return this; -} - -function Heap(cmp) { - var nodes = []; - return { - size: () => nodes.length, - peek: () => nodes[0], - push: x => { - nodes.push(x); - return siftdown(nodes, 0, nodes.length - 1, cmp); - }, - pop: () => { - var last = nodes.pop(), item; - if (nodes.length) { - item = nodes[0]; - nodes[0] = last; - siftup(nodes, 0, cmp); - } else { - item = last; - } - return item; - } - }; -} - -function siftdown(array, start, idx, cmp) { - var item, parent, pidx; - - item = array[idx]; - while (idx > start) { - pidx = (idx - 1) >> 1; - parent = array[pidx]; - if (cmp(item, parent) < 0) { - array[idx] = parent; - idx = pidx; - continue; - } - break; - } - return (array[idx] = item); -} - -function siftup(array, idx, cmp) { - var start = idx, - end = array.length, - item = array[idx], - cidx = (idx << 1) + 1, ridx; - - while (cidx < end) { - ridx = cidx + 1; - if (ridx < end && cmp(array[cidx], array[ridx]) >= 0) { - cidx = ridx; - } - array[idx] = array[cidx]; - idx = cidx; - cidx = (idx << 1) + 1; - } - array[idx] = item; - return siftdown(array, start, idx, cmp); -} - -/** - * A dataflow graph for reactive processing of data streams. - * @constructor - */ -function Dataflow() { - this.logger(logger()); - this.logLevel(Error$1); - - this._clock = 0; - this._rank = 0; - try { - this._loader = loader(); - } catch (e) { - // do nothing if loader module is unavailable - } - - this._touched = UniqueList(id); - this._pulses = {}; - this._pulse = null; - - this._heap = Heap((a, b) => a.qrank - b.qrank); - this._postrun = []; -} - -var prototype$5 = Dataflow.prototype; - -/** - * The current timestamp of this dataflow. This value reflects the - * timestamp of the previous dataflow run. The dataflow is initialized - * with a stamp value of 0. The initial run of the dataflow will have - * a timestap of 1, and so on. This value will match the - * {@link Pulse.stamp} property. - * @return {number} - The current timestamp value. - */ -prototype$5.stamp = function() { - return this._clock; -}; - -/** - * Gets or sets the loader instance to use for data file loading. A - * loader object must provide a "load" method for loading files and a - * "sanitize" method for checking URL/filename validity. Both methods - * should accept a URI and options hash as arguments, and return a Promise - * that resolves to the loaded file contents (load) or a hash containing - * sanitized URI data with the sanitized url assigned to the "href" property - * (sanitize). - * @param {object} _ - The loader instance to use. - * @return {object|Dataflow} - If no arguments are provided, returns - * the current loader instance. Otherwise returns this Dataflow instance. - */ -prototype$5.loader = function(_) { - if (arguments.length) { - this._loader = _; - return this; - } else { - return this._loader; - } -}; - -/** - * Empty entry threshold for garbage cleaning. Map data structures will - * perform cleaning once the number of empty entries exceeds this value. - */ -prototype$5.cleanThreshold = 1e4; - -// OPERATOR REGISTRATION -prototype$5.add = add; -prototype$5.connect = connect; -prototype$5.rank = rank; -prototype$5.rerank = rerank; - -// OPERATOR UPDATES -prototype$5.pulse = pulse; -prototype$5.touch = touch; -prototype$5.update = update; -prototype$5.changeset = changeset; - -// DATA LOADING -prototype$5.ingest = ingest$1; -prototype$5.parse = parse$1; -prototype$5.preload = preload; -prototype$5.request = request; - -// EVENT HANDLING -prototype$5.events = events; -prototype$5.on = on; - -// PULSE PROPAGATION -prototype$5.evaluate = evaluate; -prototype$5.run = run; -prototype$5.runAsync = runAsync; -prototype$5.runAfter = runAfter; -prototype$5._enqueue = enqueue; -prototype$5._getPulse = getPulse; - -// LOGGING AND ERROR HANDLING - -function logMethod(method) { - return function() { - return this._log[method].apply(this, arguments); - }; -} - -/** - * Get or set the logger instance used to log messages. If no arguments are - * provided, returns the current logger instance. Otherwise, sets the logger - * and return this Dataflow instance. Provided loggers must support the full - * API of logger objects generated by the vega-util logger method. Note that - * by default the log level of the new logger will be used; use the logLevel - * method to adjust the log level as needed. - */ -prototype$5.logger = function(logger) { - if (arguments.length) { - this._log = logger; - return this; - } else { - return this._log; - } -}; - -/** - * Logs an error message. By default, logged messages are written to console - * output. The message will only be logged if the current log level is high - * enough to permit error messages. - */ -prototype$5.error = logMethod('error'); - -/** - * Logs a warning message. By default, logged messages are written to console - * output. The message will only be logged if the current log level is high - * enough to permit warning messages. - */ -prototype$5.warn = logMethod('warn'); - -/** - * Logs a information message. By default, logged messages are written to - * console output. The message will only be logged if the current log level is - * high enough to permit information messages. - */ -prototype$5.info = logMethod('info'); - -/** - * Logs a debug message. By default, logged messages are written to console - * output. The message will only be logged if the current log level is high - * enough to permit debug messages. - */ -prototype$5.debug = logMethod('debug'); - -/** - * Get or set the current log level. If an argument is provided, it - * will be used as the new log level. - * @param {number} [level] - Should be one of None, Warn, Info - * @return {number} - The current log level. - */ -prototype$5.logLevel = logMethod('level'); - -/** - * Abstract class for operators that process data tuples. - * Subclasses must provide a {@link transform} method for operator processing. - * @constructor - * @param {*} [init] - The initial value for this operator. - * @param {object} [params] - The parameters for this operator. - * @param {Operator} [source] - The operator from which to receive pulses. - */ -function Transform(init, params) { - Operator.call(this, init, null, params); -} - -var prototype$6 = inherits(Transform, Operator); - -/** - * Overrides {@link Operator.evaluate} for transform operators. - * Internally, this method calls {@link evaluate} to perform processing. - * If {@link evaluate} returns a falsy value, the input pulse is returned. - * This method should NOT be overridden, instead overrride {@link evaluate}. - * @param {Pulse} pulse - the current dataflow pulse. - * @return the output pulse for this operator (or StopPropagation) - */ -prototype$6.run = function(pulse) { - if (pulse.stamp <= this.stamp) return pulse.StopPropagation; - - var rv; - if (this.skip()) { - this.skip(false); - } else { - rv = this.evaluate(pulse); - } - rv = rv || pulse; - - this.stamp = pulse.stamp; - - if (rv.then) { - rv = rv.then(_ => this.pulse =_); - } else if (rv !== pulse.StopPropagation) { - this.pulse = rv; - } - - return rv; -}; - -/** - * Overrides {@link Operator.evaluate} for transform operators. - * Marshalls parameter values and then invokes {@link transform}. - * @param {Pulse} pulse - the current dataflow pulse. - * @return {Pulse} The output pulse (or StopPropagation). A falsy return - value (including undefined) will let the input pulse pass through. - */ -prototype$6.evaluate = function(pulse) { - var params = this.marshall(pulse.stamp), - out = this.transform(params, pulse); - params.clear(); - return out; -}; - -/** - * Process incoming pulses. - * Subclasses should override this method to implement transforms. - * @param {Parameters} _ - The operator parameter values. - * @param {Pulse} pulse - The current dataflow pulse. - * @return {Pulse} The output pulse (or StopPropagation). A falsy return - * value (including undefined) will let the input pulse pass through. - */ -prototype$6.transform = function() {}; - -var transforms = {}; - -// Utilities - -function multikey(f) { - return function(x) { - var n = f.length, - i = 1, - k = String(f[0](x)); - - for (; i 1 ? this.dev / (this.valid-1) : undefined', - req: ['mean'], idx: 1 - }), - 'variancep': measure({ - name: 'variancep', - set: 'this.valid > 1 ? this.dev / this.valid : undefined', - req: ['variance'], idx: 2 - }), - 'stdev': measure({ - name: 'stdev', - set: 'this.valid > 1 ? Math.sqrt(this.dev / (this.valid-1)) : undefined', - req: ['variance'], idx: 2 - }), - 'stdevp': measure({ - name: 'stdevp', - set: 'this.valid > 1 ? Math.sqrt(this.dev / this.valid) : undefined', - req: ['variance'], idx: 2 - }), - 'stderr': measure({ - name: 'stderr', - set: 'this.valid > 1 ? Math.sqrt(this.dev / (this.valid * (this.valid-1))) : undefined', - req: ['variance'], idx: 2 - }), - 'distinct': measure({ - name: 'distinct', - set: 'cell.data.distinct(this.get)', - req: ['values'], idx: 3 - }), - 'ci0': measure({ - name: 'ci0', - set: 'cell.data.ci0(this.get)', - req: ['values'], idx: 3 - }), - 'ci1': measure({ - name: 'ci1', - set: 'cell.data.ci1(this.get)', - req: ['values'], idx: 3 - }), - 'median': measure({ - name: 'median', - set: 'cell.data.q2(this.get)', - req: ['values'], idx: 3 - }), - 'q1': measure({ - name: 'q1', - set: 'cell.data.q1(this.get)', - req: ['values'], idx: 3 - }), - 'q3': measure({ - name: 'q3', - set: 'cell.data.q3(this.get)', - req: ['values'], idx: 3 - }), - 'argmin': measure({ - name: 'argmin', - init: 'this.argmin = undefined;', - add: 'if (v < this.min) this.argmin = t;', - rem: 'if (v <= this.min) this.argmin = undefined;', - set: 'this.argmin || cell.data.argmin(this.get)', - req: ['min'], str: ['values'], idx: 3 - }), - 'argmax': measure({ - name: 'argmax', - init: 'this.argmax = undefined;', - add: 'if (v > this.max) this.argmax = t;', - rem: 'if (v >= this.max) this.argmax = undefined;', - set: 'this.argmax || cell.data.argmax(this.get)', - req: ['max'], str: ['values'], idx: 3 - }), - 'min': measure({ - name: 'min', - init: 'this.min = undefined;', - add: 'if (v < this.min || this.min === undefined) this.min = v;', - rem: 'if (v <= this.min) this.min = NaN;', - set: 'this.min = (isNaN(this.min) ? cell.data.min(this.get) : this.min)', - str: ['values'], idx: 4 - }), - 'max': measure({ - name: 'max', - init: 'this.max = undefined;', - add: 'if (v > this.max || this.max === undefined) this.max = v;', - rem: 'if (v >= this.max) this.max = NaN;', - set: 'this.max = (isNaN(this.max) ? cell.data.max(this.get) : this.max)', - str: ['values'], idx: 4 - }) -}; - -var ValidAggregateOps = Object.keys(AggregateOps); - -function createMeasure(op, name) { - return AggregateOps[op](name); -} - -function measure(base) { - return function(out) { - var m = extend({init:'', add:'', rem:'', idx:0}, base); - m.out = out || base.name; - return m; - }; -} - -function compareIndex(a, b) { - return a.idx - b.idx; -} - -function resolve(agg, stream) { - function collect(m, a) { - function helper(r) { if (!m[r]) collect(m, m[r] = AggregateOps[r]()); } - if (a.req) a.req.forEach(helper); - if (stream && a.str) a.str.forEach(helper); - return m; - } - var map = agg.reduce( - collect, - agg.reduce(function(m, a) { - m[a.name] = a; - return m; - }, {}) - ); - var values = [], key; - for (key in map) values.push(map[key]); - return values.sort(compareIndex); -} - -function compileMeasures(agg, field) { - var get = field || identity, - all = resolve(agg, true), // assume streaming removes may occur - init = 'var cell = this.cell; this.valid = 0; this.missing = 0;', - ctr = 'this.cell = cell; this.init();', - add = 'if(v==null){++this.missing; return;} if(v!==v) return; ++this.valid;', - rem = 'if(v==null){--this.missing; return;} if(v!==v) return; --this.valid;', - set = 'var cell = this.cell;'; - - all.forEach(function(a) { - init += a.init; - add += a.add; - rem += a.rem; - }); - agg.slice().sort(compareIndex).forEach(function(a) { - set += 't[\'' + a.out + '\']=' + a.set + ';'; - }); - set += 'return t;'; - - ctr = Function('cell', ctr); - ctr.prototype.init = Function(init); - ctr.prototype.add = Function('v', 't', add); - ctr.prototype.rem = Function('v', 't', rem); - ctr.prototype.set = Function('t', set); - ctr.prototype.get = get; - ctr.fields = agg.map(function(_) { return _.out; }); - return ctr; -} - -function bin(_) { - // determine range - var maxb = _.maxbins || 20, - base = _.base || 10, - logb = Math.log(base), - div = _.divide || [5, 2], - min = _.extent[0], - max = _.extent[1], - span = (max - min) || Math.abs(min) || 1, - step, level, minstep, precision, v, i, n, eps; - - if (_.step) { - // if step size is explicitly given, use that - step = _.step; - } else if (_.steps) { - // if provided, limit choice to acceptable step sizes - v = span / maxb; - for (i=0, n=_.steps.length; i < n && _.steps[i] < v; ++i); - step = _.steps[Math.max(0, i-1)]; - } else { - // else use span to determine step size - level = Math.ceil(Math.log(maxb) / logb); - minstep = _.minstep || 0; - step = Math.max( - minstep, - Math.pow(base, Math.round(Math.log(span) / logb) - level) - ); - - // increase step size if too many bins - while (Math.ceil(span/step) > maxb) { step *= base; } - - // decrease step size if allowed - for (i=0, n=div.length; i= minstep && span / v <= maxb) step = v; - } - } - - // update precision, min and max - v = Math.log(step); - precision = v >= 0 ? 0 : ~~(-v / logb) + 1; - eps = Math.pow(base, -precision - 1); - if (_.nice || _.nice === undefined) { - v = Math.floor(min / step + eps) * step; - min = min < v ? v - step : v; - max = Math.ceil(max / step) * step; - } - - return { - start: min, - stop: max === min ? min + step : max, - step: step - }; -} - -function* numbers(values, valueof) { - if (valueof === undefined) { - for (let value of values) { - if (value != null && (value = +value) >= value) { - yield value; - } - } - } else { - let index = -1; - for (let value of values) { - if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) { - yield value; - } - } - } -} - -var random = Math.random; - -function ascending$1(a, b) { - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; -} - -function bisector$1(compare) { - if (compare.length === 1) compare = ascendingComparator$1(compare); - return { - left: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) < 0) lo = mid + 1; - else hi = mid; - } - return lo; - }, - right: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) > 0) hi = mid; - else lo = mid + 1; - } - return lo; - } - }; -} - -function ascendingComparator$1(f) { - return function(d, x) { - return ascending$1(f(d), x); - }; -} - -var ascendingBisect$1 = bisector$1(ascending$1); - -function variance(values, valueof) { - let count = 0; - let delta; - let mean = 0; - let sum = 0; - if (valueof === undefined) { - for (let value of values) { - if (value != null && (value = +value) >= value) { - delta = value - mean; - mean += delta / ++count; - sum += delta * (value - mean); - } - } - } else { - let index = -1; - for (let value of values) { - if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) { - delta = value - mean; - mean += delta / ++count; - sum += delta * (value - mean); - } - } - } - if (count > 1) return sum / (count - 1); -} - -function number(x) { - return x === null ? NaN : +x; -} - -function quantile(values, p, valueof = number) { - if (!(n = values.length)) return; - if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values); - if (p >= 1) return +valueof(values[n - 1], n - 1, values); - var n, - i = (n - 1) * p, - i0 = Math.floor(i), - value0 = +valueof(values[i0], i0, values), - value1 = +valueof(values[i0 + 1], i0 + 1, values); - return value0 + (value1 - value0) * (i - i0); -} - -function bootstrapCI(array, samples, alpha, f) { - if (!array.length) return [undefined, undefined]; - - var values = Float64Array.from(numbers(array, f)), - n = values.length, - m = samples, - a, i, j, mu; - - for (j=0, mu=Array(m); j 1); - c = Math.sqrt(-2 * Math.log(rds) / rds); // Box-Muller transform - next = mu + y * c * sigma; - return mu + x * c * sigma; - }; - - dist.pdf = function(x) { - var exp = Math.exp(Math.pow(x-mu, 2) / (-2 * Math.pow(sigma, 2))); - return (1 / (sigma * Math.sqrt(2*Math.PI))) * exp; - }; - - // Approximation from West (2009) - // Better Approximations to Cumulative Normal Functions - dist.cdf = function(x) { - var cd, - z = (x - mu) / sigma, - Z = Math.abs(z); - if (Z > 37) { - cd = 0; - } else { - var sum, exp = Math.exp(-Z*Z/2); - if (Z < 7.07106781186547) { - sum = 3.52624965998911e-02 * Z + 0.700383064443688; - sum = sum * Z + 6.37396220353165; - sum = sum * Z + 33.912866078383; - sum = sum * Z + 112.079291497871; - sum = sum * Z + 221.213596169931; - sum = sum * Z + 220.206867912376; - cd = exp * sum; - sum = 8.83883476483184e-02 * Z + 1.75566716318264; - sum = sum * Z + 16.064177579207; - sum = sum * Z + 86.7807322029461; - sum = sum * Z + 296.564248779674; - sum = sum * Z + 637.333633378831; - sum = sum * Z + 793.826512519948; - sum = sum * Z + 440.413735824752; - cd = cd / sum; - } else { - sum = Z + 0.65; - sum = Z + 4 / sum; - sum = Z + 3 / sum; - sum = Z + 2 / sum; - sum = Z + 1 / sum; - cd = exp / sum / 2.506628274631; - } - } - return z > 0 ? 1 - cd : cd; - }; - - // Approximation of Probit function using inverse error function. - dist.icdf = function(p) { - if (p <= 0 || p >= 1) return NaN; - var x = 2*p - 1, - v = (8 * (Math.PI - 3)) / (3 * Math.PI * (4-Math.PI)), - a = (2 / (Math.PI*v)) + (Math.log(1 - Math.pow(x,2)) / 2), - b = Math.log(1 - (x*x)) / v, - s = (x > 0 ? 1 : -1) * Math.sqrt(Math.sqrt((a*a) - b) - a); - return mu + sigma * Math.SQRT2 * s; - }; - - return dist.mean(mean).stdev(stdev); -} - -// TODO: support for additional kernels? -function randomKDE(support, bandwidth) { - var kernel = randomNormal(), - dist = {}, - n = 0; - - dist.data = function(_) { - if (arguments.length) { - support = _; - n = _ ? _.length : 0; - return dist.bandwidth(bandwidth); - } else { - return support; - } - }; - - dist.bandwidth = function(_) { - if (!arguments.length) return bandwidth; - bandwidth = _; - if (!bandwidth && support) bandwidth = estimateBandwidth(support); - return dist; - }; - - dist.sample = function() { - return support[~~(random() * n)] + bandwidth * kernel.sample(); - }; - - dist.pdf = function(x) { - for (var y=0, i=0; i= a && x <= b) ? 1 / d : 0; - }; - - dist.cdf = function(x) { - return x < a ? 0 : x > b ? 1 : (x - a) / d; - }; - - dist.icdf = function(p) { - return (p >= 0 && p <= 1) ? a + p * d : NaN; - }; - - return dist.min(min).max(max); -} - -// Ordinary Least Squares - -// subdivide up to accuracy of 0.1 degrees -const MIN_RADIANS = 0.1 * Math.PI / 180; - -// Adaptively sample an interpolated function over a domain extent -function sampleCurve(f, extent, minSteps, maxSteps) { - minSteps = minSteps || 25; - maxSteps = Math.max(minSteps, maxSteps || 200); - - const point = x => [x, f(x)], - minX = extent[0], - maxX = extent[1], - span = maxX - minX, - stop = span / maxSteps, - prev = [point(minX)], - next = []; - - if (minSteps === maxSteps) { - // no adaptation, sample uniform grid directly and return - for (let i = 1; i < maxSteps; ++i) { - prev.push(point(minX + (i / minSteps) * span)); - } - prev.push(point(maxX)); - return prev; - } else { - // sample minimum points on uniform grid - // then move on to perform adaptive refinement - next.push(point(maxX)); - for (let i = minSteps; --i > 0;) { - next.push(point(minX + (i / minSteps) * span)); - } - } - - let p0 = prev[0], - p1 = next[next.length - 1]; - - while (p1) { - const pm = point((p0[0] + p1[0]) / 2); - - if (pm[0] - p0[0] >= stop && angleDelta(p0, pm, p1) > MIN_RADIANS) { - next.push(pm); - } else { - p0 = p1; - prev.push(p1); - next.pop(); - } - p1 = next[next.length - 1]; - } - - return prev; -} - -function angleDelta(p, q, r) { - const a0 = Math.atan2(r[1] - p[1], r[0] - p[0]), - a1 = Math.atan2(q[1] - p[1], q[0] - p[0]); - return Math.abs(a0 - a1); -} - -function TupleStore(key) { - this._key = key ? field(key) : tupleid; - this.reset(); -} - -var prototype$7 = TupleStore.prototype; - -prototype$7.reset = function() { - this._add = []; - this._rem = []; - this._ext = null; - this._get = null; - this._q = null; -}; - -prototype$7.add = function(v) { - this._add.push(v); -}; - -prototype$7.rem = function(v) { - this._rem.push(v); -}; - -prototype$7.values = function() { - this._get = null; - if (this._rem.length === 0) return this._add; - - var a = this._add, - r = this._rem, - k = this._key, - n = a.length, - m = r.length, - x = Array(n - m), - map = {}, i, j, v; - - // use unique key field to clear removed values - for (i=0; i= 0) { - s = get(v[n]) + ''; - if (!map.hasOwnProperty(s)) { - map[s] = 1; - ++count; - } - } - - return count; -}; - -prototype$7.extent = function(get) { - if (this._get !== get || !this._ext) { - var v = this.values(), - i = extentIndex(v, get); - this._ext = [v[i[0]], v[i[1]]]; - this._get = get; - } - return this._ext; -}; - -prototype$7.argmin = function(get) { - return this.extent(get)[0] || {}; -}; - -prototype$7.argmax = function(get) { - return this.extent(get)[1] || {}; -}; - -prototype$7.min = function(get) { - var m = this.extent(get)[0]; - return m != null ? get(m) : undefined; -}; - -prototype$7.max = function(get) { - var m = this.extent(get)[1]; - return m != null ? get(m) : undefined; -}; - -prototype$7.quartile = function(get) { - if (this._get !== get || !this._q) { - this._q = quartiles(this.values(), get); - this._get = get; - } - return this._q; -}; - -prototype$7.q1 = function(get) { - return this.quartile(get)[0]; -}; - -prototype$7.q2 = function(get) { - return this.quartile(get)[1]; -}; - -prototype$7.q3 = function(get) { - return this.quartile(get)[2]; -}; - -prototype$7.ci = function(get) { - if (this._get !== get || !this._ci) { - this._ci = bootstrapCI(this.values(), 1000, 0.05, get); - this._get = get; - } - return this._ci; -}; - -prototype$7.ci0 = function(get) { - return this.ci(get)[0]; -}; - -prototype$7.ci1 = function(get) { - return this.ci(get)[1]; -}; - -/** - * Group-by aggregation operator. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {Array} [params.groupby] - An array of accessors to groupby. - * @param {Array} [params.fields] - An array of accessors to aggregate. - * @param {Array} [params.ops] - An array of strings indicating aggregation operations. - * @param {Array} [params.as] - An array of output field names for aggregated values. - * @param {boolean} [params.cross=false] - A flag indicating that the full - * cross-product of groupby values should be generated, including empty cells. - * If true, the drop parameter is ignored and empty cells are retained. - * @param {boolean} [params.drop=true] - A flag indicating if empty cells should be removed. - */ -function Aggregate(params) { - Transform.call(this, null, params); - - this._adds = []; // array of added output tuples - this._mods = []; // array of modified output tuples - this._alen = 0; // number of active added tuples - this._mlen = 0; // number of active modified tuples - this._drop = true; // should empty aggregation cells be removed - this._cross = false; // produce full cross-product of group-by values - - this._dims = []; // group-by dimension accessors - this._dnames = []; // group-by dimension names - - this._measures = []; // collection of aggregation monoids - this._countOnly = false; // flag indicating only count aggregation - this._counts = null; // collection of count fields - this._prev = null; // previous aggregation cells - - this._inputs = null; // array of dependent input tuple field names - this._outputs = null; // array of output tuple field names -} - -Aggregate.Definition = { - "type": "Aggregate", - "metadata": {"generates": true, "changes": true}, - "params": [ - { "name": "groupby", "type": "field", "array": true }, - { "name": "ops", "type": "enum", "array": true, "values": ValidAggregateOps }, - { "name": "fields", "type": "field", "null": true, "array": true }, - { "name": "as", "type": "string", "null": true, "array": true }, - { "name": "drop", "type": "boolean", "default": true }, - { "name": "cross", "type": "boolean", "default": false }, - { "name": "key", "type": "field" } - ] -}; - -var prototype$8 = inherits(Aggregate, Transform); - -prototype$8.transform = function(_, pulse) { - var aggr = this, - out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS), - mod; - - this.stamp = out.stamp; - - if (this.value && ((mod = _.modified()) || pulse.modified(this._inputs))) { - this._prev = this.value; - this.value = mod ? this.init(_) : {}; - pulse.visit(pulse.SOURCE, function(t) { aggr.add(t); }); - } else { - this.value = this.value || this.init(_); - pulse.visit(pulse.REM, function(t) { aggr.rem(t); }); - pulse.visit(pulse.ADD, function(t) { aggr.add(t); }); - } - - // Indicate output fields and return aggregate tuples. - out.modifies(this._outputs); - - // Should empty cells be dropped? - aggr._drop = _.drop !== false; - - // If domain cross-product requested, generate empty cells as needed - // and ensure that empty cells are not dropped - if (_.cross && aggr._dims.length > 1) { - aggr._drop = false; - this.cross(); - } - - return aggr.changes(out); -}; - -prototype$8.cross = function() { - var aggr = this, - curr = aggr.value, - dims = aggr._dnames, - vals = dims.map(function() { return {}; }), - n = dims.length; - - // collect all group-by domain values - function collect(cells) { - var key, i, t, v; - for (key in cells) { - t = cells[key].tuple; - for (i=0; i} params.fields - The fields to compare. - * @param {Array} [params.orders] - The sort orders. - * Each entry should be one of "ascending" (default) or "descending". - */ -function Compare(params) { - Operator.call(this, null, update$1, params); -} - -inherits(Compare, Operator); - -function update$1(_) { - return (this.value && !_.modified()) - ? this.value - : compare(_.fields, _.orders); -} - -/** - * Count regexp-defined pattern occurrences in a text field. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {function(object): *} params.field - An accessor for the text field. - * @param {string} [params.pattern] - RegExp string defining the text pattern. - * @param {string} [params.case] - One of 'lower', 'upper' or null (mixed) case. - * @param {string} [params.stopwords] - RegExp string of words to ignore. - */ -function CountPattern(params) { - Transform.call(this, null, params); -} - -CountPattern.Definition = { - "type": "CountPattern", - "metadata": {"generates": true, "changes": true}, - "params": [ - { "name": "field", "type": "field", "required": true }, - { "name": "case", "type": "enum", "values": ["upper", "lower", "mixed"], "default": "mixed" }, - { "name": "pattern", "type": "string", "default": "[\\w\"]+" }, - { "name": "stopwords", "type": "string", "default": "" }, - { "name": "as", "type": "string", "array": true, "length": 2, "default": ["text", "count"] } - ] -}; - -function tokenize(text, tcase, match) { - switch (tcase) { - case 'upper': text = text.toUpperCase(); break; - case 'lower': text = text.toLowerCase(); break; - } - return text.match(match); -} - -var prototype$b = inherits(CountPattern, Transform); - -prototype$b.transform = function(_, pulse) { - function process(update) { - return function(tuple) { - var tokens = tokenize(get(tuple), _.case, match) || [], t; - for (var i=0, n=tokens.length; i} [params.as] - The names of the output fields. - */ -function Cross(params) { - Transform.call(this, null, params); -} - -Cross.Definition = { - "type": "Cross", - "metadata": {"generates": true}, - "params": [ - { "name": "filter", "type": "expr" }, - { "name": "as", "type": "string", "array": true, "length": 2, "default": ["a", "b"] } - ] -}; - -var prototype$c = inherits(Cross, Transform); - -prototype$c.transform = function(_, pulse) { - var out = pulse.fork(pulse.NO_SOURCE), - data = this.value, - as = _.as || ['a', 'b'], - a = as[0], b = as[1], - reset = !data - || pulse.changed(pulse.ADD_REM) - || _.modified('as') - || _.modified('filter'); - - if (reset) { - if (data) out.rem = data; - data = pulse.materialize(pulse.SOURCE).source; - out.add = this.value = cross(data, a, b, _.filter || truthy); - } else { - out.mod = data; - } - - out.source = this.value; - return out.modifies(as); -}; - -function cross(input, a, b, filter) { - var data = [], - t = {}, - n = input.length, - i = 0, - j, left; - - for (; i} - A method for requesting - * source data. Used for distributions (such as KDE) that - * require sample data points. This method will only be - * invoked if the 'from' parameter for a target data source - * is not provided. Typically this method returns backing - * source data for a Pulse object. - * @return {object} - The output distribution object. - */ -function parse$2(def, data) { - var func = def[FUNCTION]; - if (!Distributions.hasOwnProperty(func)) { - error('Unknown distribution function: ' + func); - } - - var d = Distributions[func](); - - for (var name in def) { - // if data field, extract values - if (name === FIELD) { - d.data((def.from || data()).map(def[name])); - } - - // if distribution mixture, recurse to parse each definition - else if (name === DISTRIBUTIONS) { - d[name](def[name].map(function(_) { return parse$2(_, data); })); - } - - // otherwise, simply set the parameter - else if (typeof d[name] === FUNCTION) { - d[name](def[name]); - } - } - - return d; -} - -/** - * Grid sample points for a probability density. Given a distribution and - * a sampling extent, will generate points suitable for plotting either - * PDF (probability density function) or CDF (cumulative distribution - * function) curves. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {object} params.distribution - The probability distribution. This - * is an object parameter dependent on the distribution type. - * @param {string} [params.method='pdf'] - The distribution method to sample. - * One of 'pdf' or 'cdf'. - * @param {Array} [params.extent] - The [min, max] extent over which - * to sample the distribution. This argument is required in most cases, but - * can be omitted if the distribution (e.g., 'kde') supports a 'data' method - * that returns numerical sample points from which the extent can be deduced. - * @param {number} [params.minsteps=25] - The minimum number of curve samples - * for plotting the density. - * @param {number} [params.maxsteps=200] - The maximum number of curve samples - * for plotting the density. - * @param {number} [params.steps] - The exact number of curve samples for - * plotting the density. If specified, overrides both minsteps and maxsteps - * to set an exact number of uniform samples. Useful in conjunction with - * a fixed extent to ensure consistent sample points for stacked densities. - */ -function Density(params) { - Transform.call(this, null, params); -} - -var distributions = [ - { - "key": {"function": "normal"}, - "params": [ - { "name": "mean", "type": "number", "default": 0 }, - { "name": "stdev", "type": "number", "default": 1 } - ] - }, - { - "key": {"function": "uniform"}, - "params": [ - { "name": "min", "type": "number", "default": 0 }, - { "name": "max", "type": "number", "default": 1 } - ] - }, - { - "key": {"function": "kde"}, - "params": [ - { "name": "field", "type": "field", "required": true }, - { "name": "from", "type": "data" }, - { "name": "bandwidth", "type": "number", "default": 0 } - ] - } -]; - -var mixture = { - "key": {"function": "mixture"}, - "params": [ - { "name": "distributions", "type": "param", "array": true, - "params": distributions }, - { "name": "weights", "type": "number", "array": true } - ] -}; - -Density.Definition = { - "type": "Density", - "metadata": {"generates": true}, - "params": [ - { "name": "extent", "type": "number", "array": true, "length": 2 }, - { "name": "steps", "type": "number" }, - { "name": "minsteps", "type": "number", "default": 25 }, - { "name": "maxsteps", "type": "number", "default": 200 }, - { "name": "method", "type": "string", "default": "pdf", - "values": ["pdf", "cdf"] }, - { "name": "distribution", "type": "param", - "params": distributions.concat(mixture) }, - { "name": "as", "type": "string", "array": true, - "default": ["value", "density"] } - ] -}; - -var prototype$d = inherits(Density, Transform); - -prototype$d.transform = function(_, pulse) { - var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS); - - if (!this.value || pulse.changed() || _.modified()) { - var dist = parse$2(_.distribution, source(pulse)), - minsteps = _.steps || _.minsteps || 25, - maxsteps = _.steps || _.maxsteps || 200, - method = _.method || 'pdf'; - - if (method !== 'pdf' && method !== 'cdf') { - error('Invalid density method: ' + method); - } - if (!_.extent && !dist.data) { - error('Missing density extent parameter.'); - } - method = dist[method]; - - var as = _.as || ['value', 'density'], - domain = _.extent || extent$1(dist.data()), - values = sampleCurve(method, domain, minsteps, maxsteps).map(v => { - var tuple = {}; - tuple[as[0]] = v[0]; - tuple[as[1]] = v[1]; - return ingest(tuple); - }); - - if (this.value) out.rem = this.value; - this.value = out.add = out.source = values; - } - - return out; -}; - -function source(pulse) { - return function() { return pulse.materialize(pulse.SOURCE).source; }; -} - -/** - * Wraps an expression function with access to external parameters. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {function} params.expr - The expression function. The - * function should accept both a datum and a parameter object. - * This operator's value will be a new function that wraps the - * expression function with access to this operator's parameters. - */ -function Expression(params) { - Operator.call(this, null, update$2, params); - this.modified(true); -} - -inherits(Expression, Operator); - -function update$2(_) { - var expr = _.expr; - return this.value && !_.modified('expr') - ? this.value - : accessor( - datum => expr(datum, _), - accessorFields(expr), - accessorName(expr) - ); -} - -/** - * Computes extents (min/max) for a data field. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {function(object): *} params.field - The field over which to compute extends. - */ -function Extent(params) { - Transform.call(this, [undefined, undefined], params); -} - -Extent.Definition = { - "type": "Extent", - "metadata": {}, - "params": [ - { "name": "field", "type": "field", "required": true } - ] -}; - -var prototype$e = inherits(Extent, Transform); - -prototype$e.transform = function(_, pulse) { - var extent = this.value, - field = _.field, - min = extent[0], - max = extent[1], - mod; - - mod = pulse.changed() - || pulse.modified(field.fields) - || _.modified('field'); - - if (mod || min == null) { - min = +Infinity; - max = -Infinity; - } - - pulse.visit(mod ? pulse.SOURCE : pulse.ADD, function(t) { - var v = field(t); - if (v != null) { - // coerce to number - v = +v; - // NaNs will fail all comparisons! - if (v < min) min = v; - if (v > max) max = v; - } - }); - - if (!isFinite(min) || !isFinite(max)) { - min = max = undefined; - } - this.value = [min, max]; -}; - -/** - * Provides a bridge between a parent transform and a target subflow that - * consumes only a subset of the tuples that pass through the parent. - * @constructor - * @param {Pulse} pulse - A pulse to use as the value of this operator. - * @param {Transform} parent - The parent transform (typically a Facet instance). - * @param {Transform} target - A transform that receives the subflow of tuples. - */ -function Subflow(pulse, parent) { - Operator.call(this, pulse); - this.parent = parent; -} - -var prototype$f = inherits(Subflow, Operator); - -prototype$f.connect = function(target) { - this.targets().add(target); - return (target.source = this); -}; - -/** - * Add an 'add' tuple to the subflow pulse. - * @param {Tuple} t - The tuple being added. - */ -prototype$f.add = function(t) { - this.value.add.push(t); -}; - -/** - * Add a 'rem' tuple to the subflow pulse. - * @param {Tuple} t - The tuple being removed. - */ -prototype$f.rem = function(t) { - this.value.rem.push(t); -}; - -/** - * Add a 'mod' tuple to the subflow pulse. - * @param {Tuple} t - The tuple being modified. - */ -prototype$f.mod = function(t) { - this.value.mod.push(t); -}; - -/** - * Re-initialize this operator's pulse value. - * @param {Pulse} pulse - The pulse to copy from. - * @see Pulse.init - */ -prototype$f.init = function(pulse) { - this.value.init(pulse, pulse.NO_SOURCE); -}; - -/** - * Evaluate this operator. This method overrides the - * default behavior to simply return the contained pulse value. - * @return {Pulse} - */ -prototype$f.evaluate = function() { - // assert: this.value.stamp === pulse.stamp - return this.value; -}; - -/** - * Facets a dataflow into a set of subflows based on a key. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {function(Dataflow, string): Operator} params.subflow - A function - * that generates a subflow of operators and returns its root operator. - * @param {function(object): *} params.key - The key field to facet by. - */ -function Facet(params) { - Transform.call(this, {}, params); - this._keys = fastmap(); // cache previously calculated key values - - // keep track of active subflows, use as targets array for listeners - // this allows us to limit propagation to only updated subflows - var a = this._targets = []; - a.active = 0; - a.forEach = function(f) { - for (var i=0, n=a.active; i df.cleanThreshold) df.runAfter(cache.clean); - return pulse; -}; - -/** - * Generates one or more field accessor functions. - * If the 'name' parameter is an array, an array of field accessors - * will be created and the 'as' parameter will be ignored. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {string} params.name - The field name(s) to access. - * @param {string} params.as - The accessor function name. - */ -function Field(params) { - Operator.call(this, null, update$3, params); -} - -inherits(Field, Operator); - -function update$3(_) { - return (this.value && !_.modified()) ? this.value - : isArray(_.name) ? array(_.name).map(function(f) { return field(f); }) - : field(_.name, _.as); -} - -/** - * Filters data tuples according to a predicate function. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {function(object): *} params.expr - The predicate expression function - * that determines a tuple's filter status. Truthy values pass the filter. - */ -function Filter(params) { - Transform.call(this, fastmap(), params); -} - -Filter.Definition = { - "type": "Filter", - "metadata": {"changes": true}, - "params": [ - { "name": "expr", "type": "expr", "required": true } - ] -}; - -var prototype$h = inherits(Filter, Transform); - -prototype$h.transform = function(_, pulse) { - var df = pulse.dataflow, - cache = this.value, // cache ids of filtered tuples - output = pulse.fork(), - add = output.add, - rem = output.rem, - mod = output.mod, - test = _.expr, - isMod = true; - - pulse.visit(pulse.REM, function(t) { - var id = tupleid(t); - if (!cache.has(id)) rem.push(t); - else cache.delete(id); - }); - - pulse.visit(pulse.ADD, function(t) { - if (test(t, _)) add.push(t); - else cache.set(tupleid(t), 1); - }); - - function revisit(t) { - var id = tupleid(t), - b = test(t, _), - s = cache.get(id); - if (b && s) { - cache.delete(id); - add.push(t); - } else if (!b && !s) { - cache.set(id, 1); - rem.push(t); - } else if (isMod && b && !s) { - mod.push(t); - } - } - - pulse.visit(pulse.MOD, revisit); - - if (_.modified()) { - isMod = false; - pulse.visit(pulse.REFLOW, revisit); - } - - if (cache.empty > df.cleanThreshold) df.runAfter(cache.clean); - return output; -}; - -// use either provided alias or accessor field name -function fieldNames(fields, as) { - if (!fields) return null; - return fields.map(function(f, i) { - return as[i] || accessorName(f); - }); -} - -/** - * Flattens array-typed field values into new data objects. - * If multiple fields are specified, they are treated as parallel arrays, - * with output values included for each matching index (or null if missing). - * @constructor - * @param {object} params - The parameters for this operator. - * @param {Array} params.fields - An array of field - * accessors for the tuple fields that should be flattened. - * @param {Array} [params.as] - Output field names for flattened - * array fields. Any unspecified fields will use the field name provided - * by the fields accessors. - */ -function Flatten(params) { - Transform.call(this, [], params); -} - -Flatten.Definition = { - "type": "Flatten", - "metadata": {"generates": true}, - "params": [ - { "name": "fields", "type": "field", "array": true, "required": true }, - { "name": "as", "type": "string", "array": true } - ] -}; - -var prototype$i = inherits(Flatten, Transform); - -prototype$i.transform = function(_, pulse) { - var out = pulse.fork(pulse.NO_SOURCE), - fields = _.fields, - as = fieldNames(fields, _.as || []), - m = as.length; - - // remove any previous results - out.rem = this.value; - - // generate flattened tuples - pulse.visit(pulse.SOURCE, function(t) { - var arrays = fields.map(function(f) { return f(t); }), - maxlen = arrays.reduce(function(l, a) { return Math.max(l, a.length); }, 0), - i = 0, j, d, v; - - for (; i} [params.as] - Output field names for folded key - * and value fields, defaults to ['key', 'value']. - */ -function Fold(params) { - Transform.call(this, [], params); -} - -Fold.Definition = { - "type": "Fold", - "metadata": {"generates": true}, - "params": [ - { "name": "fields", "type": "field", "array": true, "required": true }, - { "name": "as", "type": "string", "array": true, "length": 2, "default": ["key", "value"] } - ] -}; - -var prototype$j = inherits(Fold, Transform); - -prototype$j.transform = function(_, pulse) { - var out = pulse.fork(pulse.NO_SOURCE), - fields = _.fields, - fnames = fields.map(accessorName), - as = _.as || ['key', 'value'], - k = as[0], - v = as[1], - n = fields.length; - - out.rem = this.value; - - pulse.visit(pulse.SOURCE, function(t) { - for (var i=0, d; i 0) { - // need more tuples, generate and add - for (add=[]; --num >= 0;) { - add.push(t = ingest(gen(_))); - data.push(t); - } - out.add = out.add.length - ? out.materialize(out.ADD).add.concat(add) - : add; - } else { - // need fewer tuples, remove - rem = data.slice(0, -num); - out.rem = out.rem.length - ? out.materialize(out.REM).rem.concat(rem) - : rem; - data = data.slice(-num); - } - - out.source = this.value = data; - return out; -}; - -function ascending$2(a, b) { - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; -} - -function bisector$2(compare) { - if (compare.length === 1) compare = ascendingComparator$2(compare); - return { - left: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) < 0) lo = mid + 1; - else hi = mid; - } - return lo; - }, - right: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) > 0) hi = mid; - else lo = mid + 1; - } - return lo; - } - }; -} - -function ascendingComparator$2(f) { - return function(d, x) { - return ascending$2(f(d), x); - }; -} - -var ascendingBisect$2 = bisector$2(ascending$2); - -function extent$2(values, valueof) { - let min; - let max; - if (valueof === undefined) { - for (const value of values) { - if (value != null) { - if (min === undefined) { - if (value >= value) min = max = value; - } else { - if (min > value) min = value; - if (max < value) max = value; - } - } - } - } else { - let index = -1; - for (let value of values) { - if ((value = valueof(value, ++index, values)) != null) { - if (min === undefined) { - if (value >= value) min = max = value; - } else { - if (min > value) min = value; - if (max < value) max = value; - } - } - } - } - return [min, max]; -} - -function range(start, stop, step) { - start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step; - - var i = -1, - n = Math.max(0, Math.ceil((stop - start) / step)) | 0, - range = new Array(n); - - while (++i < n) { - range[i] = start + i * step; - } - - return range; -} - -function number$1(x) { - return x === null ? NaN : +x; -} - -function quantile$1(values, p, valueof = number$1) { - if (!(n = values.length)) return; - if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values); - if (p >= 1) return +valueof(values[n - 1], n - 1, values); - var n, - i = (n - 1) * p, - i0 = Math.floor(i), - value0 = +valueof(values[i0], i0, values), - value1 = +valueof(values[i0 + 1], i0 + 1, values); - return value0 + (value1 - value0) * (i - i0); -} - -function max(values, valueof) { - let max; - if (valueof === undefined) { - for (const value of values) { - if (value != null - && (max < value || (max === undefined && value >= value))) { - max = value; - } - } - } else { - let index = -1; - for (let value of values) { - if ((value = valueof(value, ++index, values)) != null - && (max < value || (max === undefined && value >= value))) { - max = value; - } - } - } - return max; -} - -function mean(values, valueof) { - let count = 0; - let sum = 0; - if (valueof === undefined) { - for (let value of values) { - if (value != null && (value = +value) >= value) { - ++count, sum += value; - } - } - } else { - let index = -1; - for (let value of values) { - if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) { - ++count, sum += value; - } - } - } - if (count) return sum / count; -} - -// Based on https://github.com/mourner/quickselect -// ISC license, Copyright 2018 Vladimir Agafonkin. -function quickselect(array, k, left = 0, right = array.length - 1, compare = ascending$2) { - while (right > left) { - if (right - left > 600) { - const n = right - left + 1; - const m = k - left + 1; - const z = Math.log(n); - const s = 0.5 * Math.exp(2 * z / 3); - const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1); - const newLeft = Math.max(left, Math.floor(k - m * s / n + sd)); - const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd)); - quickselect(array, k, newLeft, newRight, compare); - } - - const t = array[k]; - let i = left; - let j = right; - - swap(array, left, k); - if (compare(array[right], t) > 0) swap(array, left, right); - - while (i < j) { - swap(array, i, j), ++i, --j; - while (compare(array[i], t) < 0) ++i; - while (compare(array[j], t) > 0) --j; - } - - if (compare(array[left], t) === 0) swap(array, left, j); - else ++j, swap(array, j, right); - - if (j <= k) left = j + 1; - if (k <= j) right = j - 1; - } - return array; -} - -function swap(array, i, j) { - const t = array[i]; - array[i] = array[j]; - array[j] = t; -} - -function* numbers$1(values, valueof) { - if (valueof === undefined) { - for (let value of values) { - if (value != null && (value = +value) >= value) { - yield value; - } - } - } else { - let index = -1; - for (let value of values) { - if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) { - yield value; - } - } - } -} - -function median(values, valueof) { - values = Float64Array.from(numbers$1(values, valueof)); - if (!values.length) return; - const n = values.length; - const i = n >> 1; - quickselect(values, i - 1, 0); - if ((n & 1) === 0) quickselect(values, i, i); - return quantile$1(values, 0.5); -} - -function min(values, valueof) { - let min; - if (valueof === undefined) { - for (const value of values) { - if (value != null - && (min > value || (min === undefined && value >= value))) { - min = value; - } - } - } else { - let index = -1; - for (let value of values) { - if ((value = valueof(value, ++index, values)) != null - && (min > value || (min === undefined && value >= value))) { - min = value; - } - } - } - return min; -} - -var Methods = { - value: 'value', - median: median, - mean: mean, - min: min, - max: max -}; - -var Empty = []; - -/** - * Impute missing values. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {function(object): *} params.field - The value field to impute. - * @param {Array} [params.groupby] - An array of - * accessors to determine series within which to perform imputation. - * @param {function(object): *} params.key - An accessor for a key value. - * Each key value should be unique within a group. New tuples will be - * imputed for any key values that are not found within a group. - * @param {Array<*>} [params.keyvals] - Optional array of required key - * values. New tuples will be imputed for any key values that are not - * found within a group. In addition, these values will be automatically - * augmented with the key values observed in the input data. - * @param {string} [method='value'] - The imputation method to use. One of - * 'value', 'mean', 'median', 'max', 'min'. - * @param {*} [value=0] - The constant value to use for imputation - * when using method 'value'. - */ -function Impute(params) { - Transform.call(this, [], params); -} - -Impute.Definition = { - "type": "Impute", - "metadata": {"changes": true}, - "params": [ - { "name": "field", "type": "field", "required": true }, - { "name": "key", "type": "field", "required": true }, - { "name": "keyvals", "array": true }, - { "name": "groupby", "type": "field", "array": true }, - { "name": "method", "type": "enum", "default": "value", - "values": ["value", "mean", "median", "max", "min"] }, - { "name": "value", "default": 0 } - ] -}; - -var prototype$m = inherits(Impute, Transform); - -function getValue(_) { - var m = _.method || Methods.value, v; - - if (Methods[m] == null) { - error('Unrecognized imputation method: ' + m); - } else if (m === Methods.value) { - v = _.value !== undefined ? _.value : 0; - return function() { return v; }; - } else { - return Methods[m]; - } -} - -function getField(_) { - var f = _.field; - return function(t) { return t ? f(t) : NaN; }; -} - -prototype$m.transform = function(_, pulse) { - var out = pulse.fork(pulse.ALL), - impute = getValue(_), - field = getField(_), - fName = accessorName(_.field), - kName = accessorName(_.key), - gNames = (_.groupby || []).map(accessorName), - groups = partition(pulse.source, _.groupby, _.key, _.keyvals), - curr = [], - prev = this.value, - m = groups.domain.length, - group, value, gVals, kVal, g, i, j, l, n, t; - - for (g=0, l=groups.length; g} [params.groupby] - An array of accessors - * to groupby. - * @param {function(object): *} params.field - An accessor for the data field - * to estimate. - * @param {number} [params.bandwidth=0] - The KDE kernal bandwidth. - * If zero of unspecified, the bandwidth is automatically determined. - * @param {string} [params.cumulative=false] - A boolean flag indicating if a - * density (false) or cumulative distribution (true) should be generated. - * @param {Array} [params.extent] - The domain extent over which to - * plot the density. If unspecified, the [min, max] data extent is used. - * @param {number} [params.minsteps=25] - The minimum number of curve samples - * for plotting the density. - * @param {number} [params.maxsteps=200] - The maximum number of curve samples - * for plotting the density. - * @param {number} [params.steps] - The exact number of curve samples for - * plotting the density. If specified, overrides both minsteps and maxsteps - * to set an exact number of uniform samples. Useful in conjunction with - * a fixed extent to ensure consistent sample points for stacked densities. - */ -function KDE(params) { - Transform.call(this, null, params); -} - -KDE.Definition = { - "type": "KDE", - "metadata": {"generates": true}, - "params": [ - { "name": "groupby", "type": "field", "array": true }, - { "name": "field", "type": "field", "required": true }, - { "name": "cumulative", "type": "boolean", "default": false }, - { "name": "counts", "type": "boolean", "default": false }, - { "name": "bandwidth", "type": "number", "default": 0 }, - { "name": "extent", "type": "number", "array": true, "length": 2 }, - { "name": "steps", "type": "number" }, - { "name": "minsteps", "type": "number", "default": 25 }, - { "name": "maxsteps", "type": "number", "default": 200 }, - { "name": "as", "type": "string", "array": true, "default": ["value", "density"] } - ] -}; - -var prototype$o = inherits(KDE, Transform); - -prototype$o.transform = function(_, pulse) { - var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS); - - if (!this.value || pulse.changed() || _.modified()) { - const source = pulse.materialize(pulse.SOURCE).source, - groups = partition$1(source, _.groupby, _.field), - names = (_.groupby || []).map(accessorName), - bandwidth = _.bandwidth, - method = _.cumulative ? 'cdf' : 'pdf', - minsteps = _.steps || _.minsteps || 25, - maxsteps = _.steps || _.maxsteps || 200, - as = _.as || ['value', 'density'], - values = []; - - if (method !== 'pdf' && method !== 'cdf') { - error('Invalid density method: ' + method); - } - - groups.forEach(g => { - const density = randomKDE(g, bandwidth)[method], - scale = _.counts ? g.length : 1, - domain = _.extent || extent$2(g); - - sampleCurve(density, domain, minsteps, maxsteps).forEach(v => { - const t = {}; - for (let i=0; i} params.fields - The field name(s) for the key function. - * @param {boolean} params.flat - A boolean flag indicating if the field names - * should be treated as flat property names, side-stepping nested field - * lookups normally indicated by dot or bracket notation. - */ -function Key(params) { - Operator.call(this, null, update$4, params); -} - -inherits(Key, Operator); - -function update$4(_) { - return (this.value && !_.modified()) ? this.value : key(_.fields, _.flat); -} - -/** - * Load and parse data from an external source. Marshalls parameter - * values and then invokes the Dataflow request method. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {string} params.url - The URL to load from. - * @param {object} params.format - The data format options. - */ -function Load(params) { - Transform.call(this, [], params); -} - -var prototype$p = inherits(Load, Transform); - -prototype$p.transform = function(_, pulse) { - const df = pulse.dataflow; - - if (_.values) { - // parse and ingest values - return output(this, pulse, df.parse(_.values, _.format)); - } else { - // return promise for async loading - return df.request(_.url, _.format) - .then(res => output(this, pulse, res.data || [])); - } -}; - -function output(op, pulse, data) { - data.forEach(ingest); - const out = pulse.fork(pulse.NO_FIELDS & pulse.NO_SOURCE); - out.rem = op.value; - op.value = out.add = out.source = data; - return out; -} - -/** - * Extend tuples by joining them with values from a lookup table. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {Map} params.index - The lookup table map. - * @param {Array} params.as - Output field names for each lookup value. - * @param {*} [params.default] - A default value to use if lookup fails. - */ -function Lookup(params) { - Transform.call(this, {}, params); -} - -Lookup.Definition = { - "type": "Lookup", - "metadata": {"modifies": true}, - "params": [ - { "name": "index", "type": "index", "params": [ - {"name": "from", "type": "data", "required": true }, - {"name": "key", "type": "field", "required": true } - ] }, - { "name": "values", "type": "field", "array": true }, - { "name": "fields", "type": "field", "array": true, "required": true }, - { "name": "as", "type": "string", "array": true }, - { "name": "default", "default": null } - ] -}; - -var prototype$q = inherits(Lookup, Transform); - -prototype$q.transform = function(_, pulse) { - var out = pulse, - as = _.as, - keys = _.fields, - index = _.index, - values = _.values, - defaultValue = _.default==null ? null : _.default, - reset = _.modified(), - flag = reset ? pulse.SOURCE : pulse.ADD, - n = keys.length, - set, m, mods; - - if (values) { - m = values.length; - - if (n > 1 && !as) { - error('Multi-field lookup requires explicit "as" parameter.'); - } - if (as && as.length !== n * m) { - error('The "as" parameter has too few output field names.'); - } - as = as || values.map(accessorName); - - set = function(t) { - for (var i=0, k=0, j, v; i>} params.extents - The input extents. - */ -function MultiExtent(params) { - Operator.call(this, null, update$5, params); -} - -inherits(MultiExtent, Operator); - -function update$5(_) { - if (this.value && !_.modified()) { - return this.value; - } - - var min = +Infinity, - max = -Infinity, - ext = _.extents, - i, n, e; - - for (i=0, n=ext.length; i max) max = e[1]; - } - return [min, max]; -} - -/** - * Merge a collection of value arrays. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {Array>} params.values - The input value arrrays. - */ -function MultiValues(params) { - Operator.call(this, null, update$6, params); -} - -inherits(MultiValues, Operator); - -function update$6(_) { - return (this.value && !_.modified()) - ? this.value - : _.values.reduce(function(data, _) { return data.concat(_); }, []); -} - -/** - * Operator whose value is simply its parameter hash. This operator is - * useful for enabling reactive updates to values of nested objects. - * @constructor - * @param {object} params - The parameters for this operator. - */ -function Params(params) { - Transform.call(this, null, params); -} - -inherits(Params, Transform); - -Params.prototype.transform = function(_, pulse) { - this.modified(_.modified()); - this.value = _; - return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS); // do not pass tuples -}; - -/** - * Aggregate and pivot selected field values to become new fields. - * This operator is useful to construction cross-tabulations. - * @constructor - * @param {Array} [params.groupby] - An array of accessors - * to groupby. These fields act just like groupby fields of an Aggregate transform. - * @param {function(object): *} params.field - The field to pivot on. The unique - * values of this field become new field names in the output stream. - * @param {function(object): *} params.value - The field to populate pivoted fields. - * The aggregate values of this field become the values of the new pivoted fields. - * @param {string} [params.op] - The aggregation operation for the value field, - * applied per cell in the output stream. The default is "sum". - * @param {number} [params.limit] - An optional parameter indicating the maximum - * number of pivoted fields to generate. The pivoted field names are sorted in - * ascending order prior to enforcing the limit. - */ -function Pivot(params) { - Aggregate.call(this, params); -} - -Pivot.Definition = { - "type": "Pivot", - "metadata": {"generates": true, "changes": true}, - "params": [ - { "name": "groupby", "type": "field", "array": true }, - { "name": "field", "type": "field", "required": true }, - { "name": "value", "type": "field", "required": true }, - { "name": "op", "type": "enum", "values": ValidAggregateOps, "default": "sum" }, - { "name": "limit", "type": "number", "default": 0 }, - { "name": "key", "type": "field" } - ] -}; - -var prototype$r = inherits(Pivot, Aggregate); - -prototype$r._transform = prototype$r.transform; - -prototype$r.transform = function(_, pulse) { - return this._transform(aggregateParams(_, pulse), pulse); -}; - -// Shoehorn a pivot transform into an aggregate transform! -// First collect all unique pivot field values. -// Then generate aggregate fields for each output pivot field. -function aggregateParams(_, pulse) { - var key = _.field, - value = _.value, - op = (_.op === 'count' ? '__count__' : _.op) || 'sum', - fields = accessorFields(key).concat(accessorFields(value)), - keys = pivotKeys(key, _.limit || 0, pulse); - - return { - key: _.key, - groupby: _.groupby, - ops: keys.map(function() { return op; }), - fields: keys.map(function(k) { return get(k, key, value, fields); }), - as: keys.map(function(k) { return k + ''; }), - modified: _.modified.bind(_) - }; -} - -// Generate aggregate field accessor. -// Output NaN for non-existent values; aggregator will ignore! -function get(k, key, value, fields) { - return accessor( - function(d) { return key(d) === k ? value(d) : NaN; }, - fields, - k + '' - ); -} - -// Collect (and optionally limit) all unique pivot values. -function pivotKeys(key, limit, pulse) { - var map = {}, - list = []; - - pulse.visit(pulse.SOURCE, function(t) { - var k = key(t); - if (!map[k]) { - map[k] = 1; - list.push(k); - } - }); - - // TODO? Move this comparator to vega-util? - list.sort(function(u, v) { - return (uv||v==null) && u!=null ? 1 - : ((v=v instanceof Date?+v:v),(u=u instanceof Date?+u:u))!==u && v===v ? -1 - : v!==v && u===u ? 1 : 0; - }); - - return limit ? list.slice(0, limit) : list; -} - -/** - * Partitions pre-faceted data into tuple subflows. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {function(Dataflow, string): Operator} params.subflow - A function - * that generates a subflow of operators and returns its root operator. - * @param {function(object): Array} params.field - The field - * accessor for an array of subflow tuple objects. - */ -function PreFacet(params) { - Facet.call(this, params); -} - -var prototype$s = inherits(PreFacet, Facet); - -prototype$s.transform = function(_, pulse) { - var self = this, - flow = _.subflow, - field = _.field; - - if (_.modified('field') || field && pulse.modified(accessorFields(field))) { - error('PreFacet does not support field modification.'); - } - - this._targets.active = 0; // reset list of active subflows - - pulse.visit(pulse.MOD, function(t) { - var sf = self.subflow(tupleid(t), flow, pulse, t); - field ? field(t).forEach(function(_) { sf.mod(_); }) : sf.mod(t); - }); - - pulse.visit(pulse.ADD, function(t) { - var sf = self.subflow(tupleid(t), flow, pulse, t); - field ? field(t).forEach(function(_) { sf.add(ingest(_)); }) : sf.add(t); - }); - - pulse.visit(pulse.REM, function(t) { - var sf = self.subflow(tupleid(t), flow, pulse, t); - field ? field(t).forEach(function(_) { sf.rem(_); }) : sf.rem(t); - }); - - return pulse; -}; - -/** - * Performs a relational projection, copying selected fields from source - * tuples to a new set of derived tuples. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {Array} [params.as] - Output field names for each projected - * field. Any unspecified fields will use the field name provided by - * the field accessor. - */ -function Project(params) { - Transform.call(this, null, params); -} - -Project.Definition = { - "type": "Project", - "metadata": {"generates": true, "changes": true}, - "params": [ - { "name": "fields", "type": "field", "array": true }, - { "name": "as", "type": "string", "null": true, "array": true }, - ] -}; - -var prototype$t = inherits(Project, Transform); - -prototype$t.transform = function(_, pulse) { - var fields = _.fields, - as = fieldNames(_.fields, _.as || []), - derive = fields - ? function(s, t) { return project(s, t, fields, as); } - : rederive, - out, lut; - - if (this.value) { - lut = this.value; - } else { - pulse = pulse.addAll(); - lut = this.value = {}; - } - - out = pulse.fork(pulse.NO_SOURCE); - - pulse.visit(pulse.REM, function(t) { - var id = tupleid(t); - out.rem.push(lut[id]); - lut[id] = null; - }); - - pulse.visit(pulse.ADD, function(t) { - var dt = derive(t, ingest({})); - lut[tupleid(t)] = dt; - out.add.push(dt); - }); - - pulse.visit(pulse.MOD, function(t) { - out.mod.push(derive(t, lut[tupleid(t)])); - }); - - return out; -}; - -function project(s, t, fields, as) { - for (var i=0, n=fields.length; i= cap) { - p = res[idx]; - if (map[tupleid(p)]) out.rem.push(p); // eviction - res[idx] = t; - } - } - ++cnt; - } - - if (pulse.rem.length) { - // find all tuples that should be removed, add to output - pulse.visit(pulse.REM, function(t) { - var id = tupleid(t); - if (map[id]) { - map[id] = -1; - out.rem.push(t); - } - --cnt; - }); - - // filter removed tuples out of the sample reservoir - res = res.filter(function(t) { return map[tupleid(t)] !== -1; }); - } - - if ((pulse.rem.length || mod) && res.length < num && pulse.source) { - // replenish sample if backing data source is available - cap = cnt = res.length; - pulse.visit(pulse.SOURCE, function(t) { - // update, but skip previously sampled tuples - if (!map[tupleid(t)]) update(t); - }); - cap = -1; - } - - if (mod && res.length > num) { - for (var i=0, n=res.length-num; i df.cleanThreshold) df.runAfter(index.clean); - return pulse.fork(); -}; - -/** - * Extracts an array of values. Assumes the source data has already been - * reduced as needed (e.g., by an upstream Aggregate transform). - * @constructor - * @param {object} params - The parameters for this operator. - * @param {function(object): *} params.field - The domain field to extract. - * @param {function(*,*): number} [params.sort] - An optional - * comparator function for sorting the values. The comparator will be - * applied to backing tuples prior to value extraction. - */ -function Values(params) { - Transform.call(this, null, params); -} - -var prototype$A = inherits(Values, Transform); - -prototype$A.transform = function(_, pulse) { - var run = !this.value - || _.modified('field') - || _.modified('sort') - || pulse.changed() - || (_.sort && pulse.modified(_.sort.fields)); - - if (run) { - this.value = (_.sort - ? pulse.source.slice().sort(_.sort) - : pulse.source).map(_.field); - } -}; - -function WindowOp(op, field, param, as) { - let fn = WindowOps[op](field, param); - return { - init: fn.init || zero, - update: function(w, t) { t[as] = fn.next(w); } - }; -} - -const WindowOps = { - row_number: function() { - return { - next: w => w.index + 1 - }; - }, - rank: function() { - let rank; - return { - init: () => rank = 1, - next: w => { - let i = w.index, - data = w.data; - return (i && w.compare(data[i - 1], data[i])) ? (rank = i + 1) : rank; - } - }; - }, - dense_rank: function() { - let drank; - return { - init: () => drank = 1, - next: w => { - let i = w.index, - d = w.data; - return (i && w.compare(d[i - 1], d[i])) ? ++drank : drank; - } - }; - }, - percent_rank: function() { - let rank = WindowOps.rank(), - next = rank.next; - return { - init: rank.init, - next: w => (next(w) - 1) / (w.data.length - 1) - }; - }, - cume_dist: function() { - let cume; - return { - init: () => cume = 0, - next: w => { - let i = w.index, - d = w.data, - c = w.compare; - if (cume < i) { - while (i + 1 < d.length && !c(d[i], d[i + 1])) ++i; - cume = i; - } - return (1 + cume) / d.length; - } - }; - }, - ntile: function(field, num) { - num = +num; - if (!(num > 0)) error('ntile num must be greater than zero.'); - let cume = WindowOps.cume_dist(), - next = cume.next; - return { - init: cume.init, - next: w => Math.ceil(num * next(w)) - }; - }, - - lag: function(field, offset) { - offset = +offset || 1; - return { - next: w => { - let i = w.index - offset; - return i >= 0 ? field(w.data[i]) : null; - } - }; - }, - lead: function(field, offset) { - offset = +offset || 1; - return { - next: w => { - let i = w.index + offset, - d = w.data; - return i < d.length ? field(d[i]) : null; - } - }; - }, - - first_value: function(field) { - return { - next: w => field(w.data[w.i0]) - }; - }, - last_value: function(field) { - return { - next: w => field(w.data[w.i1 - 1]) - } - }, - nth_value: function(field, nth) { - nth = +nth; - if (!(nth > 0)) error('nth_value nth must be greater than zero.'); - return { - next: w => { - let i = w.i0 + (nth - 1); - return i < w.i1 ? field(w.data[i]) : null; - } - } - }, - - prev_value: function(field) { - let prev = null; - return { - next: w => { - let v = field(w.data[w.index]); - return v != null ? (prev = v) : prev; - } - } - }, - next_value: function(field) { - let v = null, - i = -1; - return { - next: w => { - let d = w.data; - return w.index <= i ? v - : (i = find(field, d, w.index)) < 0 - ? (i = d.length, v = null) - : (v = field(d[i])); - } - }; - }, - -}; - -function find(field, data, index) { - for (let n = data.length; index < n; ++index) { - let v = field(data[index]); - if (v != null) return index; - } - return -1; -} - -var ValidWindowOps = Object.keys(WindowOps); - -function WindowState(_) { - let self = this, - ops = array(_.ops), - fields = array(_.fields), - params = array(_.params), - as = array(_.as), - outputs = self.outputs = [], - windows = self.windows = [], - inputs = {}, - map = {}, - countOnly = true, - counts = [], - measures = []; - - function visitInputs(f) { - array(accessorFields(f)).forEach(_ => inputs[_] = 1); - } - visitInputs(_.sort); - - ops.forEach(function(op, i) { - let field = fields[i], - mname = accessorName(field), - name = measureName(op, mname, as[i]); - - visitInputs(field); - outputs.push(name); - - // Window operation - if (WindowOps.hasOwnProperty(op)) { - windows.push(WindowOp(op, fields[i], params[i], name)); - } - - // Aggregate operation - else { - if (field == null && op !== 'count') { - error('Null aggregate field specified.'); - } - if (op === 'count') { - counts.push(name); - return; - } - - countOnly = false; - let m = map[mname]; - if (!m) { - m = (map[mname] = []); - m.field = field; - measures.push(m); - } - m.push(createMeasure(op, name)); - } - }); - - if (counts.length || measures.length) { - self.cell = cell(measures, counts, countOnly); - } - - self.inputs = Object.keys(inputs); -} - -const prototype$B = WindowState.prototype; - -prototype$B.init = function() { - this.windows.forEach(_ => _.init()); - if (this.cell) this.cell.init(); -}; - -prototype$B.update = function(w, t) { - let self = this, - cell = self.cell, - wind = self.windows, - data = w.data, - m = wind && wind.length, - j; - - if (cell) { - for (j=w.p0; j compileMeasures(m, m.field)); - - let cell = { - num: 0, - agg: null, - store: false, - count: counts - }; - - if (!countOnly) { - var n = measures.length, - a = cell.agg = Array(n), - i = 0; - for (; i} [params.groupby] - An array of accessors by which to partition tuples into separate windows. - * @param {Array} params.ops - An array of strings indicating window operations to perform. - * @param {Array} [params.fields] - An array of accessors - * for data fields to use as inputs to window operations. - * @param {Array<*>} [params.params] - An array of parameter values for window operations. - * @param {Array} [params.as] - An array of output field names for window operations. - * @param {Array} [params.frame] - Window frame definition as two-element array. - * @param {boolean} [params.ignorePeers=false] - If true, base window frame boundaries on row - * number alone, ignoring peers with identical sort values. If false (default), - * the window boundaries will be adjusted to include peer values. - */ -function Window(params) { - Transform.call(this, {}, params); - this._mlen = 0; - this._mods = []; -} - -Window.Definition = { - "type": "Window", - "metadata": {"modifies": true}, - "params": [ - { "name": "sort", "type": "compare" }, - { "name": "groupby", "type": "field", "array": true }, - { "name": "ops", "type": "enum", "array": true, "values": ValidWindowOps.concat(ValidAggregateOps) }, - { "name": "params", "type": "number", "null": true, "array": true }, - { "name": "fields", "type": "field", "null": true, "array": true }, - { "name": "as", "type": "string", "null": true, "array": true }, - { "name": "frame", "type": "number", "null": true, "array": true, "length": 2, "default": [null, 0] }, - { "name": "ignorePeers", "type": "boolean", "default": false } - ] -}; - -var prototype$C = inherits(Window, Transform); - -prototype$C.transform = function(_, pulse) { - var self = this, - state = self.state, - mod = _.modified(), - i, n; - - this.stamp = pulse.stamp; - - // initialize window state - if (!state || mod) { - state = self.state = new WindowState(_); - } - - // retrieve group for a tuple - var key = groupkey(_.groupby); - function group(t) { return self.group(key(t)); } - - // partition input tuples - if (mod || pulse.modified(state.inputs)) { - self.value = {}; - pulse.visit(pulse.SOURCE, function(t) { group(t).add(t); }); - } else { - pulse.visit(pulse.REM, function(t) { group(t).remove(t); }); - pulse.visit(pulse.ADD, function(t) { group(t).add(t); }); - } - - // perform window calculations for each modified partition - for (i=0, n=self._mlen; i 0 && !c(d[r0], d[r0-1])) w.i0 = bisect.left(d, d[r0]); - if (r1 < n && !c(d[r1], d[r1+1])) w.i1 = bisect.right(d, d[r1]); -} - - - -var tx = /*#__PURE__*/Object.freeze({ - aggregate: Aggregate, - bin: Bin, - collect: Collect, - compare: Compare, - countpattern: CountPattern, - cross: Cross, - density: Density, - expression: Expression, - extent: Extent, - facet: Facet, - field: Field, - filter: Filter, - flatten: Flatten, - fold: Fold, - formula: Formula, - generate: Generate, - impute: Impute, - joinaggregate: JoinAggregate, - kde: KDE, - key: Key, - load: Load, - lookup: Lookup, - multiextent: MultiExtent, - multivalues: MultiValues, - params: Params, - pivot: Pivot, - prefacet: PreFacet, - project: Project, - proxy: Proxy, - relay: Relay, - sample: Sample, - sequence: Sequence, - sieve: Sieve, - subflow: Subflow, - tupleindex: TupleIndex, - values: Values, - window: Window -}); - -const Top = 'top'; -const Left = 'left'; -const Right = 'right'; -const Bottom = 'bottom'; - -const TopLeft = 'top-left'; -const TopRight = 'top-right'; -const BottomLeft = 'bottom-left'; -const BottomRight = 'bottom-right'; - -const Start = 'start'; -const Middle = 'middle'; -const End = 'end'; - -const X = 'x'; -const Y = 'y'; - -const Group = 'group'; - -const AxisRole = 'axis'; -const TitleRole = 'title'; -const FrameRole = 'frame'; -const ScopeRole = 'scope'; -const LegendRole = 'legend'; - -const RowHeader = 'row-header'; -const RowFooter = 'row-footer'; -const RowTitle = 'row-title'; -const ColHeader = 'column-header'; -const ColFooter = 'column-footer'; -const ColTitle = 'column-title'; - -const Padding = 'padding'; - -const Symbols = 'symbol'; - -const Fit = 'fit'; -const FitX = 'fit-x'; -const FitY = 'fit-y'; -const Pad = 'pad'; -const None$1 = 'none'; - -const All = 'all'; -const Each = 'each'; -const Flush = 'flush'; - -const Column = 'column'; -const Row = 'row'; - -function Bounds(b) { - this.clear(); - if (b) this.union(b); -} - -var prototype$D = Bounds.prototype; - -prototype$D.clone = function() { - return new Bounds(this); -}; - -prototype$D.clear = function() { - this.x1 = +Number.MAX_VALUE; - this.y1 = +Number.MAX_VALUE; - this.x2 = -Number.MAX_VALUE; - this.y2 = -Number.MAX_VALUE; - return this; -}; - -prototype$D.empty = function() { - return ( - this.x1 === +Number.MAX_VALUE && - this.y1 === +Number.MAX_VALUE && - this.x2 === -Number.MAX_VALUE && - this.y2 === -Number.MAX_VALUE - ); -}; - -prototype$D.equals = function(b) { - return ( - this.x1 === b.x1 && - this.y1 === b.y1 && - this.x2 === b.x2 && - this.y2 === b.y2 - ); -}; - -prototype$D.set = function(x1, y1, x2, y2) { - if (x2 < x1) { - this.x2 = x1; - this.x1 = x2; - } else { - this.x1 = x1; - this.x2 = x2; - } - if (y2 < y1) { - this.y2 = y1; - this.y1 = y2; - } else { - this.y1 = y1; - this.y2 = y2; - } - return this; -}; - -prototype$D.add = function(x, y) { - if (x < this.x1) this.x1 = x; - if (y < this.y1) this.y1 = y; - if (x > this.x2) this.x2 = x; - if (y > this.y2) this.y2 = y; - return this; -}; - -prototype$D.expand = function(d) { - this.x1 -= d; - this.y1 -= d; - this.x2 += d; - this.y2 += d; - return this; -}; - -prototype$D.round = function() { - this.x1 = Math.floor(this.x1); - this.y1 = Math.floor(this.y1); - this.x2 = Math.ceil(this.x2); - this.y2 = Math.ceil(this.y2); - return this; -}; - -prototype$D.translate = function(dx, dy) { - this.x1 += dx; - this.x2 += dx; - this.y1 += dy; - this.y2 += dy; - return this; -}; - -prototype$D.rotate = function(angle, x, y) { - const p = this.rotatedPoints(angle, x, y); - return this.clear() - .add(p[0], p[1]) - .add(p[2], p[3]) - .add(p[4], p[5]) - .add(p[6], p[7]); -}; - -prototype$D.rotatedPoints = function(angle, x, y) { - var {x1, y1, x2, y2} = this, - cos = Math.cos(angle), - sin = Math.sin(angle), - cx = x - x*cos + y*sin, - cy = y - x*sin - y*cos; - - return [ - cos*x1 - sin*y1 + cx, sin*x1 + cos*y1 + cy, - cos*x1 - sin*y2 + cx, sin*x1 + cos*y2 + cy, - cos*x2 - sin*y1 + cx, sin*x2 + cos*y1 + cy, - cos*x2 - sin*y2 + cx, sin*x2 + cos*y2 + cy - ]; -}; - -prototype$D.union = function(b) { - if (b.x1 < this.x1) this.x1 = b.x1; - if (b.y1 < this.y1) this.y1 = b.y1; - if (b.x2 > this.x2) this.x2 = b.x2; - if (b.y2 > this.y2) this.y2 = b.y2; - return this; -}; - -prototype$D.intersect = function(b) { - if (b.x1 > this.x1) this.x1 = b.x1; - if (b.y1 > this.y1) this.y1 = b.y1; - if (b.x2 < this.x2) this.x2 = b.x2; - if (b.y2 < this.y2) this.y2 = b.y2; - return this; -}; - -prototype$D.encloses = function(b) { - return b && ( - this.x1 <= b.x1 && - this.x2 >= b.x2 && - this.y1 <= b.y1 && - this.y2 >= b.y2 - ); -}; - -prototype$D.alignsWith = function(b) { - return b && ( - this.x1 == b.x1 || - this.x2 == b.x2 || - this.y1 == b.y1 || - this.y2 == b.y2 - ); -}; - -prototype$D.intersects = function(b) { - return b && !( - this.x2 < b.x1 || - this.x1 > b.x2 || - this.y2 < b.y1 || - this.y1 > b.y2 - ); -}; - -prototype$D.contains = function(x, y) { - return !( - x < this.x1 || - x > this.x2 || - y < this.y1 || - y > this.y2 - ); -}; - -prototype$D.width = function() { - return this.x2 - this.x1; -}; - -prototype$D.height = function() { - return this.y2 - this.y1; -}; - -var gradient_id = 0; - -const patternPrefix = 'p_'; - -function isGradient(value) { - return value && value.gradient; -} - -function gradientRef(g, defs, base) { - let id = g.id, - type = g.gradient, - prefix = type === 'radial' ? patternPrefix : ''; - - // check id, assign default values as needed - if (!id) { - id = g.id = 'gradient_' + (gradient_id++); - if (type === 'radial') { - g.x1 = get$1(g.x1, 0.5); - g.y1 = get$1(g.y1, 0.5); - g.r1 = get$1(g.r1, 0); - g.x2 = get$1(g.x2, 0.5); - g.y2 = get$1(g.y2, 0.5); - g.r2 = get$1(g.r2, 0.5); - prefix = patternPrefix; - } else { - g.x1 = get$1(g.x1, 0); - g.y1 = get$1(g.y1, 0); - g.x2 = get$1(g.x2, 1); - g.y2 = get$1(g.y2, 0); - } - } - - // register definition - defs[id] = g; - - // return url reference - return 'url(' + (base || '') + '#' + prefix + id + ')'; -} - -function get$1(val, def) { - return val != null ? val : def; -} - -function Gradient(p0, p1) { - var stops = [], gradient; - return gradient = { - gradient: 'linear', - x1: p0 ? p0[0] : 0, - y1: p0 ? p0[1] : 0, - x2: p1 ? p1[0] : 1, - y2: p1 ? p1[1] : 0, - stops: stops, - stop: function(offset, color) { - stops.push({offset: offset, color: color}); - return gradient; - } - }; -} - -function Item(mark) { - this.mark = mark; - this.bounds = (this.bounds || new Bounds()); -} - -function GroupItem(mark) { - Item.call(this, mark); - this.items = (this.items || []); -} - -inherits(GroupItem, Item); - -function domCanvas(w, h) { - if (typeof document !== 'undefined' && document.createElement) { - var c = document.createElement('canvas'); - if (c && c.getContext) { - c.width = w; - c.height = h; - return c; - } - } - return null; -} - -function domImage() { - return typeof Image !== 'undefined' ? Image : null; -} - -var NodeCanvas; - -try { - NodeCanvas = require('canvas'); - if (!(NodeCanvas && NodeCanvas.createCanvas)) { - NodeCanvas = null; - } -} catch (error) { - // do nothing -} - -function nodeCanvas(w, h, type) { - if (NodeCanvas) { - try { - return new NodeCanvas.Canvas(w, h, type); - } catch (e) { - // do nothing, return null on error - } - } - return null; -} - -function nodeImage() { - return (NodeCanvas && NodeCanvas.Image) || null; -} - -function canvas(w, h, type) { - return domCanvas(w, h) || nodeCanvas(w, h, type) || null; -} - -function image() { - return domImage() || nodeImage() || null; -} - -function ResourceLoader(customLoader) { - this._pending = 0; - this._loader = customLoader || loader(); -} - -var prototype$E = ResourceLoader.prototype; - -prototype$E.pending = function() { - return this._pending; -}; - -function increment(loader) { - loader._pending += 1; -} - -function decrement(loader) { - loader._pending -= 1; -} - -prototype$E.sanitizeURL = function(uri) { - var loader = this; - increment(loader); - - return loader._loader.sanitize(uri, {context:'href'}) - .then(function(opt) { - decrement(loader); - return opt; - }) - .catch(function() { - decrement(loader); - return null; - }); -}; - -prototype$E.loadImage = function(uri) { - var loader = this, - Image = image(); - increment(loader); - - return loader._loader - .sanitize(uri, {context: 'image'}) - .then(function(opt) { - var url = opt.href; - if (!url || !Image) throw {url: url}; - - var img = new Image(); - - img.onload = function() { - decrement(loader); - img.loaded = true; - }; - - img.onerror = function() { - decrement(loader); - img.loaded = false; - }; - - img.src = url; - return img; - }) - .catch(function(e) { - decrement(loader); - return {loaded: false, width: 0, height: 0, src: e && e.url || ''}; - }); -}; - -prototype$E.ready = function() { - var loader = this; - return new Promise(function(accept) { - function poll(value) { - if (!loader.pending()) accept(value); - else setTimeout(function() { poll(true); }, 10); - } - poll(false); - }); -}; - -var pi = Math.PI, - tau = 2 * pi, - epsilon = 1e-6, - tauEpsilon = tau - epsilon; - -function Path() { - this._x0 = this._y0 = // start of current subpath - this._x1 = this._y1 = null; // end of current subpath - this._ = ""; -} - -function path() { - return new Path; -} - -Path.prototype = path.prototype = { - constructor: Path, - moveTo: function(x, y) { - this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y); - }, - closePath: function() { - if (this._x1 !== null) { - this._x1 = this._x0, this._y1 = this._y0; - this._ += "Z"; - } - }, - lineTo: function(x, y) { - this._ += "L" + (this._x1 = +x) + "," + (this._y1 = +y); - }, - quadraticCurveTo: function(x1, y1, x, y) { - this._ += "Q" + (+x1) + "," + (+y1) + "," + (this._x1 = +x) + "," + (this._y1 = +y); - }, - bezierCurveTo: function(x1, y1, x2, y2, x, y) { - this._ += "C" + (+x1) + "," + (+y1) + "," + (+x2) + "," + (+y2) + "," + (this._x1 = +x) + "," + (this._y1 = +y); - }, - arcTo: function(x1, y1, x2, y2, r) { - x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r; - var x0 = this._x1, - y0 = this._y1, - x21 = x2 - x1, - y21 = y2 - y1, - x01 = x0 - x1, - y01 = y0 - y1, - l01_2 = x01 * x01 + y01 * y01; - - // Is the radius negative? Error. - if (r < 0) throw new Error("negative radius: " + r); - - // Is this path empty? Move to (x1,y1). - if (this._x1 === null) { - this._ += "M" + (this._x1 = x1) + "," + (this._y1 = y1); - } - - // Or, is (x1,y1) coincident with (x0,y0)? Do nothing. - else if (!(l01_2 > epsilon)); - - // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear? - // Equivalently, is (x1,y1) coincident with (x2,y2)? - // Or, is the radius zero? Line to (x1,y1). - else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) { - this._ += "L" + (this._x1 = x1) + "," + (this._y1 = y1); - } - - // Otherwise, draw an arc! - else { - var x20 = x2 - x0, - y20 = y2 - y0, - l21_2 = x21 * x21 + y21 * y21, - l20_2 = x20 * x20 + y20 * y20, - l21 = Math.sqrt(l21_2), - l01 = Math.sqrt(l01_2), - l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2), - t01 = l / l01, - t21 = l / l21; - - // If the start tangent is not coincident with (x0,y0), line to. - if (Math.abs(t01 - 1) > epsilon) { - this._ += "L" + (x1 + t01 * x01) + "," + (y1 + t01 * y01); - } - - this._ += "A" + r + "," + r + ",0,0," + (+(y01 * x20 > x01 * y20)) + "," + (this._x1 = x1 + t21 * x21) + "," + (this._y1 = y1 + t21 * y21); - } - }, - arc: function(x, y, r, a0, a1, ccw) { - x = +x, y = +y, r = +r; - var dx = r * Math.cos(a0), - dy = r * Math.sin(a0), - x0 = x + dx, - y0 = y + dy, - cw = 1 ^ ccw, - da = ccw ? a0 - a1 : a1 - a0; - - // Is the radius negative? Error. - if (r < 0) throw new Error("negative radius: " + r); - - // Is this path empty? Move to (x0,y0). - if (this._x1 === null) { - this._ += "M" + x0 + "," + y0; - } - - // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0). - else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) { - this._ += "L" + x0 + "," + y0; - } - - // Is this arc empty? We’re done. - if (!r) return; - - // Does the angle go the wrong way? Flip the direction. - if (da < 0) da = da % tau + tau; - - // Is this a complete circle? Draw two arcs to complete the circle. - if (da > tauEpsilon) { - this._ += "A" + r + "," + r + ",0,1," + cw + "," + (x - dx) + "," + (y - dy) + "A" + r + "," + r + ",0,1," + cw + "," + (this._x1 = x0) + "," + (this._y1 = y0); - } - - // Is this arc non-empty? Draw an arc! - else if (da > epsilon) { - this._ += "A" + r + "," + r + ",0," + (+(da >= pi)) + "," + cw + "," + (this._x1 = x + r * Math.cos(a1)) + "," + (this._y1 = y + r * Math.sin(a1)); - } - }, - rect: function(x, y, w, h) { - this._ += "M" + (this._x0 = this._x1 = +x) + "," + (this._y0 = this._y1 = +y) + "h" + (+w) + "v" + (+h) + "h" + (-w) + "Z"; - }, - toString: function() { - return this._; - } -}; - -function constant$1(x) { - return function constant() { - return x; - }; -} - -var abs = Math.abs; -var atan2 = Math.atan2; -var cos = Math.cos; -var max$1 = Math.max; -var min$1 = Math.min; -var sin = Math.sin; -var sqrt = Math.sqrt; - -var epsilon$1 = 1e-12; -var pi$1 = Math.PI; -var halfPi = pi$1 / 2; -var tau$1 = 2 * pi$1; - -function acos(x) { - return x > 1 ? 0 : x < -1 ? pi$1 : Math.acos(x); -} - -function asin(x) { - return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x); -} - -function arcInnerRadius(d) { - return d.innerRadius; -} - -function arcOuterRadius(d) { - return d.outerRadius; -} - -function arcStartAngle(d) { - return d.startAngle; -} - -function arcEndAngle(d) { - return d.endAngle; -} - -function arcPadAngle(d) { - return d && d.padAngle; // Note: optional! -} - -function intersect(x0, y0, x1, y1, x2, y2, x3, y3) { - var x10 = x1 - x0, y10 = y1 - y0, - x32 = x3 - x2, y32 = y3 - y2, - t = y32 * x10 - x32 * y10; - if (t * t < epsilon$1) return; - t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t; - return [x0 + t * x10, y0 + t * y10]; -} - -// Compute perpendicular offset line of length rc. -// http://mathworld.wolfram.com/Circle-LineIntersection.html -function cornerTangents(x0, y0, x1, y1, r1, rc, cw) { - var x01 = x0 - x1, - y01 = y0 - y1, - lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01), - ox = lo * y01, - oy = -lo * x01, - x11 = x0 + ox, - y11 = y0 + oy, - x10 = x1 + ox, - y10 = y1 + oy, - x00 = (x11 + x10) / 2, - y00 = (y11 + y10) / 2, - dx = x10 - x11, - dy = y10 - y11, - d2 = dx * dx + dy * dy, - r = r1 - rc, - D = x11 * y10 - x10 * y11, - d = (dy < 0 ? -1 : 1) * sqrt(max$1(0, r * r * d2 - D * D)), - cx0 = (D * dy - dx * d) / d2, - cy0 = (-D * dx - dy * d) / d2, - cx1 = (D * dy + dx * d) / d2, - cy1 = (-D * dx + dy * d) / d2, - dx0 = cx0 - x00, - dy0 = cy0 - y00, - dx1 = cx1 - x00, - dy1 = cy1 - y00; - - // Pick the closer of the two intersection points. - // TODO Is there a faster way to determine which intersection to use? - if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1; - - return { - cx: cx0, - cy: cy0, - x01: -ox, - y01: -oy, - x11: cx0 * (r1 / r - 1), - y11: cy0 * (r1 / r - 1) - }; -} - -function d3_arc() { - var innerRadius = arcInnerRadius, - outerRadius = arcOuterRadius, - cornerRadius = constant$1(0), - padRadius = null, - startAngle = arcStartAngle, - endAngle = arcEndAngle, - padAngle = arcPadAngle, - context = null; - - function arc() { - var buffer, - r, - r0 = +innerRadius.apply(this, arguments), - r1 = +outerRadius.apply(this, arguments), - a0 = startAngle.apply(this, arguments) - halfPi, - a1 = endAngle.apply(this, arguments) - halfPi, - da = abs(a1 - a0), - cw = a1 > a0; - - if (!context) context = buffer = path(); - - // Ensure that the outer radius is always larger than the inner radius. - if (r1 < r0) r = r1, r1 = r0, r0 = r; - - // Is it a point? - if (!(r1 > epsilon$1)) context.moveTo(0, 0); - - // Or is it a circle or annulus? - else if (da > tau$1 - epsilon$1) { - context.moveTo(r1 * cos(a0), r1 * sin(a0)); - context.arc(0, 0, r1, a0, a1, !cw); - if (r0 > epsilon$1) { - context.moveTo(r0 * cos(a1), r0 * sin(a1)); - context.arc(0, 0, r0, a1, a0, cw); - } - } - - // Or is it a circular or annular sector? - else { - var a01 = a0, - a11 = a1, - a00 = a0, - a10 = a1, - da0 = da, - da1 = da, - ap = padAngle.apply(this, arguments) / 2, - rp = (ap > epsilon$1) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)), - rc = min$1(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)), - rc0 = rc, - rc1 = rc, - t0, - t1; - - // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0. - if (rp > epsilon$1) { - var p0 = asin(rp / r0 * sin(ap)), - p1 = asin(rp / r1 * sin(ap)); - if ((da0 -= p0 * 2) > epsilon$1) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0; - else da0 = 0, a00 = a10 = (a0 + a1) / 2; - if ((da1 -= p1 * 2) > epsilon$1) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1; - else da1 = 0, a01 = a11 = (a0 + a1) / 2; - } - - var x01 = r1 * cos(a01), - y01 = r1 * sin(a01), - x10 = r0 * cos(a10), - y10 = r0 * sin(a10); - - // Apply rounded corners? - if (rc > epsilon$1) { - var x11 = r1 * cos(a11), - y11 = r1 * sin(a11), - x00 = r0 * cos(a00), - y00 = r0 * sin(a00), - oc; - - // Restrict the corner radius according to the sector angle. - if (da < pi$1 && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) { - var ax = x01 - oc[0], - ay = y01 - oc[1], - bx = x11 - oc[0], - by = y11 - oc[1], - kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2), - lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]); - rc0 = min$1(rc, (r0 - lc) / (kc - 1)); - rc1 = min$1(rc, (r1 - lc) / (kc + 1)); - } - } - - // Is the sector collapsed to a line? - if (!(da1 > epsilon$1)) context.moveTo(x01, y01); - - // Does the sector’s outer ring have rounded corners? - else if (rc1 > epsilon$1) { - t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw); - t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw); - - context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01); - - // Have the corners merged? - if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw); - - // Otherwise, draw the two corners and the ring. - else { - context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw); - context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw); - context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw); - } - } - - // Or is the outer ring just a circular arc? - else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw); - - // Is there no inner ring, and it’s a circular sector? - // Or perhaps it’s an annular sector collapsed due to padding? - if (!(r0 > epsilon$1) || !(da0 > epsilon$1)) context.lineTo(x10, y10); - - // Does the sector’s inner ring (or point) have rounded corners? - else if (rc0 > epsilon$1) { - t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw); - t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw); - - context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01); - - // Have the corners merged? - if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw); - - // Otherwise, draw the two corners and the ring. - else { - context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw); - context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw); - context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw); - } - } - - // Or is the inner ring just a circular arc? - else context.arc(0, 0, r0, a10, a00, cw); - } - - context.closePath(); - - if (buffer) return context = null, buffer + "" || null; - } - - arc.centroid = function() { - var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2, - a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi$1 / 2; - return [cos(a) * r, sin(a) * r]; - }; - - arc.innerRadius = function(_) { - return arguments.length ? (innerRadius = typeof _ === "function" ? _ : constant$1(+_), arc) : innerRadius; - }; - - arc.outerRadius = function(_) { - return arguments.length ? (outerRadius = typeof _ === "function" ? _ : constant$1(+_), arc) : outerRadius; - }; - - arc.cornerRadius = function(_) { - return arguments.length ? (cornerRadius = typeof _ === "function" ? _ : constant$1(+_), arc) : cornerRadius; - }; - - arc.padRadius = function(_) { - return arguments.length ? (padRadius = _ == null ? null : typeof _ === "function" ? _ : constant$1(+_), arc) : padRadius; - }; - - arc.startAngle = function(_) { - return arguments.length ? (startAngle = typeof _ === "function" ? _ : constant$1(+_), arc) : startAngle; - }; - - arc.endAngle = function(_) { - return arguments.length ? (endAngle = typeof _ === "function" ? _ : constant$1(+_), arc) : endAngle; - }; - - arc.padAngle = function(_) { - return arguments.length ? (padAngle = typeof _ === "function" ? _ : constant$1(+_), arc) : padAngle; - }; - - arc.context = function(_) { - return arguments.length ? ((context = _ == null ? null : _), arc) : context; - }; - - return arc; -} - -function Linear(context) { - this._context = context; -} - -Linear.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._point = 0; - }, - lineEnd: function() { - if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; - case 1: this._point = 2; // proceed - default: this._context.lineTo(x, y); break; - } - } -}; - -function curveLinear(context) { - return new Linear(context); -} - -function x(p) { - return p[0]; -} - -function y(p) { - return p[1]; -} - -function d3_line() { - var x$1 = x, - y$1 = y, - defined = constant$1(true), - context = null, - curve = curveLinear, - output = null; - - function line(data) { - var i, - n = data.length, - d, - defined0 = false, - buffer; - - if (context == null) output = curve(buffer = path()); - - for (i = 0; i <= n; ++i) { - if (!(i < n && defined(d = data[i], i, data)) === defined0) { - if (defined0 = !defined0) output.lineStart(); - else output.lineEnd(); - } - if (defined0) output.point(+x$1(d, i, data), +y$1(d, i, data)); - } - - if (buffer) return output = null, buffer + "" || null; - } - - line.x = function(_) { - return arguments.length ? (x$1 = typeof _ === "function" ? _ : constant$1(+_), line) : x$1; - }; - - line.y = function(_) { - return arguments.length ? (y$1 = typeof _ === "function" ? _ : constant$1(+_), line) : y$1; - }; - - line.defined = function(_) { - return arguments.length ? (defined = typeof _ === "function" ? _ : constant$1(!!_), line) : defined; - }; - - line.curve = function(_) { - return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve; - }; - - line.context = function(_) { - return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context; - }; - - return line; -} - -function d3_area() { - var x0 = x, - x1 = null, - y0 = constant$1(0), - y1 = y, - defined = constant$1(true), - context = null, - curve = curveLinear, - output = null; - - function area(data) { - var i, - j, - k, - n = data.length, - d, - defined0 = false, - buffer, - x0z = new Array(n), - y0z = new Array(n); - - if (context == null) output = curve(buffer = path()); - - for (i = 0; i <= n; ++i) { - if (!(i < n && defined(d = data[i], i, data)) === defined0) { - if (defined0 = !defined0) { - j = i; - output.areaStart(); - output.lineStart(); - } else { - output.lineEnd(); - output.lineStart(); - for (k = i - 1; k >= j; --k) { - output.point(x0z[k], y0z[k]); - } - output.lineEnd(); - output.areaEnd(); - } - } - if (defined0) { - x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data); - output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]); - } - } - - if (buffer) return output = null, buffer + "" || null; - } - - function arealine() { - return d3_line().defined(defined).curve(curve).context(context); - } - - area.x = function(_) { - return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$1(+_), x1 = null, area) : x0; - }; - - area.x0 = function(_) { - return arguments.length ? (x0 = typeof _ === "function" ? _ : constant$1(+_), area) : x0; - }; - - area.x1 = function(_) { - return arguments.length ? (x1 = _ == null ? null : typeof _ === "function" ? _ : constant$1(+_), area) : x1; - }; - - area.y = function(_) { - return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$1(+_), y1 = null, area) : y0; - }; - - area.y0 = function(_) { - return arguments.length ? (y0 = typeof _ === "function" ? _ : constant$1(+_), area) : y0; - }; - - area.y1 = function(_) { - return arguments.length ? (y1 = _ == null ? null : typeof _ === "function" ? _ : constant$1(+_), area) : y1; - }; - - area.lineX0 = - area.lineY0 = function() { - return arealine().x(x0).y(y0); - }; - - area.lineY1 = function() { - return arealine().x(x0).y(y1); - }; - - area.lineX1 = function() { - return arealine().x(x1).y(y0); - }; - - area.defined = function(_) { - return arguments.length ? (defined = typeof _ === "function" ? _ : constant$1(!!_), area) : defined; - }; - - area.curve = function(_) { - return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve; - }; - - area.context = function(_) { - return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context; - }; - - return area; -} - -var circle = { - draw: function(context, size) { - var r = Math.sqrt(size / pi$1); - context.moveTo(r, 0); - context.arc(0, 0, r, 0, tau$1); - } -}; - -function d3_symbol() { - var type = constant$1(circle), - size = constant$1(64), - context = null; - - function symbol() { - var buffer; - if (!context) context = buffer = path(); - type.apply(this, arguments).draw(context, +size.apply(this, arguments)); - if (buffer) return context = null, buffer + "" || null; - } - - symbol.type = function(_) { - return arguments.length ? (type = typeof _ === "function" ? _ : constant$1(_), symbol) : type; - }; - - symbol.size = function(_) { - return arguments.length ? (size = typeof _ === "function" ? _ : constant$1(+_), symbol) : size; - }; - - symbol.context = function(_) { - return arguments.length ? (context = _ == null ? null : _, symbol) : context; - }; - - return symbol; -} - -function noop() {} - -function point(that, x, y) { - that._context.bezierCurveTo( - (2 * that._x0 + that._x1) / 3, - (2 * that._y0 + that._y1) / 3, - (that._x0 + 2 * that._x1) / 3, - (that._y0 + 2 * that._y1) / 3, - (that._x0 + 4 * that._x1 + x) / 6, - (that._y0 + 4 * that._y1 + y) / 6 - ); -} - -function Basis(context) { - this._context = context; -} - -Basis.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x0 = this._x1 = - this._y0 = this._y1 = NaN; - this._point = 0; - }, - lineEnd: function() { - switch (this._point) { - case 3: point(this, this._x1, this._y1); // proceed - case 2: this._context.lineTo(this._x1, this._y1); break; - } - if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; - case 1: this._point = 2; break; - case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed - default: point(this, x, y); break; - } - this._x0 = this._x1, this._x1 = x; - this._y0 = this._y1, this._y1 = y; - } -}; - -function curveBasis(context) { - return new Basis(context); -} - -function BasisClosed(context) { - this._context = context; -} - -BasisClosed.prototype = { - areaStart: noop, - areaEnd: noop, - lineStart: function() { - this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = - this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN; - this._point = 0; - }, - lineEnd: function() { - switch (this._point) { - case 1: { - this._context.moveTo(this._x2, this._y2); - this._context.closePath(); - break; - } - case 2: { - this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3); - this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3); - this._context.closePath(); - break; - } - case 3: { - this.point(this._x2, this._y2); - this.point(this._x3, this._y3); - this.point(this._x4, this._y4); - break; - } - } - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; this._x2 = x, this._y2 = y; break; - case 1: this._point = 2; this._x3 = x, this._y3 = y; break; - case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break; - default: point(this, x, y); break; - } - this._x0 = this._x1, this._x1 = x; - this._y0 = this._y1, this._y1 = y; - } -}; - -function curveBasisClosed(context) { - return new BasisClosed(context); -} - -function BasisOpen(context) { - this._context = context; -} - -BasisOpen.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x0 = this._x1 = - this._y0 = this._y1 = NaN; - this._point = 0; - }, - lineEnd: function() { - if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; break; - case 1: this._point = 2; break; - case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break; - case 3: this._point = 4; // proceed - default: point(this, x, y); break; - } - this._x0 = this._x1, this._x1 = x; - this._y0 = this._y1, this._y1 = y; - } -}; - -function curveBasisOpen(context) { - return new BasisOpen(context); -} - -function Bundle(context, beta) { - this._basis = new Basis(context); - this._beta = beta; -} - -Bundle.prototype = { - lineStart: function() { - this._x = []; - this._y = []; - this._basis.lineStart(); - }, - lineEnd: function() { - var x = this._x, - y = this._y, - j = x.length - 1; - - if (j > 0) { - var x0 = x[0], - y0 = y[0], - dx = x[j] - x0, - dy = y[j] - y0, - i = -1, - t; - - while (++i <= j) { - t = i / j; - this._basis.point( - this._beta * x[i] + (1 - this._beta) * (x0 + t * dx), - this._beta * y[i] + (1 - this._beta) * (y0 + t * dy) - ); - } - } - - this._x = this._y = null; - this._basis.lineEnd(); - }, - point: function(x, y) { - this._x.push(+x); - this._y.push(+y); - } -}; - -var curveBundle = (function custom(beta) { - - function bundle(context) { - return beta === 1 ? new Basis(context) : new Bundle(context, beta); - } - - bundle.beta = function(beta) { - return custom(+beta); - }; - - return bundle; -})(0.85); - -function point$1(that, x, y) { - that._context.bezierCurveTo( - that._x1 + that._k * (that._x2 - that._x0), - that._y1 + that._k * (that._y2 - that._y0), - that._x2 + that._k * (that._x1 - x), - that._y2 + that._k * (that._y1 - y), - that._x2, - that._y2 - ); -} - -function Cardinal(context, tension) { - this._context = context; - this._k = (1 - tension) / 6; -} - -Cardinal.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x0 = this._x1 = this._x2 = - this._y0 = this._y1 = this._y2 = NaN; - this._point = 0; - }, - lineEnd: function() { - switch (this._point) { - case 2: this._context.lineTo(this._x2, this._y2); break; - case 3: point$1(this, this._x1, this._y1); break; - } - if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; - case 1: this._point = 2; this._x1 = x, this._y1 = y; break; - case 2: this._point = 3; // proceed - default: point$1(this, x, y); break; - } - this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; - this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; - } -}; - -var curveCardinal = (function custom(tension) { - - function cardinal(context) { - return new Cardinal(context, tension); - } - - cardinal.tension = function(tension) { - return custom(+tension); - }; - - return cardinal; -})(0); - -function CardinalClosed(context, tension) { - this._context = context; - this._k = (1 - tension) / 6; -} - -CardinalClosed.prototype = { - areaStart: noop, - areaEnd: noop, - lineStart: function() { - this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = - this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN; - this._point = 0; - }, - lineEnd: function() { - switch (this._point) { - case 1: { - this._context.moveTo(this._x3, this._y3); - this._context.closePath(); - break; - } - case 2: { - this._context.lineTo(this._x3, this._y3); - this._context.closePath(); - break; - } - case 3: { - this.point(this._x3, this._y3); - this.point(this._x4, this._y4); - this.point(this._x5, this._y5); - break; - } - } - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; this._x3 = x, this._y3 = y; break; - case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break; - case 2: this._point = 3; this._x5 = x, this._y5 = y; break; - default: point$1(this, x, y); break; - } - this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; - this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; - } -}; - -var curveCardinalClosed = (function custom(tension) { - - function cardinal(context) { - return new CardinalClosed(context, tension); - } - - cardinal.tension = function(tension) { - return custom(+tension); - }; - - return cardinal; -})(0); - -function CardinalOpen(context, tension) { - this._context = context; - this._k = (1 - tension) / 6; -} - -CardinalOpen.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x0 = this._x1 = this._x2 = - this._y0 = this._y1 = this._y2 = NaN; - this._point = 0; - }, - lineEnd: function() { - if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; break; - case 1: this._point = 2; break; - case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break; - case 3: this._point = 4; // proceed - default: point$1(this, x, y); break; - } - this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; - this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; - } -}; - -var curveCardinalOpen = (function custom(tension) { - - function cardinal(context) { - return new CardinalOpen(context, tension); - } - - cardinal.tension = function(tension) { - return custom(+tension); - }; - - return cardinal; -})(0); - -function point$2(that, x, y) { - var x1 = that._x1, - y1 = that._y1, - x2 = that._x2, - y2 = that._y2; - - if (that._l01_a > epsilon$1) { - var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a, - n = 3 * that._l01_a * (that._l01_a + that._l12_a); - x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n; - y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n; - } - - if (that._l23_a > epsilon$1) { - var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a, - m = 3 * that._l23_a * (that._l23_a + that._l12_a); - x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m; - y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m; - } - - that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2); -} - -function CatmullRom(context, alpha) { - this._context = context; - this._alpha = alpha; -} - -CatmullRom.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x0 = this._x1 = this._x2 = - this._y0 = this._y1 = this._y2 = NaN; - this._l01_a = this._l12_a = this._l23_a = - this._l01_2a = this._l12_2a = this._l23_2a = - this._point = 0; - }, - lineEnd: function() { - switch (this._point) { - case 2: this._context.lineTo(this._x2, this._y2); break; - case 3: this.point(this._x2, this._y2); break; - } - if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - - if (this._point) { - var x23 = this._x2 - x, - y23 = this._y2 - y; - this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); - } - - switch (this._point) { - case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; - case 1: this._point = 2; break; - case 2: this._point = 3; // proceed - default: point$2(this, x, y); break; - } - - this._l01_a = this._l12_a, this._l12_a = this._l23_a; - this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; - this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; - this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; - } -}; - -var curveCatmullRom = (function custom(alpha) { - - function catmullRom(context) { - return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0); - } - - catmullRom.alpha = function(alpha) { - return custom(+alpha); - }; - - return catmullRom; -})(0.5); - -function CatmullRomClosed(context, alpha) { - this._context = context; - this._alpha = alpha; -} - -CatmullRomClosed.prototype = { - areaStart: noop, - areaEnd: noop, - lineStart: function() { - this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 = - this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN; - this._l01_a = this._l12_a = this._l23_a = - this._l01_2a = this._l12_2a = this._l23_2a = - this._point = 0; - }, - lineEnd: function() { - switch (this._point) { - case 1: { - this._context.moveTo(this._x3, this._y3); - this._context.closePath(); - break; - } - case 2: { - this._context.lineTo(this._x3, this._y3); - this._context.closePath(); - break; - } - case 3: { - this.point(this._x3, this._y3); - this.point(this._x4, this._y4); - this.point(this._x5, this._y5); - break; - } - } - }, - point: function(x, y) { - x = +x, y = +y; - - if (this._point) { - var x23 = this._x2 - x, - y23 = this._y2 - y; - this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); - } - - switch (this._point) { - case 0: this._point = 1; this._x3 = x, this._y3 = y; break; - case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break; - case 2: this._point = 3; this._x5 = x, this._y5 = y; break; - default: point$2(this, x, y); break; - } - - this._l01_a = this._l12_a, this._l12_a = this._l23_a; - this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; - this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; - this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; - } -}; - -var curveCatmullRomClosed = (function custom(alpha) { - - function catmullRom(context) { - return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0); - } - - catmullRom.alpha = function(alpha) { - return custom(+alpha); - }; - - return catmullRom; -})(0.5); - -function CatmullRomOpen(context, alpha) { - this._context = context; - this._alpha = alpha; -} - -CatmullRomOpen.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x0 = this._x1 = this._x2 = - this._y0 = this._y1 = this._y2 = NaN; - this._l01_a = this._l12_a = this._l23_a = - this._l01_2a = this._l12_2a = this._l23_2a = - this._point = 0; - }, - lineEnd: function() { - if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - - if (this._point) { - var x23 = this._x2 - x, - y23 = this._y2 - y; - this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha)); - } - - switch (this._point) { - case 0: this._point = 1; break; - case 1: this._point = 2; break; - case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break; - case 3: this._point = 4; // proceed - default: point$2(this, x, y); break; - } - - this._l01_a = this._l12_a, this._l12_a = this._l23_a; - this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a; - this._x0 = this._x1, this._x1 = this._x2, this._x2 = x; - this._y0 = this._y1, this._y1 = this._y2, this._y2 = y; - } -}; - -var curveCatmullRomOpen = (function custom(alpha) { - - function catmullRom(context) { - return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0); - } - - catmullRom.alpha = function(alpha) { - return custom(+alpha); - }; - - return catmullRom; -})(0.5); - -function LinearClosed(context) { - this._context = context; -} - -LinearClosed.prototype = { - areaStart: noop, - areaEnd: noop, - lineStart: function() { - this._point = 0; - }, - lineEnd: function() { - if (this._point) this._context.closePath(); - }, - point: function(x, y) { - x = +x, y = +y; - if (this._point) this._context.lineTo(x, y); - else this._point = 1, this._context.moveTo(x, y); - } -}; - -function curveLinearClosed(context) { - return new LinearClosed(context); -} - -function sign(x) { - return x < 0 ? -1 : 1; -} - -// Calculate the slopes of the tangents (Hermite-type interpolation) based on -// the following paper: Steffen, M. 1990. A Simple Method for Monotonic -// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO. -// NOV(II), P. 443, 1990. -function slope3(that, x2, y2) { - var h0 = that._x1 - that._x0, - h1 = x2 - that._x1, - s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0), - s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0), - p = (s0 * h1 + s1 * h0) / (h0 + h1); - return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0; -} - -// Calculate a one-sided slope. -function slope2(that, t) { - var h = that._x1 - that._x0; - return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t; -} - -// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations -// "you can express cubic Hermite interpolation in terms of cubic Bézier curves -// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1". -function point$3(that, t0, t1) { - var x0 = that._x0, - y0 = that._y0, - x1 = that._x1, - y1 = that._y1, - dx = (x1 - x0) / 3; - that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1); -} - -function MonotoneX(context) { - this._context = context; -} - -MonotoneX.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x0 = this._x1 = - this._y0 = this._y1 = - this._t0 = NaN; - this._point = 0; - }, - lineEnd: function() { - switch (this._point) { - case 2: this._context.lineTo(this._x1, this._y1); break; - case 3: point$3(this, this._t0, slope2(this, this._t0)); break; - } - if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); - this._line = 1 - this._line; - }, - point: function(x, y) { - var t1 = NaN; - - x = +x, y = +y; - if (x === this._x1 && y === this._y1) return; // Ignore coincident points. - switch (this._point) { - case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; - case 1: this._point = 2; break; - case 2: this._point = 3; point$3(this, slope2(this, t1 = slope3(this, x, y)), t1); break; - default: point$3(this, this._t0, t1 = slope3(this, x, y)); break; - } - - this._x0 = this._x1, this._x1 = x; - this._y0 = this._y1, this._y1 = y; - this._t0 = t1; - } -}; - -function MonotoneY(context) { - this._context = new ReflectContext(context); -} - -(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) { - MonotoneX.prototype.point.call(this, y, x); -}; - -function ReflectContext(context) { - this._context = context; -} - -ReflectContext.prototype = { - moveTo: function(x, y) { this._context.moveTo(y, x); }, - closePath: function() { this._context.closePath(); }, - lineTo: function(x, y) { this._context.lineTo(y, x); }, - bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); } -}; - -function monotoneX(context) { - return new MonotoneX(context); -} - -function monotoneY(context) { - return new MonotoneY(context); -} - -function Natural(context) { - this._context = context; -} - -Natural.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x = []; - this._y = []; - }, - lineEnd: function() { - var x = this._x, - y = this._y, - n = x.length; - - if (n) { - this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]); - if (n === 2) { - this._context.lineTo(x[1], y[1]); - } else { - var px = controlPoints(x), - py = controlPoints(y); - for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) { - this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]); - } - } - } - - if (this._line || (this._line !== 0 && n === 1)) this._context.closePath(); - this._line = 1 - this._line; - this._x = this._y = null; - }, - point: function(x, y) { - this._x.push(+x); - this._y.push(+y); - } -}; - -// See https://www.particleincell.com/2012/bezier-splines/ for derivation. -function controlPoints(x) { - var i, - n = x.length - 1, - m, - a = new Array(n), - b = new Array(n), - r = new Array(n); - a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1]; - for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1]; - a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n]; - for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1]; - a[n - 1] = r[n - 1] / b[n - 1]; - for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i]; - b[n - 1] = (x[n] + a[n - 1]) / 2; - for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1]; - return [a, b]; -} - -function curveNatural(context) { - return new Natural(context); -} - -function Step(context, t) { - this._context = context; - this._t = t; -} - -Step.prototype = { - areaStart: function() { - this._line = 0; - }, - areaEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._x = this._y = NaN; - this._point = 0; - }, - lineEnd: function() { - if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y); - if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath(); - if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line; - }, - point: function(x, y) { - x = +x, y = +y; - switch (this._point) { - case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break; - case 1: this._point = 2; // proceed - default: { - if (this._t <= 0) { - this._context.lineTo(this._x, y); - this._context.lineTo(x, y); - } else { - var x1 = this._x * (1 - this._t) + x * this._t; - this._context.lineTo(x1, this._y); - this._context.lineTo(x1, y); - } - break; - } - } - this._x = x, this._y = y; - } -}; - -function curveStep(context) { - return new Step(context, 0.5); -} - -function stepBefore(context) { - return new Step(context, 0); -} - -function stepAfter(context) { - return new Step(context, 1); -} - -var lookup = { - 'basis': { - curve: curveBasis - }, - 'basis-closed': { - curve: curveBasisClosed - }, - 'basis-open': { - curve: curveBasisOpen - }, - 'bundle': { - curve: curveBundle, - tension: 'beta', - value: 0.85 - }, - 'cardinal': { - curve: curveCardinal, - tension: 'tension', - value: 0 - }, - 'cardinal-open': { - curve: curveCardinalOpen, - tension: 'tension', - value: 0 - }, - 'cardinal-closed': { - curve: curveCardinalClosed, - tension: 'tension', - value: 0 - }, - 'catmull-rom': { - curve: curveCatmullRom, - tension: 'alpha', - value: 0.5 - }, - 'catmull-rom-closed': { - curve: curveCatmullRomClosed, - tension: 'alpha', - value: 0.5 - }, - 'catmull-rom-open': { - curve: curveCatmullRomOpen, - tension: 'alpha', - value: 0.5 - }, - 'linear': { - curve: curveLinear - }, - 'linear-closed': { - curve: curveLinearClosed - }, - 'monotone': { - horizontal: monotoneY, - vertical: monotoneX - }, - 'natural': { - curve: curveNatural - }, - 'step': { - curve: curveStep - }, - 'step-after': { - curve: stepAfter - }, - 'step-before': { - curve: stepBefore - } -}; - -function curves(type, orientation, tension) { - var entry = lookup.hasOwnProperty(type) && lookup[type], - curve = null; - - if (entry) { - curve = entry.curve || entry[orientation || 'vertical']; - if (entry.tension && tension != null) { - curve = curve[entry.tension](tension); - } - } - - return curve; -} - -// Path parsing and rendering code adapted from fabric.js -- Thanks! -var cmdlen = { m:2, l:2, h:1, v:1, c:6, s:4, q:4, t:2, a:7 }, - regexp = [/([MLHVCSQTAZmlhvcsqtaz])/g, /###/, /(\d)([-+])/g, /\s|,|###/]; - -function pathParse(pathstr) { - var result = [], - path, - curr, - chunks, - parsed, param, - cmd, len, i, j, n, m; - - // First, break path into command sequence - path = pathstr - .slice() - .replace(regexp[0], '###$1') - .split(regexp[1]) - .slice(1); - - // Next, parse each command in turn - for (i=0, n=path.length; i len) { - for (j=1, m=parsed.length; j 1) { - pl = Math.sqrt(pl); - rx *= pl; - ry *= pl; - } - - var a00 = cos_th / rx; - var a01 = sin_th / rx; - var a10 = (-sin_th) / ry; - var a11 = (cos_th) / ry; - var x0 = a00 * ox + a01 * oy; - var y0 = a10 * ox + a11 * oy; - var x1 = a00 * x + a01 * y; - var y1 = a10 * x + a11 * y; - - var d = (x1-x0) * (x1-x0) + (y1-y0) * (y1-y0); - var sfactor_sq = 1 / d - 0.25; - if (sfactor_sq < 0) sfactor_sq = 0; - var sfactor = Math.sqrt(sfactor_sq); - if (sweep == large) sfactor = -sfactor; - var xc = 0.5 * (x0 + x1) - sfactor * (y1-y0); - var yc = 0.5 * (y0 + y1) + sfactor * (x1-x0); - - var th0 = Math.atan2(y0-yc, x0-xc); - var th1 = Math.atan2(y1-yc, x1-xc); - - var th_arc = th1-th0; - if (th_arc < 0 && sweep === 1) { - th_arc += Tau; - } else if (th_arc > 0 && sweep === 0) { - th_arc -= Tau; - } - - var segs = Math.ceil(Math.abs(th_arc / (HalfPi + 0.001))); - var result = []; - for (var i=0; i circleThreshold) { - add$1(cx - r, cy - r); - add$1(cx + r, cy + r); - return; - } - - var xmin = Infinity, xmax = -Infinity, - ymin = Infinity, ymax = -Infinity, - s, i, x, y; - - function update(a) { - x = r * Math.cos(a); - y = r * Math.sin(a); - if (x < xmin) xmin = x; - if (x > xmax) xmax = x; - if (y < ymin) ymin = y; - if (y > ymax) ymax = y; - } - - // Sample end points and interior points aligned with 90 degrees - update(sa); - update(ea); - - if (ea !== sa) { - sa = sa % Tau; if (sa < 0) sa += Tau; - ea = ea % Tau; if (ea < 0) ea += Tau; - - if (ea < sa) { - ccw = !ccw; // flip direction - s = sa; sa = ea; ea = s; // swap end-points - } - - if (ccw) { - ea -= Tau; - s = sa - (sa % HalfPi); - for (i=0; i<4 && s>ea; ++i, s-=HalfPi) update(s); - } else { - s = sa - (sa % HalfPi) + HalfPi; - for (i=0; i<4 && s t1) return false; - else if (r > t0) t0 = r; - } else if (p > 0) { - if (r < t0) return false; - else if (r < t1) t1 = r; - } - } - - return true; -} - -function gradient(context, gradient, bounds) { - const w = bounds.width(), - h = bounds.height(), - stop = gradient.stops, - n = stop.length; - - const canvasGradient = gradient.gradient === 'radial' - ? context.createRadialGradient( - bounds.x1 + (gradient.x1 || 0.5) * w, - bounds.y1 + (gradient.y1 || 0.5) * h, - Math.max(w, h) * (gradient.r1 || 0), - bounds.x1 + (gradient.x2 || 0.5) * w, - bounds.y1 + (gradient.y2 || 0.5) * h, - Math.max(w, h) * (gradient.r2 || 0.5) - ) - : context.createLinearGradient( - bounds.x1 + (gradient.x1 || 0) * w, - bounds.y1 + (gradient.y1 || 0) * h, - bounds.x1 + (gradient.x2 || 1) * w, - bounds.y1 + (gradient.y2 || 0) * h - ); - - for (let i=0; i 0) { - context.globalAlpha = opacity; - context.fillStyle = color(context, item, item.fill); - return true; - } else { - return false; - } -} - -var Empty$1 = []; - -function stroke(context, item, opacity) { - var lw = (lw = item.strokeWidth) != null ? lw : 1; - - if (lw <= 0) return false; - - opacity *= (item.strokeOpacity==null ? 1 : item.strokeOpacity); - if (opacity > 0) { - context.globalAlpha = opacity; - context.strokeStyle = color(context, item, item.stroke); - - context.lineWidth = lw; - context.lineCap = item.strokeCap || 'butt'; - context.lineJoin = item.strokeJoin || 'miter'; - context.miterLimit = item.strokeMiterLimit || 10; - - if (context.setLineDash) { - context.setLineDash(item.strokeDash || Empty$1); - context.lineDashOffset = item.strokeDashOffset || 0; - } - return true; - } else { - return false; - } -} - -function compare$1(a, b) { - return a.zindex - b.zindex || a.index - b.index; -} - -function zorder(scene) { - if (!scene.zdirty) return scene.zitems; - - var items = scene.items, - output = [], item, i, n; - - for (i=0, n=items.length; i= 0;) { - if (hit = visitor(items[i])) return hit; - } - - if (items === zitems) { - for (items=scene.items, i=items.length; --i >= 0;) { - if (!items[i].zindex) { - if (hit = visitor(items[i])) return hit; - } - } - } - - return null; -} - -function drawAll(path) { - return function(context, scene, bounds) { - visit(scene, function(item) { - if (!bounds || bounds.intersects(item.bounds)) { - drawPath(path, context, item, item); - } - }); - }; -} - -function drawOne(path) { - return function(context, scene, bounds) { - if (scene.items.length && (!bounds || bounds.intersects(scene.bounds))) { - drawPath(path, context, scene.items[0], scene.items); - } - }; -} - -function drawPath(path, context, item, items) { - var opacity = item.opacity == null ? 1 : item.opacity; - if (opacity === 0) return; - - if (path(context, items)) return; - - if (item.fill && fill(context, item, opacity)) { - context.fill(); - } - - if (item.stroke && stroke(context, item, opacity)) { - context.stroke(); - } -} - -function pick(test) { - test = test || truthy; - - return function(context, scene, x, y, gx, gy) { - x *= context.pixelRatio; - y *= context.pixelRatio; - - return pickVisit(scene, function(item) { - var b = item.bounds; - // first hit test against bounding box - if ((b && !b.contains(gx, gy)) || !b) return; - // if in bounding box, perform more careful test - if (test(context, item, x, y, gx, gy)) return item; - }); - }; -} - -function hitPath(path, filled) { - return function(context, o, x, y) { - var item = Array.isArray(o) ? o[0] : o, - fill = (filled == null) ? item.fill : filled, - stroke = item.stroke && context.isPointInStroke, lw, lc; - - if (stroke) { - lw = item.strokeWidth; - lc = item.strokeCap; - context.lineWidth = lw != null ? lw : 1; - context.lineCap = lc != null ? lc : 'butt'; - } - - return path(context, o) ? false : - (fill && context.isPointInPath(x, y)) || - (stroke && context.isPointInStroke(x, y)); - }; -} - -function pickPath(path) { - return pick(hitPath(path)); -} - -function translate(x, y) { - return 'translate(' + x + ',' + y + ')'; -} - -function rotate(a) { - return 'rotate(' + a + ')'; -} - -function translateItem(item) { - return translate(item.x || 0, item.y || 0); -} - -function transformItem(item) { - return translate(item.x || 0, item.y || 0) - + (item.angle ? ' ' + rotate(item.angle) : ''); -} - -function markItemPath(type, shape, isect) { - - function attr(emit, item) { - emit('transform', transformItem(item)); - emit('d', shape(null, item)); - } - - function bound(bounds, item) { - var x = item.x || 0, - y = item.y || 0; - - shape(context(bounds), item); - boundStroke(bounds, item).translate(x, y); - if (item.angle) { - bounds.rotate(item.angle * DegToRad, x, y); - } - - return bounds; - } - - function draw(context, item) { - var x = item.x || 0, - y = item.y || 0, - a = item.angle || 0; - - context.translate(x, y); - if (a) context.rotate(a *= DegToRad); - context.beginPath(); - shape(context, item); - if (a) context.rotate(-a); - context.translate(-x, -y); - } - - return { - type: type, - tag: 'path', - nested: false, - attr: attr, - bound: bound, - draw: drawAll(draw), - pick: pickPath(draw), - isect: isect || intersectPath(draw) - }; - -} - -var arc$1 = markItemPath('arc', arc); - -function pickArea(a, p) { - var v = a[0].orient === 'horizontal' ? p[1] : p[0], - z = a[0].orient === 'horizontal' ? 'y' : 'x', - i = a.length, - min = +Infinity, hit, d; - - while (--i >= 0) { - if (a[i].defined === false) continue; - d = Math.abs(a[i][z] - v); - if (d < min) { - min = d; - hit = a[i]; - } - } - - return hit; -} - -function pickLine(a, p) { - var t = Math.pow(a[0].strokeWidth || 1, 2), - i = a.length, dx, dy, dd; - - while (--i >= 0) { - if (a[i].defined === false) continue; - dx = a[i].x - p[0]; - dy = a[i].y - p[1]; - dd = dx * dx + dy * dy; - if (dd < t) return a[i]; - } - - return null; -} - -function pickTrail(a, p) { - var i = a.length, dx, dy, dd; - - while (--i >= 0) { - if (a[i].defined === false) continue; - dx = a[i].x - p[0]; - dy = a[i].y - p[1]; - dd = dx * dx + dy * dy; - dx = a[i].size || 1; - if (dd < dx*dx) return a[i]; - } - - return null; -} - -function markMultiItemPath(type, shape, tip) { - - function attr(emit, item) { - var items = item.mark.items; - if (items.length) emit('d', shape(null, items)); - } - - function bound(bounds, mark) { - var items = mark.items; - if (items.length === 0) { - return bounds; - } else { - shape(context(bounds), items); - return boundStroke(bounds, items[0]); - } - } - - function draw(context, items) { - context.beginPath(); - shape(context, items); - } - - var hit = hitPath(draw); - - function pick(context, scene, x, y, gx, gy) { - var items = scene.items, - b = scene.bounds; - - if (!items || !items.length || b && !b.contains(gx, gy)) { - return null; - } - - x *= context.pixelRatio; - y *= context.pixelRatio; - return hit(context, items, x, y) ? items[0] : null; - } - - return { - type: type, - tag: 'path', - nested: true, - attr: attr, - bound: bound, - draw: drawOne(draw), - pick: pick, - isect: intersectPoint, - tip: tip - }; - -} - -var area$1 = markMultiItemPath('area', area, pickArea); - -var clip_id = 1; - -function clip(renderer, item, size) { - var clip = item.clip, - defs = renderer._defs, - id = item.clip_id || (item.clip_id = 'clip' + clip_id++), - c = defs.clipping[id] || (defs.clipping[id] = {id: id}); - - if (isFunction(clip)) { - c.path = clip(null); - } else { - c.width = size.width || 0; - c.height = size.height || 0; - } - - return 'url(#' + id + ')'; -} - -var StrokeOffset = 0.5; - -function attr(emit, item) { - emit('transform', translateItem(item)); -} - -function background(emit, item) { - var offset = item.stroke ? StrokeOffset : 0; - emit('class', 'background'); - emit('d', rectangle(null, item, offset, offset)); -} - -function foreground(emit, item, renderer) { - var url = item.clip ? clip(renderer, item, item) : null; - emit('clip-path', url); -} - -function bound(bounds, group) { - if (!group.clip && group.items) { - var items = group.items; - for (var j=0, m=items.length; j 0) { - backgroundPath(context, group); - if (group.fill && fill(context, group, opacity)) { - context.fill(); - } - if (group.stroke && stroke(context, group, opacity)) { - context.stroke(); - } - } - } - - // set clip and bounds - if (group.clip) { - context.beginPath(); - context.rect(0, 0, w, h); - context.clip(); - } - if (bounds) bounds.translate(-gx, -gy); - - // draw group contents - visit(group, function(item) { - renderer.draw(context, item, bounds); - }); - - // restore graphics context - if (bounds) bounds.translate(gx, gy); - context.restore(); - }); -} - -function pick$1(context, scene, x, y, gx, gy) { - if (scene.bounds && !scene.bounds.contains(gx, gy) || !scene.items) { - return null; - } - - var handler = this, - cx = x * context.pixelRatio, - cy = y * context.pixelRatio; - - return pickVisit(scene, function(group) { - var hit, dx, dy, b; - - // first hit test against bounding box - // if a group is clipped, that should be handled by the bounds check. - b = group.bounds; - if (b && !b.contains(gx, gy)) return; - - // passed bounds check, so test sub-groups - dx = (group.x || 0); - dy = (group.y || 0); - - context.save(); - context.translate(dx, dy); - - dx = gx - dx; - dy = gy - dy; - - // hit test against contained marks - hit = pickVisit(group, function(mark) { - return pickMark(mark, dx, dy) - ? handler.pick(mark, x, y, dx, dy) - : null; - }); - - // hit test against group background - if (!hit && scene.interactive !== false - && (group.fill || group.stroke) - && hitBackground(context, group, cx, cy)) { - hit = group; - } - - context.restore(); - return hit || null; - }); -} - -function pickMark(mark, x, y) { - return (mark.interactive !== false || mark.marktype === 'group') - && mark.bounds && mark.bounds.contains(x, y); -} - -var group = { - type: 'group', - tag: 'g', - nested: false, - attr: attr, - bound: bound, - draw: draw, - pick: pick$1, - isect: intersectRect, - background: background, - foreground: foreground -}; - -function getImage(item, renderer) { - var image = item.image; - if (!image || image.url !== item.url) { - image = {loaded: false, width: 0, height: 0}; - renderer.loadImage(item.url).then(function(image) { - item.image = image; - item.image.url = item.url; - }); - } - return image; -} - -function imageXOffset(align, w) { - return align === 'center' ? w / 2 : align === 'right' ? w : 0; -} - -function imageYOffset(baseline, h) { - return baseline === 'middle' ? h / 2 : baseline === 'bottom' ? h : 0; -} - -function attr$1(emit, item, renderer) { - var image = getImage(item, renderer), - x = item.x || 0, - y = item.y || 0, - w = (item.width != null ? item.width : image.width) || 0, - h = (item.height != null ? item.height : image.height) || 0, - a = item.aspect === false ? 'none' : 'xMidYMid'; - - x -= imageXOffset(item.align, w); - y -= imageYOffset(item.baseline, h); - - emit('href', image.src || '', 'http://www.w3.org/1999/xlink', 'xlink:href'); - emit('transform', translate(x, y)); - emit('width', w); - emit('height', h); - emit('preserveAspectRatio', a); -} - -function bound$1(bounds, item) { - var image = item.image, - x = item.x || 0, - y = item.y || 0, - w = (item.width != null ? item.width : (image && image.width)) || 0, - h = (item.height != null ? item.height : (image && image.height)) || 0; - - x -= imageXOffset(item.align, w); - y -= imageYOffset(item.baseline, h); - - return bounds.set(x, y, x + w, y + h); -} - -function draw$1(context, scene, bounds) { - var renderer = this; - - visit(scene, function(item) { - if (bounds && !bounds.intersects(item.bounds)) return; // bounds check - - var image = getImage(item, renderer), - x = item.x || 0, - y = item.y || 0, - w = (item.width != null ? item.width : image.width) || 0, - h = (item.height != null ? item.height : image.height) || 0, - opacity, ar0, ar1, t; - - x -= imageXOffset(item.align, w); - y -= imageYOffset(item.baseline, h); - - if (item.aspect !== false) { - ar0 = image.width / image.height; - ar1 = item.width / item.height; - if (ar0 === ar0 && ar1 === ar1 && ar0 !== ar1) { - if (ar1 < ar0) { - t = w / ar0; - y += (h - t) / 2; - h = t; - } else { - t = h * ar0; - x += (w - t) / 2; - w = t; - } - } - } - - if (image.loaded) { - context.globalAlpha = (opacity = item.opacity) != null ? opacity : 1; - context.drawImage(image, x, y, w, h); - } - }); -} - -var image$1 = { - type: 'image', - tag: 'image', - nested: false, - attr: attr$1, - bound: bound$1, - draw: draw$1, - pick: pick(), - isect: truthy, // bounds check is sufficient - get: getImage, - xOffset: imageXOffset, - yOffset: imageYOffset -}; - -var line$1 = markMultiItemPath('line', line, pickLine); - -function attr$2(emit, item) { - emit('transform', translateItem(item)); - emit('d', item.path); -} - -function path$1(context, item) { - var path = item.path; - if (path == null) return true; - - var cache = item.pathCache; - if (!cache || cache.path !== path) { - (item.pathCache = cache = pathParse(path)).path = path; - } - pathRender(context, cache, item.x, item.y); -} - -function bound$2(bounds, item) { - return path$1(context(bounds), item) - ? bounds.set(0, 0, 0, 0) - : boundStroke(bounds, item); -} - -var path$2 = { - type: 'path', - tag: 'path', - nested: false, - attr: attr$2, - bound: bound$2, - draw: drawAll(path$1), - pick: pickPath(path$1), - isect: intersectPath(path$1) -}; - -function attr$3(emit, item) { - emit('d', rectangle(null, item)); -} - -function bound$3(bounds, item) { - var x, y; - return boundStroke(bounds.set( - x = item.x || 0, - y = item.y || 0, - (x + item.width) || 0, - (y + item.height) || 0 - ), item); -} - -function draw$2(context, item) { - context.beginPath(); - rectangle(context, item); -} - -var rect = { - type: 'rect', - tag: 'path', - nested: false, - attr: attr$3, - bound: bound$3, - draw: drawAll(draw$2), - pick: pickPath(draw$2), - isect: intersectRect -}; - -function attr$4(emit, item) { - emit('transform', translateItem(item)); - emit('x2', item.x2 != null ? item.x2 - (item.x || 0) : 0); - emit('y2', item.y2 != null ? item.y2 - (item.y || 0) : 0); -} - -function bound$4(bounds, item) { - var x1, y1; - return boundStroke(bounds.set( - x1 = item.x || 0, - y1 = item.y || 0, - item.x2 != null ? item.x2 : x1, - item.y2 != null ? item.y2 : y1 - ), item); -} - -function path$3(context, item, opacity) { - var x1, y1, x2, y2; - - if (item.stroke && stroke(context, item, opacity)) { - x1 = item.x || 0; - y1 = item.y || 0; - x2 = item.x2 != null ? item.x2 : x1; - y2 = item.y2 != null ? item.y2 : y1; - context.beginPath(); - context.moveTo(x1, y1); - context.lineTo(x2, y2); - return true; - } - return false; -} - -function draw$3(context, scene, bounds) { - visit(scene, function(item) { - if (bounds && !bounds.intersects(item.bounds)) return; // bounds check - var opacity = item.opacity == null ? 1 : item.opacity; - if (opacity && path$3(context, item, opacity)) { - context.stroke(); - } - }); -} - -function hit(context, item, x, y) { - if (!context.isPointInStroke) return false; - return path$3(context, item, 1) && context.isPointInStroke(x, y); -} - -var rule = { - type: 'rule', - tag: 'line', - nested: false, - attr: attr$4, - bound: bound$4, - draw: draw$3, - pick: pick(hit), - isect: intersectRule -}; - -var shape$1 = markItemPath('shape', shape); - -var symbol$1 = markItemPath('symbol', symbol, intersectPoint); - -var currFontHeight; - -var textMetrics = { - height: fontSize, - measureWidth: measureWidth, - estimateWidth: estimateWidth, - width: estimateWidth, - canvas: useCanvas -}; - -useCanvas(true); - -// make dumb, simple estimate if no canvas is available -function estimateWidth(item) { - currFontHeight = fontSize(item); - return estimate(textValue(item)); -} - -function estimate(text) { - return ~~(0.8 * text.length * currFontHeight); -} - -// measure text width if canvas is available -function measureWidth(item) { - return fontSize(item) <= 0 ? 0 - : (context$1.font = font(item), measure$1(textValue(item))); -} - -function measure$1(text) { - return context$1.measureText(text).width; -} - -function fontSize(item) { - return item.fontSize != null ? item.fontSize : 11; -} - -function useCanvas(use) { - textMetrics.width = (use && context$1) ? measureWidth : estimateWidth; -} - -function textValue(item) { - var s = item.text; - if (s == null) { - return ''; - } else { - return item.limit > 0 ? truncate$1(item) : s + ''; - } -} - -function truncate$1(item) { - var limit = +item.limit, - text = item.text + '', - width; - - if (textMetrics.width === measureWidth) { - // we are using canvas - context$1.font = font(item); - width = measure$1; - } else { - // we are relying on estimates - currFontHeight = fontSize(item); - width = estimate; - } - - if (width(text) < limit) return text; - - var ellipsis = item.ellipsis || '\u2026', - rtl = item.dir === 'rtl', - lo = 0, - hi = text.length, mid; - - limit -= width(ellipsis); - - if (rtl) { - while (lo < hi) { - mid = (lo + hi >>> 1); - if (width(text.slice(mid)) > limit) lo = mid + 1; - else hi = mid; - } - return ellipsis + text.slice(lo); - } else { - while (lo < hi) { - mid = 1 + (lo + hi >>> 1); - if (width(text.slice(0, mid)) < limit) lo = mid; - else hi = mid - 1; - } - return text.slice(0, lo) + ellipsis; - } -} - -function fontFamily(item, quote) { - var font = item.font; - return (quote && font - ? String(font).replace(/"/g, '\'') - : font) || 'sans-serif'; -} - -function font(item, quote) { - return '' + - (item.fontStyle ? item.fontStyle + ' ' : '') + - (item.fontVariant ? item.fontVariant + ' ' : '') + - (item.fontWeight ? item.fontWeight + ' ' : '') + - fontSize(item) + 'px ' + - fontFamily(item, quote); -} - -function offset(item) { - // perform our own font baseline calculation - // why? not all browsers support SVG 1.1 'alignment-baseline' :( - var baseline = item.baseline, - h = fontSize(item); - return Math.round( - baseline === 'top' ? 0.79*h : - baseline === 'middle' ? 0.30*h : - baseline === 'bottom' ? -0.21*h : 0 - ); -} - -var textAlign = { - 'left': 'start', - 'center': 'middle', - 'right': 'end' -}; - -var tempBounds = new Bounds(); - -function anchorPoint(item) { - var x = item.x || 0, - y = item.y || 0, - r = item.radius || 0, t; - - if (r) { - t = (item.theta || 0) - HalfPi; - x += r * Math.cos(t); - y += r * Math.sin(t); - } - - tempBounds.x1 = x; - tempBounds.y1 = y; - return tempBounds; -} - -function attr$5(emit, item) { - var dx = item.dx || 0, - dy = (item.dy || 0) + offset(item), - p = anchorPoint(item), - x = p.x1, - y = p.y1, - a = item.angle || 0, t; - - emit('text-anchor', textAlign[item.align] || 'start'); - - if (a) { - t = translate(x, y) + ' ' + rotate(a); - if (dx || dy) t += ' ' + translate(dx, dy); - } else { - t = translate(x + dx, y + dy); - } - emit('transform', t); -} - -function bound$5(bounds, item, mode) { - var h = textMetrics.height(item), - a = item.align, - p = anchorPoint(item), - x = p.x1, - y = p.y1, - dx = item.dx || 0, - dy = (item.dy || 0) + offset(item) - Math.round(0.8*h), // use 4/5 offset - w; - - // horizontal alignment - w = textMetrics.width(item); - if (a === 'center') { - dx -= (w / 2); - } else if (a === 'right') { - dx -= w; - } - - bounds.set(dx+=x, dy+=y, dx+w, dy+h); - if (item.angle && !mode) { - bounds.rotate(item.angle * DegToRad, x, y); - } else if (mode === 2) { - return bounds.rotatedPoints(item.angle * DegToRad, x, y); - } - return bounds; -} - -function draw$4(context, scene, bounds) { - visit(scene, function(item) { - var opacity, p, x, y, str; - if (bounds && !bounds.intersects(item.bounds)) return; // bounds check - if (!(str = textValue(item))) return; // get text string - - opacity = item.opacity == null ? 1 : item.opacity; - if (opacity === 0 || item.fontSize <= 0) return; - - context.font = font(item); - context.textAlign = item.align || 'left'; - - p = anchorPoint(item); - x = p.x1, - y = p.y1; - - if (item.angle) { - context.save(); - context.translate(x, y); - context.rotate(item.angle * DegToRad); - x = y = 0; // reset x, y - } - x += (item.dx || 0); - y += (item.dy || 0) + offset(item); - - if (item.fill && fill(context, item, opacity)) { - context.fillText(str, x, y); - } - if (item.stroke && stroke(context, item, opacity)) { - context.strokeText(str, x, y); - } - if (item.angle) context.restore(); - }); -} - -function hit$1(context, item, x, y, gx, gy) { - if (item.fontSize <= 0) return false; - if (!item.angle) return true; // bounds sufficient if no rotation - - // project point into space of unrotated bounds - var p = anchorPoint(item), - ax = p.x1, - ay = p.y1, - b = bound$5(tempBounds, item, 1), - a = -item.angle * DegToRad, - cos = Math.cos(a), - sin = Math.sin(a), - px = cos * gx - sin * gy + (ax - cos * ax + sin * ay), - py = sin * gx + cos * gy + (ay - sin * ax - cos * ay); - - return b.contains(px, py); -} - -function intersectText(item, box) { - var p = bound$5(tempBounds, item, 2); - return intersectBoxLine(box, p[0], p[1], p[2], p[3]) - || intersectBoxLine(box, p[0], p[1], p[4], p[5]) - || intersectBoxLine(box, p[4], p[5], p[6], p[7]) - || intersectBoxLine(box, p[2], p[3], p[6], p[7]); -} - -var text = { - type: 'text', - tag: 'text', - nested: false, - attr: attr$5, - bound: bound$5, - draw: draw$4, - pick: pick(hit$1), - isect: intersectText -}; - -var trail$1 = markMultiItemPath('trail', trail, pickTrail); - -var Marks = { - arc: arc$1, - area: area$1, - group: group, - image: image$1, - line: line$1, - path: path$2, - rect: rect, - rule: rule, - shape: shape$1, - symbol: symbol$1, - text: text, - trail: trail$1 -}; - -function boundItem(item, func, opt) { - var type = Marks[item.mark.marktype], - bound = func || type.bound; - if (type.nested) item = item.mark; - - return bound(item.bounds || (item.bounds = new Bounds()), item, opt); -} - -var DUMMY = {mark: null}; - -function boundMark(mark, bounds, opt) { - var type = Marks[mark.marktype], - bound = type.bound, - items = mark.items, - hasItems = items && items.length, - i, n, item, b; - - if (type.nested) { - if (hasItems) { - item = items[0]; - } else { - // no items, fake it - DUMMY.mark = mark; - item = DUMMY; - } - b = boundItem(item, bound, opt); - bounds = bounds && bounds.union(b) || b; - return bounds; - } - - bounds = bounds - || mark.bounds && mark.bounds.clear() - || new Bounds(); - - if (hasItems) { - for (i=0, n=items.length; i index) el.removeChild(nodes[--curr]); - return el; -} - -// generate css class name for mark -function cssClass(mark) { - return 'mark-' + mark.marktype - + (mark.role ? ' role-' + mark.role : '') - + (mark.name ? ' ' + mark.name : ''); -} - -function point$4(event, el) { - var rect = el.getBoundingClientRect(); - return [ - event.clientX - rect.left - (el.clientLeft || 0), - event.clientY - rect.top - (el.clientTop || 0) - ]; -} - -function resolveItem(item, event, el, origin) { - var mark = item && item.mark, - mdef, p; - - if (mark && (mdef = Marks[mark.marktype]).tip) { - p = point$4(event, el); - p[0] -= origin[0]; - p[1] -= origin[1]; - while (item = item.mark.group) { - p[0] -= item.x || 0; - p[1] -= item.y || 0; - } - item = mdef.tip(mark.items, p); - } - - return item; -} - -/** - * Create a new Handler instance. - * @param {object} [customLoader] - Optional loader instance for - * href URL sanitization. If not specified, a standard loader - * instance will be generated. - * @param {function} [customTooltip] - Optional tooltip handler - * function for custom tooltip display. - * @constructor - */ -function Handler(customLoader, customTooltip) { - this._active = null; - this._handlers = {}; - this._loader = customLoader || loader(); - this._tooltip = customTooltip || defaultTooltip; -} - -// The default tooltip display handler. -// Sets the HTML title attribute on the visualization container. -function defaultTooltip(handler, event, item, value) { - handler.element().setAttribute('title', value || ''); -} - -var prototype$G = Handler.prototype; - -/** - * Initialize a new Handler instance. - * @param {DOMElement} el - The containing DOM element for the display. - * @param {Array} origin - The origin of the display, in pixels. - * The coordinate system will be translated to this point. - * @param {object} [obj] - Optional context object that should serve as - * the "this" context for event callbacks. - * @return {Handler} - This handler instance. - */ -prototype$G.initialize = function(el, origin, obj) { - this._el = el; - this._obj = obj || null; - return this.origin(origin); -}; - -/** - * Returns the parent container element for a visualization. - * @return {DOMElement} - The containing DOM element. - */ -prototype$G.element = function() { - return this._el; -}; - -/** - * Returns the scene element (e.g., canvas or SVG) of the visualization - * Subclasses must override if the first child is not the scene element. - * @return {DOMElement} - The scene (e.g., canvas or SVG) element. - */ -prototype$G.canvas = function() { - return this._el && this._el.firstChild; -}; - -/** - * Get / set the origin coordinates of the visualization. - */ -prototype$G.origin = function(origin) { - if (arguments.length) { - this._origin = origin || [0, 0]; - return this; - } else { - return this._origin.slice(); - } -}; - -/** - * Get / set the scenegraph root. - */ -prototype$G.scene = function(scene) { - if (!arguments.length) return this._scene; - this._scene = scene; - return this; -}; - -/** - * Add an event handler. Subclasses should override this method. - */ -prototype$G.on = function(/*type, handler*/) {}; - -/** - * Remove an event handler. Subclasses should override this method. - */ -prototype$G.off = function(/*type, handler*/) {}; - -/** - * Utility method for finding the array index of an event handler. - * @param {Array} h - An array of registered event handlers. - * @param {string} type - The event type. - * @param {function} handler - The event handler instance to find. - * @return {number} - The handler's array index or -1 if not registered. - */ -prototype$G._handlerIndex = function(h, type, handler) { - for (var i = h ? h.length : 0; --i>=0;) { - if (h[i].type === type && (!handler || h[i].handler === handler)) { - return i; - } - } - return -1; -}; - -/** - * Returns an array with registered event handlers. - * @param {string} [type] - The event type to query. Any annotations - * are ignored; for example, for the argument "click.foo", ".foo" will - * be ignored and the method returns all "click" handlers. If type is - * null or unspecified, this method returns handlers for all types. - * @return {Array} - A new array containing all registered event handlers. - */ -prototype$G.handlers = function(type) { - var h = this._handlers, a = [], k; - if (type) { - a.push.apply(a, h[this.eventName(type)]); - } else { - for (k in h) { a.push.apply(a, h[k]); } - } - return a; -}; - -/** - * Parses an event name string to return the specific event type. - * For example, given "click.foo" returns "click" - * @param {string} name - The input event type string. - * @return {string} - A string with the event type only. - */ -prototype$G.eventName = function(name) { - var i = name.indexOf('.'); - return i < 0 ? name : name.slice(0,i); -}; - -/** - * Handle hyperlink navigation in response to an item.href value. - * @param {Event} event - The event triggering hyperlink navigation. - * @param {Item} item - The scenegraph item. - * @param {string} href - The URL to navigate to. - */ -prototype$G.handleHref = function(event, item, href) { - this._loader - .sanitize(href, {context:'href'}) - .then(function(opt) { - var e = new MouseEvent(event.type, event), - a = domCreate(null, 'a'); - for (var name in opt) a.setAttribute(name, opt[name]); - a.dispatchEvent(e); - }) - .catch(function() { /* do nothing */ }); -}; - -/** - * Handle tooltip display in response to an item.tooltip value. - * @param {Event} event - The event triggering tooltip display. - * @param {Item} item - The scenegraph item. - * @param {boolean} show - A boolean flag indicating whether - * to show or hide a tooltip for the given item. - */ -prototype$G.handleTooltip = function(event, item, show) { - if (item && item.tooltip != null) { - item = resolveItem(item, event, this.canvas(), this._origin); - var value = (show && item && item.tooltip) || null; - this._tooltip.call(this._obj, this, event, item, value); - } -}; - -/** - * Returns the size of a scenegraph item and its position relative - * to the viewport. - * @param {Item} item - The scenegraph item. - * @return {object} - A bounding box object (compatible with the - * DOMRect type) consisting of x, y, width, heigh, top, left, - * right, and bottom properties. - */ -prototype$G.getItemBoundingClientRect = function(item) { - if (!(el = this.canvas())) return; - - var el, rect = el.getBoundingClientRect(), - origin = this._origin, - itemBounds = item.bounds, - x = itemBounds.x1 + origin[0] + rect.left, - y = itemBounds.y1 + origin[1] + rect.top, - w = itemBounds.width(), - h = itemBounds.height(); - - // translate coordinate for each parent group - while (item.mark && (item = item.mark.group)) { - x += item.x || 0; - y += item.y || 0; - } - - // return DOMRect-compatible bounding box - return { - x: x, - y: y, - width: w, - height: h, - left: x, - top: y, - right: x + w, - bottom: y + h - }; -}; - -/** - * Create a new Renderer instance. - * @param {object} [loader] - Optional loader instance for - * image and href URL sanitization. If not specified, a - * standard loader instance will be generated. - * @constructor - */ -function Renderer(loader) { - this._el = null; - this._bgcolor = null; - this._loader = new ResourceLoader(loader); -} - -var prototype$H = Renderer.prototype; - -/** - * Initialize a new Renderer instance. - * @param {DOMElement} el - The containing DOM element for the display. - * @param {number} width - The coordinate width of the display, in pixels. - * @param {number} height - The coordinate height of the display, in pixels. - * @param {Array} origin - The origin of the display, in pixels. - * The coordinate system will be translated to this point. - * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply - * the width and height to determine the final pixel size. - * @return {Renderer} - This renderer instance. - */ -prototype$H.initialize = function(el, width, height, origin, scaleFactor) { - this._el = el; - return this.resize(width, height, origin, scaleFactor); -}; - -/** - * Returns the parent container element for a visualization. - * @return {DOMElement} - The containing DOM element. - */ -prototype$H.element = function() { - return this._el; -}; - -/** - * Returns the scene element (e.g., canvas or SVG) of the visualization - * Subclasses must override if the first child is not the scene element. - * @return {DOMElement} - The scene (e.g., canvas or SVG) element. - */ -prototype$H.canvas = function() { - return this._el && this._el.firstChild; -}; - -/** - * Get / set the background color. - */ -prototype$H.background = function(bgcolor) { - if (arguments.length === 0) return this._bgcolor; - this._bgcolor = bgcolor; - return this; -}; - -/** - * Resize the display. - * @param {number} width - The new coordinate width of the display, in pixels. - * @param {number} height - The new coordinate height of the display, in pixels. - * @param {Array} origin - The new origin of the display, in pixels. - * The coordinate system will be translated to this point. - * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply - * the width and height to determine the final pixel size. - * @return {Renderer} - This renderer instance; - */ -prototype$H.resize = function(width, height, origin, scaleFactor) { - this._width = width; - this._height = height; - this._origin = origin || [0, 0]; - this._scale = scaleFactor || 1; - return this; -}; - -/** - * Report a dirty item whose bounds should be redrawn. - * This base class method does nothing. Subclasses that perform - * incremental should implement this method. - * @param {Item} item - The dirty item whose bounds should be redrawn. - */ -prototype$H.dirty = function(/*item*/) { -}; - -/** - * Render an input scenegraph, potentially with a set of dirty items. - * This method will perform an immediate rendering with available resources. - * The renderer may also need to perform image loading to perform a complete - * render. This process can lead to asynchronous re-rendering of the scene - * after this method returns. To receive notification when rendering is - * complete, use the renderAsync method instead. - * @param {object} scene - The root mark of a scenegraph to render. - * @return {Renderer} - This renderer instance. - */ -prototype$H.render = function(scene) { - var r = this; - - // bind arguments into a render call, and cache it - // this function may be subsequently called for async redraw - r._call = function() { r._render(scene); }; - - // invoke the renderer - r._call(); - - // clear the cached call for garbage collection - // async redraws will stash their own copy - r._call = null; - - return r; -}; - -/** - * Internal rendering method. Renderer subclasses should override this - * method to actually perform rendering. - * @param {object} scene - The root mark of a scenegraph to render. - */ -prototype$H._render = function(/*scene*/) { - // subclasses to override -}; - -/** - * Asynchronous rendering method. Similar to render, but returns a Promise - * that resolves when all rendering is completed. Sometimes a renderer must - * perform image loading to get a complete rendering. The returned - * Promise will not resolve until this process completes. - * @param {object} scene - The root mark of a scenegraph to render. - * @return {Promise} - A Promise that resolves when rendering is complete. - */ -prototype$H.renderAsync = function(scene) { - var r = this.render(scene); - return this._ready - ? this._ready.then(function() { return r; }) - : Promise.resolve(r); -}; - -/** - * Internal method for asynchronous resource loading. - * Proxies method calls to the ImageLoader, and tracks loading - * progress to invoke a re-render once complete. - * @param {string} method - The method name to invoke on the ImageLoader. - * @param {string} uri - The URI for the requested resource. - * @return {Promise} - A Promise that resolves to the requested resource. - */ -prototype$H._load = function(method, uri) { - var r = this, - p = r._loader[method](uri); - - if (!r._ready) { - // re-render the scene when loading completes - var call = r._call; - r._ready = r._loader.ready() - .then(function(redraw) { - if (redraw) call(); - r._ready = null; - }); - } - - return p; -}; - -/** - * Sanitize a URL to include as a hyperlink in the rendered scene. - * This method proxies a call to ImageLoader.sanitizeURL, but also tracks - * image loading progress and invokes a re-render once complete. - * @param {string} uri - The URI string to sanitize. - * @return {Promise} - A Promise that resolves to the sanitized URL. - */ -prototype$H.sanitizeURL = function(uri) { - return this._load('sanitizeURL', uri); -}; - -/** - * Requests an image to include in the rendered scene. - * This method proxies a call to ImageLoader.loadImage, but also tracks - * image loading progress and invokes a re-render once complete. - * @param {string} uri - The URI string of the image. - * @return {Promise} - A Promise that resolves to the loaded Image. - */ -prototype$H.loadImage = function(uri) { - return this._load('loadImage', uri); -}; - -var Events = [ - 'keydown', - 'keypress', - 'keyup', - 'dragenter', - 'dragleave', - 'dragover', - 'mousedown', - 'mouseup', - 'mousemove', - 'mouseout', - 'mouseover', - 'click', - 'dblclick', - 'wheel', - 'mousewheel', - 'touchstart', - 'touchmove', - 'touchend' -]; - -var TooltipShowEvent = 'mousemove'; - -var TooltipHideEvent = 'mouseout'; - -var HrefEvent = 'click'; - -function CanvasHandler(loader, tooltip) { - Handler.call(this, loader, tooltip); - this._down = null; - this._touch = null; - this._first = true; -} - -var prototype$I = inherits(CanvasHandler, Handler); - -prototype$I.initialize = function(el, origin, obj) { - // add event listeners - var canvas = this._canvas = el && domFind(el, 'canvas'); - if (canvas) { - var that = this; - this.events.forEach(function(type) { - canvas.addEventListener(type, function(evt) { - if (prototype$I[type]) { - prototype$I[type].call(that, evt); - } else { - that.fire(type, evt); - } - }); - }); - } - - return Handler.prototype.initialize.call(this, el, origin, obj); -}; - -// return the backing canvas instance -prototype$I.canvas = function() { - return this._canvas; -}; - -// retrieve the current canvas context -prototype$I.context = function() { - return this._canvas.getContext('2d'); -}; - -// supported events -prototype$I.events = Events; - -// to keep old versions of firefox happy -prototype$I.DOMMouseScroll = function(evt) { - this.fire('mousewheel', evt); -}; - -function move(moveEvent, overEvent, outEvent) { - return function(evt) { - var a = this._active, - p = this.pickEvent(evt); - - if (p === a) { - // active item and picked item are the same - this.fire(moveEvent, evt); // fire move - } else { - // active item and picked item are different - if (!a || !a.exit) { - // fire out for prior active item - // suppress if active item was removed from scene - this.fire(outEvent, evt); - } - this._active = p; // set new active item - this.fire(overEvent, evt); // fire over for new active item - this.fire(moveEvent, evt); // fire move for new active item - } - }; -} - -function inactive(type) { - return function(evt) { - this.fire(type, evt); - this._active = null; - }; -} - -prototype$I.mousemove = move('mousemove', 'mouseover', 'mouseout'); -prototype$I.dragover = move('dragover', 'dragenter', 'dragleave'); - -prototype$I.mouseout = inactive('mouseout'); -prototype$I.dragleave = inactive('dragleave'); - -prototype$I.mousedown = function(evt) { - this._down = this._active; - this.fire('mousedown', evt); -}; - -prototype$I.click = function(evt) { - if (this._down === this._active) { - this.fire('click', evt); - this._down = null; - } -}; - -prototype$I.touchstart = function(evt) { - this._touch = this.pickEvent(evt.changedTouches[0]); - - if (this._first) { - this._active = this._touch; - this._first = false; - } - - this.fire('touchstart', evt, true); -}; - -prototype$I.touchmove = function(evt) { - this.fire('touchmove', evt, true); -}; - -prototype$I.touchend = function(evt) { - this.fire('touchend', evt, true); - this._touch = null; -}; - -// fire an event -prototype$I.fire = function(type, evt, touch) { - var a = touch ? this._touch : this._active, - h = this._handlers[type], i, len; - - // set event type relative to scenegraph items - evt.vegaType = type; - - // handle hyperlinks and tooltips first - if (type === HrefEvent && a && a.href) { - this.handleHref(evt, a, a.href); - } else if (type === TooltipShowEvent || type === TooltipHideEvent) { - this.handleTooltip(evt, a, type !== TooltipHideEvent); - } - - // invoke all registered handlers - if (h) { - for (i=0, len=h.length; i= 0) { - h.splice(i, 1); - } - - return this; -}; - -prototype$I.pickEvent = function(evt) { - var p = point$4(evt, this._canvas), - o = this._origin; - return this.pick(this._scene, p[0], p[1], p[0] - o[0], p[1] - o[1]); -}; - -// find the scenegraph item at the current mouse position -// x, y -- the absolute x, y mouse coordinates on the canvas element -// gx, gy -- the relative coordinates within the current group -prototype$I.pick = function(scene, x, y, gx, gy) { - var g = this.context(), - mark = Marks[scene.marktype]; - return mark.pick.call(this, g, scene, x, y, gx, gy); -}; - -function clip$1(context, scene) { - var clip = scene.clip; - - context.save(); - context.beginPath(); - - if (isFunction(clip)) { - clip(context); - } else { - var group = scene.group; - context.rect(0, 0, group.width || 0, group.height || 0); - } - - context.clip(); -} - -function devicePixelRatio() { - return typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1; -} - -var pixelRatio = devicePixelRatio(); - -function resize(canvas, width, height, origin, scaleFactor, opt) { - var inDOM = typeof HTMLElement !== 'undefined' - && canvas instanceof HTMLElement - && canvas.parentNode != null; - - var context = canvas.getContext('2d'), - ratio = inDOM ? pixelRatio : scaleFactor, - key; - - canvas.width = width * ratio; - canvas.height = height * ratio; - - for (key in opt) { - context[key] = opt[key]; - } - - if (inDOM && ratio !== 1) { - canvas.style.width = width + 'px'; - canvas.style.height = height + 'px'; - } - - context.pixelRatio = ratio; - context.setTransform( - ratio, 0, 0, ratio, - ratio * origin[0], - ratio * origin[1] - ); - - return canvas; -} - -function CanvasRenderer(loader) { - Renderer.call(this, loader); - this._redraw = false; - this._dirty = new Bounds(); -} - -var prototype$J = inherits(CanvasRenderer, Renderer), - base = Renderer.prototype, - tempBounds$1 = new Bounds(); - -prototype$J.initialize = function(el, width, height, origin, scaleFactor, options) { - this._options = options; - this._canvas = canvas(1, 1, options && options.type); // instantiate a small canvas - - if (el) { - domClear(el, 0).appendChild(this._canvas); - this._canvas.setAttribute('class', 'marks'); - } - // this method will invoke resize to size the canvas appropriately - return base.initialize.call(this, el, width, height, origin, scaleFactor); -}; - -prototype$J.resize = function(width, height, origin, scaleFactor) { - base.resize.call(this, width, height, origin, scaleFactor); - resize(this._canvas, this._width, this._height, - this._origin, this._scale, this._options && this._options.context); - this._redraw = true; - return this; -}; - -prototype$J.canvas = function() { - return this._canvas; -}; - -prototype$J.context = function() { - return this._canvas ? this._canvas.getContext('2d') : null; -}; - -prototype$J.dirty = function(item) { - var b = translate$1(item.bounds, item.mark.group); - this._dirty.union(b); -}; - -function clipToBounds(g, b, origin) { - // expand bounds by 1 pixel, then round to pixel boundaries - b.expand(1).round(); - - // to avoid artifacts translate if origin has fractional pixels - b.translate(-(origin[0] % 1), -(origin[1] % 1)); - - // set clipping path - g.beginPath(); - g.rect(b.x1, b.y1, b.width(), b.height()); - g.clip(); - - return b; -} - -function translate$1(bounds, group) { - if (group == null) return bounds; - var b = tempBounds$1.clear().union(bounds); - for (; group != null; group = group.mark.group) { - b.translate(group.x || 0, group.y || 0); - } - return b; -} - -prototype$J._render = function(scene) { - var g = this.context(), - o = this._origin, - w = this._width, - h = this._height, - b = this._dirty; - - // setup - g.save(); - if (this._redraw || b.empty()) { - this._redraw = false; - b = null; - } else { - b = clipToBounds(g, b, o); - } - - this.clear(-o[0], -o[1], w, h); - - // render - this.draw(g, scene, b); - - // takedown - g.restore(); - - this._dirty.clear(); - return this; -}; - -prototype$J.draw = function(ctx, scene, bounds) { - var mark = Marks[scene.marktype]; - if (scene.clip) clip$1(ctx, scene); - mark.draw.call(this, ctx, scene, bounds); - if (scene.clip) ctx.restore(); -}; - -prototype$J.clear = function(x, y, w, h) { - var g = this.context(); - g.clearRect(x, y, w, h); - if (this._bgcolor != null) { - g.fillStyle = this._bgcolor; - g.fillRect(x, y, w, h); - } -}; - -function SVGHandler(loader, tooltip) { - Handler.call(this, loader, tooltip); - var h = this; - h._hrefHandler = listener(h, function(evt, item) { - if (item && item.href) h.handleHref(evt, item, item.href); - }); - h._tooltipHandler = listener(h, function(evt, item) { - h.handleTooltip(evt, item, evt.type !== TooltipHideEvent); - }); -} - -var prototype$K = inherits(SVGHandler, Handler); - -prototype$K.initialize = function(el, origin, obj) { - var svg = this._svg; - if (svg) { - svg.removeEventListener(HrefEvent, this._hrefHandler); - svg.removeEventListener(TooltipShowEvent, this._tooltipHandler); - svg.removeEventListener(TooltipHideEvent, this._tooltipHandler); - } - this._svg = svg = el && domFind(el, 'svg'); - if (svg) { - svg.addEventListener(HrefEvent, this._hrefHandler); - svg.addEventListener(TooltipShowEvent, this._tooltipHandler); - svg.addEventListener(TooltipHideEvent, this._tooltipHandler); - } - return Handler.prototype.initialize.call(this, el, origin, obj); -}; - -prototype$K.canvas = function() { - return this._svg; -}; - -// wrap an event listener for the SVG DOM -function listener(context, handler) { - return function(evt) { - var target = evt.target, - item = target.__data__; - evt.vegaType = evt.type; - item = Array.isArray(item) ? item[0] : item; - handler.call(context._obj, evt, item); - }; -} - -// add an event handler -prototype$K.on = function(type, handler) { - var name = this.eventName(type), - h = this._handlers, - i = this._handlerIndex(h[name], type, handler); - - if (i < 0) { - var x = { - type: type, - handler: handler, - listener: listener(this, handler) - }; - - (h[name] || (h[name] = [])).push(x); - if (this._svg) { - this._svg.addEventListener(name, x.listener); - } - } - - return this; -}; - -// remove an event handler -prototype$K.off = function(type, handler) { - var name = this.eventName(type), - h = this._handlers[name], - i = this._handlerIndex(h, type, handler); - - if (i >= 0) { - if (this._svg) { - this._svg.removeEventListener(name, h[i].listener); - } - h.splice(i, 1); - } - - return this; -}; - -// generate string for an opening xml tag -// tag: the name of the xml tag -// attr: hash of attribute name-value pairs to include -// raw: additional raw string to include in tag markup -function openTag(tag, attr, raw) { - var s = '<' + tag, key, val; - if (attr) { - for (key in attr) { - val = attr[key]; - if (val != null) { - s += ' ' + key + '="' + val + '"'; - } - } - } - if (raw) s += ' ' + raw; - return s + '>'; -} - -// generate string for closing xml tag -// tag: the name of the xml tag -function closeTag(tag) { - return ''; -} - -var metadata = { - 'version': '1.1', - 'xmlns': 'http://www.w3.org/2000/svg', - 'xmlns:xlink': 'http://www.w3.org/1999/xlink' -}; - -var styles = { - 'fill': 'fill', - 'fillOpacity': 'fill-opacity', - 'stroke': 'stroke', - 'strokeOpacity': 'stroke-opacity', - 'strokeWidth': 'stroke-width', - 'strokeCap': 'stroke-linecap', - 'strokeJoin': 'stroke-linejoin', - 'strokeDash': 'stroke-dasharray', - 'strokeDashOffset': 'stroke-dashoffset', - 'strokeMiterLimit': 'stroke-miterlimit', - 'opacity': 'opacity' -}; - -var styleProperties = Object.keys(styles); - -var ns = metadata.xmlns; - -function SVGRenderer(loader) { - Renderer.call(this, loader); - this._dirtyID = 1; - this._dirty = []; - this._svg = null; - this._root = null; - this._defs = null; -} - -var prototype$L = inherits(SVGRenderer, Renderer); -var base$1 = Renderer.prototype; - -prototype$L.initialize = function(el, width, height, padding) { - if (el) { - this._svg = domChild(el, 0, 'svg', ns); - this._svg.setAttribute('class', 'marks'); - domClear(el, 1); - // set the svg root group - this._root = domChild(this._svg, 0, 'g', ns); - domClear(this._svg, 1); - } - - // create the svg definitions cache - this._defs = { - gradient: {}, - clipping: {} - }; - - // set background color if defined - this.background(this._bgcolor); - - return base$1.initialize.call(this, el, width, height, padding); -}; - -prototype$L.background = function(bgcolor) { - if (arguments.length && this._svg) { - this._svg.style.setProperty('background-color', bgcolor); - } - return base$1.background.apply(this, arguments); -}; - -prototype$L.resize = function(width, height, origin, scaleFactor) { - base$1.resize.call(this, width, height, origin, scaleFactor); - - if (this._svg) { - this._svg.setAttribute('width', this._width * this._scale); - this._svg.setAttribute('height', this._height * this._scale); - this._svg.setAttribute('viewBox', '0 0 ' + this._width + ' ' + this._height); - this._root.setAttribute('transform', 'translate(' + this._origin + ')'); - } - - this._dirty = []; - - return this; -}; - -prototype$L.canvas = function() { - return this._svg; -}; - -prototype$L.svg = function() { - if (!this._svg) return null; - - var attr = { - class: 'marks', - width: this._width * this._scale, - height: this._height * this._scale, - viewBox: '0 0 ' + this._width + ' ' + this._height - }; - for (var key in metadata) { - attr[key] = metadata[key]; - } - - var bg = !this._bgcolor ? '' - : (openTag('rect', { - width: this._width, - height: this._height, - style: 'fill: ' + this._bgcolor + ';' - }) + closeTag('rect')); - - return openTag('svg', attr) + bg + this._svg.innerHTML + closeTag('svg'); -}; - - -// -- Render entry point -- - -prototype$L._render = function(scene) { - // perform spot updates and re-render markup - if (this._dirtyCheck()) { - if (this._dirtyAll) this._resetDefs(); - this.draw(this._root, scene); - domClear(this._root, 1); - } - - this.updateDefs(); - - this._dirty = []; - ++this._dirtyID; - - return this; -}; - -// -- Manage SVG definitions ('defs') block -- - -prototype$L.updateDefs = function() { - var svg = this._svg, - defs = this._defs, - el = defs.el, - index = 0, id; - - for (id in defs.gradient) { - if (!el) defs.el = (el = domChild(svg, 0, 'defs', ns)); - index = updateGradient(el, defs.gradient[id], index); - } - - for (id in defs.clipping) { - if (!el) defs.el = (el = domChild(svg, 0, 'defs', ns)); - index = updateClipping(el, defs.clipping[id], index); - } - - // clean-up - if (el) { - if (index === 0) { - svg.removeChild(el); - defs.el = null; - } else { - domClear(el, index); - } - } -}; - -function updateGradient(el, grad, index) { - var i, n, stop; - - if (grad.gradient === 'radial') { - // SVG radial gradients automatically transform to normalized bbox - // coordinates, in a way that is cumbersome to replicate in canvas. - // So we wrap the radial gradient in a pattern element, allowing us - // to mantain a circular gradient that matches what canvas provides. - var pt = domChild(el, index++, 'pattern', ns); - pt.setAttribute('id', patternPrefix + grad.id); - pt.setAttribute('viewBox', '0,0,1,1'); - pt.setAttribute('width', '100%'); - pt.setAttribute('height', '100%'); - pt.setAttribute('preserveAspectRatio', 'xMidYMid slice'); - - pt = domChild(pt, 0, 'rect', ns); - pt.setAttribute('width', '1'); - pt.setAttribute('height', '1'); - pt.setAttribute('fill', 'url(' + href() + '#' + grad.id + ')'); - - el = domChild(el, index++, 'radialGradient', ns); - el.setAttribute('id', grad.id); - el.setAttribute('fx', grad.x1); - el.setAttribute('fy', grad.y1); - el.setAttribute('fr', grad.r1); - el.setAttribute('cx', grad.x2); - el.setAttribute('cy', grad.y2); - el.setAttribute( 'r', grad.r2); - } else { - el = domChild(el, index++, 'linearGradient', ns); - el.setAttribute('id', grad.id); - el.setAttribute('x1', grad.x1); - el.setAttribute('x2', grad.x2); - el.setAttribute('y1', grad.y1); - el.setAttribute('y2', grad.y2); - } - - for (i=0, n=grad.stops.length; i 1; -} - - -// -- Set attributes & styles on SVG elements --- - -var element = null, // temp var for current SVG element - values = null; // temp var for current values hash - -// Extra configuration for certain mark types -var mark_extras = { - group: function(mdef, el, item) { - values = el.__values__; // use parent's values hash - - element = el.childNodes[1]; - mdef.foreground(emit, item, this); - - element = el.childNodes[0]; - mdef.background(emit, item, this); - - var value = item.mark.interactive === false ? 'none' : null; - if (value !== values.events) { - element.style.setProperty('pointer-events', value); - values.events = value; - } - }, - text: function(mdef, el, item) { - var value; - - value = textValue(item); - if (value !== values.text) { - el.textContent = value; - values.text = value; - } - - setStyle(el, 'font-family', fontFamily(item)); - setStyle(el, 'font-size', fontSize(item) + 'px'); - setStyle(el, 'font-style', item.fontStyle); - setStyle(el, 'font-variant', item.fontVariant); - setStyle(el, 'font-weight', item.fontWeight); - } -}; - -function setStyle(el, name, value) { - if (value !== values[name]) { - if (value == null) { - el.style.removeProperty(name); - } else { - el.style.setProperty(name, value + ''); - } - values[name] = value; - } -} - -prototype$L._update = function(mdef, el, item) { - // set dom element and values cache - // provides access to emit method - element = el; - values = el.__values__; - - // apply svg attributes - mdef.attr(emit, item, this); - - // some marks need special treatment - var extra = mark_extras[mdef.type]; - if (extra) extra.call(this, mdef, el, item); - - // apply svg css styles - // note: element may be modified by 'extra' method - this.style(element, item); -}; - -function emit(name, value, ns) { - // early exit if value is unchanged - if (value === values[name]) return; - - if (value != null) { - // if value is provided, update DOM attribute - if (ns) { - element.setAttributeNS(ns, name, value); - } else { - element.setAttribute(name, value); - } - } else { - // else remove DOM attribute - if (ns) { - element.removeAttributeNS(ns, name); - } else { - element.removeAttribute(name); - } - } - - // note current value for future comparison - values[name] = value; -} - -prototype$L.style = function(el, o) { - if (o == null) return; - var i, n, prop, name, value; - - for (i=0, n=styleProperties.length; i 0) ? openTag('defs') + defs + closeTag('defs') : ''; -}; - -var object$1; - -function emit$1(name, value, ns, prefixed) { - object$1[prefixed || name] = value; -} - -prototype$M.attributes = function(attr, item) { - object$1 = {}; - attr(emit$1, item, this); - return object$1; -}; - -prototype$M.href = function(item) { - var that = this, - href = item.href, - attr; - - if (href) { - if (attr = that._hrefs && that._hrefs[href]) { - return attr; - } else { - that.sanitizeURL(href).then(function(attr) { - // rewrite to use xlink namespace - // note that this will be deprecated in SVG 2.0 - attr['xlink:href'] = attr.href; - attr.href = null; - (that._hrefs || (that._hrefs = {}))[href] = attr; - }); - } - } - return null; -}; - -prototype$M.mark = function(scene) { - var renderer = this, - mdef = Marks[scene.marktype], - tag = mdef.tag, - defs = this._defs, - str = '', - style; - - if (tag !== 'g' && scene.interactive === false) { - style = 'style="pointer-events: none;"'; - } - - // render opening group tag - str += openTag('g', { - 'class': cssClass(scene), - 'clip-path': scene.clip ? clip(renderer, scene, scene.group) : null - }, style); - - // render contained elements - function process(item) { - var href = renderer.href(item); - if (href) str += openTag('a', href); - - style = (tag !== 'g') ? applyStyles(item, scene, tag, defs) : null; - str += openTag(tag, renderer.attributes(mdef.attr, item), style); - - if (tag === 'text') { - str += escape_text(textValue(item)); - } else if (tag === 'g') { - str += openTag('path', renderer.attributes(mdef.background, item), - applyStyles(item, scene, 'bgrect', defs)) + closeTag('path'); - - str += openTag('g', renderer.attributes(mdef.foreground, item)) - + renderer.markGroup(item) - + closeTag('g'); - } - - str += closeTag(tag); - if (href) str += closeTag('a'); - } - - if (mdef.nested) { - if (scene.items && scene.items.length) process(scene.items[0]); - } else { - visit(scene, process); - } - - // render closing group tag - return str + closeTag('g'); -}; - -prototype$M.markGroup = function(scene) { - var renderer = this, - str = ''; - - visit(scene, function(item) { - str += renderer.mark(item); - }); - - return str; -}; - -function applyStyles(o, mark, tag, defs) { - if (o == null) return ''; - var i, n, prop, name, value, s = ''; - - if (tag === 'bgrect' && mark.interactive === false) { - s += 'pointer-events: none; '; - } - - if (tag === 'text') { - s += 'font-family: ' + fontFamily(o) + '; '; - s += 'font-size: ' + fontSize(o) + 'px; '; - if (o.fontStyle) s += 'font-style: ' + o.fontStyle + '; '; - if (o.fontVariant) s += 'font-variant: ' + o.fontVariant + '; '; - if (o.fontWeight) s += 'font-weight: ' + o.fontWeight + '; '; - } - - for (i=0, n=styleProperties.length; i/g, '>'); -} - -var Canvas = 'canvas'; -var PNG = 'png'; -var SVG = 'svg'; -var None$2 = 'none'; - -var RenderType = { - Canvas: Canvas, - PNG: PNG, - SVG: SVG, - None: None$2 -}; - -var modules = {}; - -modules[Canvas] = modules[PNG] = { - renderer: CanvasRenderer, - headless: CanvasRenderer, - handler: CanvasHandler -}; - -modules[SVG] = { - renderer: SVGRenderer, - headless: SVGStringRenderer, - handler: SVGHandler -}; - -modules[None$2] = {}; - -function renderModule(name, _) { - name = String(name || '').toLowerCase(); - if (arguments.length > 1) { - modules[name] = _; - return this; - } else { - return modules[name]; - } -} - -function intersect$1(scene, bounds, filter) { - const hits = [], // intersection results - box = new Bounds().union(bounds), // defensive copy - type = scene.marktype; - - return type ? intersectMark(scene, box, filter, hits) - : type === 'group' ? intersectGroup(scene, box, filter, hits) - : error('Intersect scene must be mark node or group item.'); -} - -function intersectMark(mark, box, filter, hits) { - if (visitMark(mark, box, filter)) { - const items = mark.items, - type = mark.marktype, - n = items.length; - - let i = 0; - - if (type === 'group') { - for (; i re-bound all items - // updates group bounds in response to modified group content - pulse.visit(pulse.MOD, function(item) { view.dirty(item); }); - markBounds.clear(); - mark.items.forEach(function(item) { - markBounds.union(boundItem$1(item, bound)); - }); - - // force reflow for legends to propagate any layout changes - // suppress other types to prevent overall layout jumpiness - if (mark.role === LegendRole) pulse.reflow(); - } - - else { - // incrementally update bounds, re-bound mark as needed - rebound = pulse.changed(pulse.REM); - - pulse.visit(pulse.ADD, function(item) { - markBounds.union(boundItem$1(item, bound)); - }); - - pulse.visit(pulse.MOD, function(item) { - rebound = rebound || markBounds.alignsWith(item.bounds); - view.dirty(item); - markBounds.union(boundItem$1(item, bound)); - }); - - if (rebound) { - markBounds.clear(); - mark.items.forEach(function(item) { markBounds.union(item.bounds); }); - } - } - - // ensure mark bounds do not exceed any clipping region - boundClip(mark); - - return pulse.modifies('bounds'); -}; - -function boundItem$1(item, bound, opt) { - return bound(item.bounds.clear(), item, opt); -} - -var COUNTER_NAME = ':vega_identifier:'; - -/** - * Adds a unique identifier to all added tuples. - * This transform creates a new signal that serves as an id counter. - * As a result, the id counter is shared across all instances of this - * transform, generating unique ids across multiple data streams. In - * addition, this signal value can be included in a snapshot of the - * dataflow state, enabling correct resumption of id allocation. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {string} params.as - The field name for the generated identifier. - */ -function Identifier(params) { - Transform.call(this, 0, params); -} - -Identifier.Definition = { - "type": "Identifier", - "metadata": {"modifies": true}, - "params": [ - { "name": "as", "type": "string", "required": true } - ] -}; - -var prototype$O = inherits(Identifier, Transform); - -prototype$O.transform = function(_, pulse) { - var counter = getCounter(pulse.dataflow), - id = counter.value, - as = _.as; - - pulse.visit(pulse.ADD, function(t) { - if (!t[as]) t[as] = ++id; - }); - - counter.set(this.value = id); - return pulse; -}; - -function getCounter(view) { - var counter = view._signals[COUNTER_NAME]; - if (!counter) { - view._signals[COUNTER_NAME] = (counter = view.add(0)); - } - return counter; -} - -/** - * Bind scenegraph items to a scenegraph mark instance. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {object} params.markdef - The mark definition for creating the mark. - * This is an object of legal scenegraph mark properties which *must* include - * the 'marktype' property. - */ -function Mark(params) { - Transform.call(this, null, params); -} - -var prototype$P = inherits(Mark, Transform); - -prototype$P.transform = function(_, pulse) { - var mark = this.value; - - // acquire mark on first invocation, bind context and group - if (!mark) { - mark = pulse.dataflow.scenegraph().mark(_.markdef, lookup$1(_), _.index); - mark.group.context = _.context; - if (!_.context.group) _.context.group = mark.group; - mark.source = this; - mark.clip = _.clip; - mark.interactive = _.interactive; - this.value = mark; - } - - // initialize entering items - var Init = mark.marktype === Group ? GroupItem : Item; - pulse.visit(pulse.ADD, function(item) { Init.call(item, mark); }); - - // update clipping and/or interactive status - if (_.modified('clip') || _.modified('interactive')) { - mark.clip = _.clip; - mark.interactive = !!_.interactive; - mark.zdirty = true; // force scenegraph re-eval - pulse.reflow(); - } - - // bind items array to scenegraph mark - mark.items = pulse.source; - return pulse; -}; - -function lookup$1(_) { - var g = _.groups, p = _.parent; - return g && g.size === 1 ? g.get(Object.keys(g.object)[0]) - : g && p ? g.lookup(p) - : null; -} - -/** - * Analyze items for overlap, changing opacity to hide items with - * overlapping bounding boxes. This transform will preserve at least - * two items (e.g., first and last) even if overlap persists. - * @param {object} params - The parameters for this operator. - * @param {function(*,*): number} [params.sort] - A comparator - * function for sorting items. - * @param {object} [params.method] - The overlap removal method to apply. - * One of 'parity' (default, hide every other item until there is no - * more overlap) or 'greedy' (sequentially scan and hide and items that - * overlap with the last visible item). - * @param {object} [params.boundScale] - A scale whose range should be used - * to bound the items. Items exceeding the bounds of the scale range - * will be treated as overlapping. If null or undefined, no bounds check - * will be applied. - * @param {object} [params.boundOrient] - The orientation of the scale - * (top, bottom, left, or right) used to bound items. This parameter is - * ignored if boundScale is null or undefined. - * @param {object} [params.boundTolerance] - The tolerance in pixels for - * bound inclusion testing (default 1). This specifies by how many pixels - * an item's bounds may exceed the scale range bounds and not be culled. - * @constructor - */ -function Overlap(params) { - Transform.call(this, null, params); -} - -var prototype$Q = inherits(Overlap, Transform); - -var methods = { - parity: function(items) { - return items.filter((item, i) => i % 2 ? (item.opacity = 0) : 1); - }, - greedy: function(items, sep) { - var a; - return items.filter((b, i) => { - if (!i || !intersect$2(a.bounds, b.bounds, sep)) { - a = b; - return 1; - } else { - return b.opacity = 0; - } - }); - } -}; - -// compute bounding box intersection -// including padding pixels of separation -function intersect$2(a, b, sep) { - return sep > Math.max( - b.x1 - a.x2, - a.x1 - b.x2, - b.y1 - a.y2, - a.y1 - b.y2 - ); -} - -function hasOverlap(items, pad) { - for (var i=1, n=items.length, a=items[0].bounds, b; i 1 && b.height() > 1; -} - -function boundTest(scale, orient, tolerance) { - var range = scale.range(), - b = new Bounds(); - - if (orient === Top || orient === Bottom) { - b.set(range[0], -Infinity, range[1], +Infinity); - } else { - b.set(-Infinity, range[0], +Infinity, range[1]); - } - b.expand(tolerance || 1); - - return item => b.encloses(item.bounds); -} - -// reset all items to be fully opaque -function reset(source) { - source.forEach(item => item.opacity = 1); - return source; -} - -// add all tuples to mod, fork pulse if parameters were modified -// fork prevents cross-stream tuple pollution (e.g., pulse from scale) -function reflow(pulse, _) { - return pulse.reflow(_.modified()).modifies('opacity'); -} - -prototype$Q.transform = function(_, pulse) { - var reduce = methods[_.method] || methods.parity, - source = pulse.materialize(pulse.SOURCE).source, - sep = _.separation || 0, - items, test, bounds; - - if (!source || !source.length) return; - - if (!_.method) { - // early exit if method is falsy - if (_.modified('method')) { - reset(source); - pulse = reflow(pulse, _); - } - return pulse; - } - - if (_.sort) { - source = source.slice().sort(_.sort); - } - - // skip labels with no content - source = source.filter(hasBounds); - - items = reset(source); - pulse = reflow(pulse, _); - - if (items.length >= 3 && hasOverlap(items, sep)) { - do { - items = reduce(items, sep); - } while (items.length >= 3 && hasOverlap(items, sep)); - - if (items.length < 3 && !peek(source).opacity) { - if (items.length > 1) peek(items).opacity = 0; - peek(source).opacity = 1; - } - } - - if (_.boundScale && _.boundTolerance >= 0) { - test = boundTest(_.boundScale, _.boundOrient, +_.boundTolerance); - source.forEach(item => { - if (!test(item)) item.opacity = 0; - }); - } - - // re-calculate mark bounds - bounds = items[0].mark.bounds.clear(); - source.forEach(item => { - if (item.opacity) bounds.union(item.bounds); - }); - - return pulse; -}; - -/** - * Queue modified scenegraph items for rendering. - * @constructor - */ -function Render(params) { - Transform.call(this, null, params); -} - -var prototype$R = inherits(Render, Transform); - -prototype$R.transform = function(_, pulse) { - var view = pulse.dataflow; - - pulse.visit(pulse.ALL, function(item) { view.dirty(item); }); - - // set z-index dirty flag as needed - if (pulse.fields && pulse.fields['zindex']) { - var item = pulse.source && pulse.source[0]; - if (item) item.mark.zdirty = true; - } -}; - -const tempBounds$2 = new Bounds(); - -function set(item, property, value) { - return item[property] === value ? 0 - : (item[property] = value, 1); -} - -const AxisOffset = 0.5; - -function isYAxis(mark) { - var orient = mark.items[0].datum.orient; - return orient === Left || orient === Right; -} - -function axisIndices(datum) { - var index = +datum.grid; - return [ - datum.ticks ? index++ : -1, // ticks index - datum.labels ? index++ : -1, // labels index - index + (+datum.domain) // title index - ]; -} - -function axisLayout(view, axis, width, height) { - var item = axis.items[0], - datum = item.datum, - orient = datum.orient, - indices = axisIndices(datum), - range = item.range, - offset = item.offset, - position = item.position, - minExtent = item.minExtent, - maxExtent = item.maxExtent, - title = datum.title && item.items[indices[2]].items[0], - titlePadding = item.titlePadding, - bounds = item.bounds, - x = 0, y = 0, i, s; - - tempBounds$2.clear().union(bounds); - bounds.clear(); - if ((i=indices[0]) > -1) bounds.union(item.items[i].bounds); - if ((i=indices[1]) > -1) bounds.union(item.items[i].bounds); - - // position axis group and title - switch (orient) { - case Top: - x = position || 0; - y = -offset; - s = Math.max(minExtent, Math.min(maxExtent, -bounds.y1)); - if (title) s = axisTitleLayout(title, s, titlePadding, 0, -1, bounds); - bounds.add(0, -s).add(range, 0); - break; - case Left: - x = -offset; - y = position || 0; - s = Math.max(minExtent, Math.min(maxExtent, -bounds.x1)); - if (title) s = axisTitleLayout(title, s, titlePadding, 1, -1, bounds); - bounds.add(-s, 0).add(0, range); - break; - case Right: - x = width + offset; - y = position || 0; - s = Math.max(minExtent, Math.min(maxExtent, bounds.x2)); - if (title) s = axisTitleLayout(title, s, titlePadding, 1, 1, bounds); - bounds.add(0, 0).add(s, range); - break; - case Bottom: - x = position || 0; - y = height + offset; - s = Math.max(minExtent, Math.min(maxExtent, bounds.y2)); - if (title) s = axisTitleLayout(title, s, titlePadding, 0, 1, bounds); - bounds.add(0, 0).add(range, s); - break; - default: - x = item.x; - y = item.y; - } - - // update bounds - boundStroke(bounds.translate(x, y), item); - - if (set(item, 'x', x + AxisOffset) | set(item, 'y', y + AxisOffset)) { - item.bounds = tempBounds$2; - view.dirty(item); - item.bounds = bounds; - view.dirty(item); - } - - return item.mark.bounds.clear().union(bounds); -} - -function axisTitleLayout(title, offset, pad, isYAxis, sign, bounds) { - var b = title.bounds, dx = 0, dy = 0; - - if (title.auto) { - offset += pad; - - isYAxis - ? dx = (title.x || 0) - (title.x = sign * offset) - : dy = (title.y || 0) - (title.y = sign * offset); - - b.translate(-dx, -dy); - title.mark.bounds.set(b.x1, b.y1, b.x2, b.y2); - - if (isYAxis) { - bounds.add(0, b.y1).add(0, b.y2); - offset += b.width(); - } else { - bounds.add(b.x1, 0).add(b.x2, 0); - offset += b.height(); - } - } else { - bounds.union(b); - } - - return offset; -} - -function gridLayoutGroups(group) { - var groups = group.items, - n = groups.length, - i = 0, mark, items; - - var views = { - marks: [], - rowheaders: [], - rowfooters: [], - colheaders: [], - colfooters: [], - rowtitle: null, - coltitle: null - }; - - // layout axes, gather legends, collect bounds - for (; i 1) { - for (i=0; i 0) dx[i] += x / 2; - } - } - - // perform vertical centering - if (alignRow && get$2(opt.center, Row) && ncols !== 1) { - for (i=0; i 0) dy[i] += y / 2; - } - } - - // position grid relative to anchor - for (i=0; i limit) { - view.warn('Grid headers exceed limit: ' + limit); - headers = headers.slice(0, limit); - } - - // apply offset - init += offset; - - // clear mark bounds for all headers - for (j=0, m=headers.length; j= 0 && (g = groups[k]) == null; k-=back); - - // assign coordinates and update bounds - if (isX) { - x = band == null ? g.x : Math.round(g.bounds.x1 + band * g.bounds.width()); - y = init; - } else { - x = init; - y = band == null ? g.y : Math.round(g.bounds.y1 + band * g.bounds.height()); - } - b.union(h.bounds.translate(x - (h.x || 0), y - (h.y || 0))); - h.x = x; - h.y = y; - view.dirty(h); - - // update current edge of layout bounds - edge = agg(edge, b[bf]); - } - - return edge; -} - -function layoutTitle(view, g, offset, isX, bounds, band) { - if (!g) return; - view.dirty(g); - - // compute title coordinates - var x = offset, y = offset; - isX - ? (x = Math.round(bounds.x1 + band * bounds.width())) - : (y = Math.round(bounds.y1 + band * bounds.height())); - - // assign coordinates and update bounds - g.bounds.translate(x - (g.x || 0), y - (g.y || 0)); - g.mark.bounds.clear().union(g.bounds); - g.x = x; - g.y = y; - - // queue title for redraw - view.dirty(g); -} - -// utility for looking up legend layout configuration -function lookup$2(config, orient) { - const opt = config[orient] || {}; - return (key, d) => opt[key] != null ? opt[key] - : config[key] != null ? config[key] - : d; -} - -// if legends specify offset directly, use the maximum specified value -function offsets(legends, value) { - var max = -Infinity; - legends.forEach(item => { - if (item.offset != null) max = Math.max(max, item.offset); - }); - return max > -Infinity ? max : value; -} - -function legendParams(g, orient, config, xb, yb, w, h) { - const _ = lookup$2(config, orient), - offset = offsets(g, _('offset', 0)), - anchor = _('anchor', Start), - mult = anchor === End ? 1 : anchor === Middle ? 0.5 : 0; - - const p = { - align: Each, - bounds: _('bounds', Flush), - columns: _('direction') === 'vertical' ? 1 : g.length, - padding: _('margin', 8), - center: _('center'), - nodirty: true - }; - - switch (orient) { - case Left: - p.anchor = { - x: Math.floor(xb.x1) - offset, column: End, - y: mult * (h || xb.height() + 2 * xb.y1), row: anchor - }; - break; - case Right: - p.anchor = { - x: Math.ceil(xb.x2) + offset, - y: mult * (h || xb.height() + 2 * xb.y1), row: anchor - }; - break; - case Top: - p.anchor = { - y: Math.floor(yb.y1) - offset, row: End, - x: mult * (w || yb.width() + 2 * yb.x1), column: anchor - }; - break; - case Bottom: - p.anchor = { - y: Math.ceil(yb.y2) + offset, - x: mult * (w || yb.width() + 2 * yb.x1), column: anchor - }; - break; - case TopLeft: - p.anchor = {x: offset, y: offset}; - break; - case TopRight: - p.anchor = {x: w - offset, y: offset, column: End}; - break; - case BottomLeft: - p.anchor = {x: offset, y: h - offset, row: End}; - break; - case BottomRight: - p.anchor = {x: w - offset, y: h - offset, column: End, row: End}; - break; - } - - return p; -} - -function legendLayout(view, legend) { - var item = legend.items[0], - datum = item.datum, - orient = item.orient, - bounds = item.bounds, - x = item.x, y = item.y, w, h; - - // cache current bounds for later comparison - item._bounds - ? item._bounds.clear().union(bounds) - : item._bounds = bounds.clone(); - bounds.clear(); - - // adjust legend to accommodate padding and title - legendGroupLayout(view, item, item.items[0].items[0]); - - // aggregate bounds to determine size, and include origin - bounds = legendBounds(item, bounds); - w = 2 * item.padding; - h = 2 * item.padding; - if (!bounds.empty()) { - w = Math.ceil(bounds.width() + w); - h = Math.ceil(bounds.height() + h); - } - - if (datum.type === Symbols) { - legendEntryLayout(item.items[0].items[0].items[0].items); - } - - if (orient !== None$1) { - item.x = x = 0; - item.y = y = 0; - } - item.width = w; - item.height = h; - boundStroke(bounds.set(x, y, x + w, y + h), item); - item.mark.bounds.clear().union(bounds); - - return item; -} - -function legendBounds(item, b) { - // aggregate item bounds - item.items.forEach(_ => b.union(_.bounds)); - - // anchor to legend origin - b.x1 = item.padding; - b.y1 = item.padding; - - return b; -} - -function legendGroupLayout(view, item, entry) { - var pad = item.padding, - ex = pad - entry.x, - ey = pad - entry.y; - - if (!item.datum.title) { - if (ex || ey) translate$2(view, entry, ex, ey); - } else { - var title = item.items[1].items[0], - anchor = title.anchor, - tpad = item.titlePadding || 0, - tx = pad - title.x, - ty = pad - title.y; - - switch (title.orient) { - case Left: - ex += Math.ceil(title.bounds.width()) + tpad; - break; - case Right: - case Bottom: - break; - default: - ey += title.fontSize + tpad; - } - if (ex || ey) translate$2(view, entry, ex, ey); - - switch (title.orient) { - case Left: - ty += legendTitleOffset(item, entry, title, anchor, 0, 1); - break; - case Right: - tx += legendTitleOffset(item, entry, title, End, 1, 0) + tpad; - ty += legendTitleOffset(item, entry, title, anchor, 0, 1); - break; - case Bottom: - tx += legendTitleOffset(item, entry, title, anchor, 1, 0); - ty += legendTitleOffset(item, entry, title, End, 0, 0, 1) + tpad; - break; - default: - tx += legendTitleOffset(item, entry, title, anchor, 1, 0); - } - if (tx || ty) translate$2(view, title, tx, ty); - - // translate legend if title pushes into negative coordinates - if ((tx = Math.round(title.bounds.x1 - pad)) < 0) { - translate$2(view, entry, -tx, 0); - translate$2(view, title, -tx, 0); - } - } -} - -function legendTitleOffset(item, entry, title, anchor, x, lr, noBar) { - const grad = item.datum.type !== 'symbol', - vgrad = title.datum.vgrad, - e = grad && (lr || !vgrad) && !noBar ? entry.items[0] : entry, - s = e.bounds[x ? 'x2' : 'y2'] - item.padding, - u = vgrad && lr ? s : 0, - v = vgrad && lr ? 0 : s; - - return Math.round(anchor === Start ? u : anchor === End ? v : 0.5 * s); -} - -function translate$2(view, item, dx, dy) { - item.x += dx; - item.y += dy; - item.bounds.translate(dx, dy); - item.mark.bounds.translate(dx, dy); - view.dirty(item); -} - -function legendEntryLayout(entries) { - // get max widths for each column - var widths = entries.reduce(function(w, g) { - w[g.column] = Math.max(g.bounds.x2 - g.x, w[g.column] || 0); - return w; - }, {}); - - // set dimensions of legend entry groups - entries.forEach(function(g) { - g.width = widths[g.column]; - g.height = g.bounds.y2 - g.y; - }); -} - -function titleLayout(view, title, width, height, viewBounds) { - var item = title.items[0], - frame = item.frame, - orient = item.orient, - anchor = item.anchor, - offset = item.offset, - bounds = item.bounds, - vertical = (orient === Left || orient === Right), - start = 0, - end = vertical ? height : width, - x = 0, y = 0, pos; - - if (frame !== Group) { - orient === Left ? (start = viewBounds.y2, end = viewBounds.y1) - : orient === Right ? (start = viewBounds.y1, end = viewBounds.y2) - : (start = viewBounds.x1, end = viewBounds.x2); - } else if (orient === Left) { - start = height, end = 0; - } - - pos = (anchor === Start) ? start - : (anchor === End) ? end - : (start + end) / 2; - - tempBounds$2.clear().union(bounds); - - // position title text - switch (orient) { - case Top: - x = pos; - y = viewBounds.y1 - offset; - break; - case Left: - x = viewBounds.x1 - offset; - y = pos; - break; - case Right: - x = viewBounds.x2 + offset; - y = pos; - break; - case Bottom: - x = pos; - y = viewBounds.y2 + offset; - break; - default: - x = item.x; - y = item.y; - } - - bounds.translate(x - (item.x || 0), y - (item.y || 0)); - if (set(item, 'x', x) | set(item, 'y', y)) { - item.bounds = tempBounds$2; - view.dirty(item); - item.bounds = bounds; - view.dirty(item); - } - - // update bounds - return title.bounds.clear().union(bounds); -} - -/** - * Layout view elements such as axes and legends. - * Also performs size adjustments. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {object} params.mark - Scenegraph mark of groups to layout. - */ -function ViewLayout(params) { - Transform.call(this, null, params); -} - -var prototype$S = inherits(ViewLayout, Transform); - -prototype$S.transform = function(_, pulse) { - // TODO incremental update, output? - var view = pulse.dataflow; - _.mark.items.forEach(function(group) { - if (_.layout) trellisLayout(view, group, _.layout); - layoutGroup(view, group, _); - }); - if (_.modified()) pulse.reflow(); - return pulse; -}; - -function layoutGroup(view, group, _) { - var items = group.items, - width = Math.max(0, group.width || 0), - height = Math.max(0, group.height || 0), - viewBounds = new Bounds().set(0, 0, width, height), - xBounds = viewBounds.clone(), - yBounds = viewBounds.clone(), - legends = [], title, - mark, orient, b, i, n; - - // layout axes, gather legends, collect bounds - for (i=0, n=items.length; i { - orient = item.orient || Right; - if (orient !== None$1) (l[orient] || (l[orient] = [])).push(item); - }); - - // perform grid layout for each orient group - for (let orient in l) { - const g = l[orient]; - gridLayout(view, g, legendParams( - g, orient, _.legends, xBounds, yBounds, width, height - )); - } - - // update view bounds - legends.forEach(item => { - const b = item.bounds; - - if (!b.equals(item._bounds)) { - item.bounds = item._bounds; - view.dirty(item); // dirty previous location - item.bounds = b; - view.dirty(item); - } - - if (_.autosize && _.autosize.type === Fit) { - // For autosize fit, incorporate the orthogonal dimension only. - // Legends that overrun the chart area will then be clipped; - // otherwise the chart area gets reduced to nothing! - switch(item.orient) { - case Left: - case Right: - viewBounds.add(b.x1, 0).add(b.x2, 0); - break; - case Top: - case Bottom: - viewBounds.add(0, b.y1).add(0, b.y2); - } - } else { - viewBounds.union(b); - } - }); - } - - // combine bounding boxes - viewBounds.union(xBounds).union(yBounds); - - // layout title, adjust bounds - if (title) { - viewBounds.union(titleLayout(view, title, width, height, viewBounds)); - } - - // perform size adjustment - viewSizeLayout(view, group, viewBounds, _); -} - -function viewSizeLayout(view, group, viewBounds, _) { - var auto = _.autosize || {}, - type = auto.type, - viewWidth = view._width, - viewHeight = view._height, - padding = view.padding(); - - if (view._autosize < 1 || !type) return; - - var width = Math.max(0, group.width || 0), - left = Math.max(0, Math.ceil(-viewBounds.x1)), - right = Math.max(0, Math.ceil(viewBounds.x2 - width)), - height = Math.max(0, group.height || 0), - top = Math.max(0, Math.ceil(-viewBounds.y1)), - bottom = Math.max(0, Math.ceil(viewBounds.y2 - height)); - - if (auto.contains === Padding) { - viewWidth -= padding.left + padding.right; - viewHeight -= padding.top + padding.bottom; - } - - if (type === None$1) { - left = 0; - top = 0; - width = viewWidth; - height = viewHeight; - } - - else if (type === Fit) { - width = Math.max(0, viewWidth - left - right); - height = Math.max(0, viewHeight - top - bottom); - } - - else if (type === FitX) { - width = Math.max(0, viewWidth - left - right); - viewHeight = height + top + bottom; - } - - else if (type === FitY) { - viewWidth = width + left + right; - height = Math.max(0, viewHeight - top - bottom); - } - - else if (type === Pad) { - viewWidth = width + left + right; - viewHeight = height + top + bottom; - } - - view._resizeView( - viewWidth, viewHeight, - width, height, - [left, top], - auto.resize - ); -} - - - -var vtx = /*#__PURE__*/Object.freeze({ - bound: Bound, - identifier: Identifier, - mark: Mark, - overlap: Overlap, - render: Render, - viewlayout: ViewLayout -}); - -function bandSpace(count, paddingInner, paddingOuter) { - var space = count - paddingInner + paddingOuter * 2; - return count ? (space > 0 ? space : 1) : 0; -} - -const Identity = 'identity'; - -const Linear$1 = 'linear'; -const Log = 'log'; -const Pow = 'pow'; -const Sqrt = 'sqrt'; -const Symlog = 'symlog'; - -const Time = 'time'; -const UTC = 'utc'; - -const Sequential = 'sequential'; -const Diverging = 'diverging'; - -const Quantile = 'quantile'; -const Quantize = 'quantize'; -const Threshold = 'threshold'; - -const Ordinal = 'ordinal'; -const Point = 'point'; -const Band = 'band'; -const BinOrdinal = 'bin-ordinal'; - -function isSequential(key) { - return key && key.startsWith(Sequential); -} - -function isDiverging(key) { - return key && key.startsWith(Diverging); -} - -function isInterpolating(key) { - return isSequential(key) || isDiverging(key); -} - -function isLogarithmic(key) { - return key === Log || key.endsWith('-log'); -} - -function isContinuous(key) { - switch (key) { - case Linear$1: - case Log: - case Pow: - case Sqrt: - case Symlog: - case Time: - case UTC: - case Sequential: - return true; - } - return false; -} - -var time = { - millisecond: millisecond, - second: second, - minute: minute, - hour: hour, - day: day, - week: sunday, - month: month, - year: year -}; - -var utc = { - millisecond: millisecond, - second: second, - minute: utcMinute, - hour: utcHour, - day: utcDay, - week: utcSunday, - month: utcMonth, - year: utcYear -}; - -function timeInterval(unit, type) { - const t = (type === UTC ? utc : time); - return t.hasOwnProperty(unit) && t[unit]; -} - -function invertRange(scale) { - return function(_) { - var lo = _[0], - hi = _[1], - t; - - if (hi < lo) { - t = lo; - lo = hi; - hi = t; - } - - return [ - scale.invert(lo), - scale.invert(hi) - ]; - } -} - -function invertRangeExtent(scale) { - return function(_) { - var range = scale.range(), - lo = _[0], - hi = _[1], - min = -1, max, t, i, n; - - if (hi < lo) { - t = lo; - lo = hi; - hi = t; - } - - for (i=0, n=range.length; i= lo && range[i] <= hi) { - if (min < 0) min = i; - max = i; - } - } - - if (min < 0) return undefined; - - lo = scale.invertExtent(range[min]); - hi = scale.invertExtent(range[max]); - - return [ - lo[0] === undefined ? lo[1] : lo[0], - hi[1] === undefined ? hi[0] : hi[1] - ]; - } -} - -function ascending$3(a, b) { - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; -} - -function bisector$3(compare) { - if (compare.length === 1) compare = ascendingComparator$3(compare); - return { - left: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) < 0) lo = mid + 1; - else hi = mid; - } - return lo; - }, - right: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) > 0) hi = mid; - else lo = mid + 1; - } - return lo; - } - }; -} - -function ascendingComparator$3(f) { - return function(d, x) { - return ascending$3(f(d), x); - }; -} - -var ascendingBisect$3 = bisector$3(ascending$3); -var bisectRight = ascendingBisect$3.right; - -function sequence(start, stop, step) { - start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step; - - var i = -1, - n = Math.max(0, Math.ceil((stop - start) / step)) | 0, - range = new Array(n); - - while (++i < n) { - range[i] = start + i * step; - } - - return range; -} - -function ascending$4(a, b) { - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; -} - -function bisector$4(compare) { - if (compare.length === 1) compare = ascendingComparator$4(compare); - return { - left: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) < 0) lo = mid + 1; - else hi = mid; - } - return lo; - }, - right: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) > 0) hi = mid; - else lo = mid + 1; - } - return lo; - } - }; -} - -function ascendingComparator$4(f) { - return function(d, x) { - return ascending$4(f(d), x); - }; -} - -var ascendingBisect$4 = bisector$4(ascending$4); -var bisectRight$1 = ascendingBisect$4.right; - -var e10 = Math.sqrt(50), - e5 = Math.sqrt(10), - e2 = Math.sqrt(2); - -function ticks(start, stop, count) { - var reverse, - i = -1, - n, - ticks, - step; - - stop = +stop, start = +start, count = +count; - if (start === stop && count > 0) return [start]; - if (reverse = stop < start) n = start, start = stop, stop = n; - if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return []; - - if (step > 0) { - start = Math.ceil(start / step); - stop = Math.floor(stop / step); - ticks = new Array(n = Math.ceil(stop - start + 1)); - while (++i < n) ticks[i] = (start + i) * step; - } else { - start = Math.floor(start * step); - stop = Math.ceil(stop * step); - ticks = new Array(n = Math.ceil(start - stop + 1)); - while (++i < n) ticks[i] = (start - i) / step; - } - - if (reverse) ticks.reverse(); - - return ticks; -} - -function tickIncrement(start, stop, count) { - var step = (stop - start) / Math.max(0, count), - power = Math.floor(Math.log(step) / Math.LN10), - error = step / Math.pow(10, power); - return power >= 0 - ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power) - : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1); -} - -function tickStep(start, stop, count) { - var step0 = Math.abs(stop - start) / Math.max(0, count), - step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)), - error = step0 / step1; - if (error >= e10) step1 *= 10; - else if (error >= e5) step1 *= 5; - else if (error >= e2) step1 *= 2; - return stop < start ? -step1 : step1; -} - -function number$2(x) { - return x === null ? NaN : +x; -} - -function quantile$2(values, p, valueof = number$2) { - if (!(n = values.length)) return; - if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values); - if (p >= 1) return +valueof(values[n - 1], n - 1, values); - var n, - i = (n - 1) * p, - i0 = Math.floor(i), - value0 = +valueof(values[i0], i0, values), - value1 = +valueof(values[i0 + 1], i0 + 1, values); - return value0 + (value1 - value0) * (i - i0); -} - -function initRange(domain, range) { - switch (arguments.length) { - case 0: break; - case 1: this.range(domain); break; - default: this.range(range).domain(domain); break; - } - return this; -} - -function initInterpolator(domain, interpolator) { - switch (arguments.length) { - case 0: break; - case 1: this.interpolator(domain); break; - default: this.interpolator(interpolator).domain(domain); break; - } - return this; -} - -const implicit = Symbol("implicit"); - -function ordinal() { - var index = new Map(), - domain = [], - range = [], - unknown = implicit; - - function scale(d) { - var key = d + "", i = index.get(key); - if (!i) { - if (unknown !== implicit) return unknown; - index.set(key, i = domain.push(d)); - } - return range[(i - 1) % range.length]; - } - - scale.domain = function(_) { - if (!arguments.length) return domain.slice(); - domain = [], index = new Map(); - for (const value of _) { - const key = value + ""; - if (index.has(key)) continue; - index.set(key, domain.push(value)); - } - return scale; - }; - - scale.range = function(_) { - return arguments.length ? (range = Array.from(_), scale) : range.slice(); - }; - - scale.unknown = function(_) { - return arguments.length ? (unknown = _, scale) : unknown; - }; - - scale.copy = function() { - return ordinal(domain, range).unknown(unknown); - }; - - initRange.apply(scale, arguments); - - return scale; -} - -function define(constructor, factory, prototype) { - constructor.prototype = factory.prototype = prototype; - prototype.constructor = constructor; -} - -function extend$1(parent, definition) { - var prototype = Object.create(parent.prototype); - for (var key in definition) prototype[key] = definition[key]; - return prototype; -} - -function Color() {} - -var darker = 0.7; -var brighter = 1 / darker; - -var reI = "\\s*([+-]?\\d+)\\s*", - reN = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*", - reP = "\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*", - reHex3 = /^#([0-9a-f]{3})$/, - reHex6 = /^#([0-9a-f]{6})$/, - reRgbInteger = new RegExp("^rgb\\(" + [reI, reI, reI] + "\\)$"), - reRgbPercent = new RegExp("^rgb\\(" + [reP, reP, reP] + "\\)$"), - reRgbaInteger = new RegExp("^rgba\\(" + [reI, reI, reI, reN] + "\\)$"), - reRgbaPercent = new RegExp("^rgba\\(" + [reP, reP, reP, reN] + "\\)$"), - reHslPercent = new RegExp("^hsl\\(" + [reN, reP, reP] + "\\)$"), - reHslaPercent = new RegExp("^hsla\\(" + [reN, reP, reP, reN] + "\\)$"); - -var named = { - aliceblue: 0xf0f8ff, - antiquewhite: 0xfaebd7, - aqua: 0x00ffff, - aquamarine: 0x7fffd4, - azure: 0xf0ffff, - beige: 0xf5f5dc, - bisque: 0xffe4c4, - black: 0x000000, - blanchedalmond: 0xffebcd, - blue: 0x0000ff, - blueviolet: 0x8a2be2, - brown: 0xa52a2a, - burlywood: 0xdeb887, - cadetblue: 0x5f9ea0, - chartreuse: 0x7fff00, - chocolate: 0xd2691e, - coral: 0xff7f50, - cornflowerblue: 0x6495ed, - cornsilk: 0xfff8dc, - crimson: 0xdc143c, - cyan: 0x00ffff, - darkblue: 0x00008b, - darkcyan: 0x008b8b, - darkgoldenrod: 0xb8860b, - darkgray: 0xa9a9a9, - darkgreen: 0x006400, - darkgrey: 0xa9a9a9, - darkkhaki: 0xbdb76b, - darkmagenta: 0x8b008b, - darkolivegreen: 0x556b2f, - darkorange: 0xff8c00, - darkorchid: 0x9932cc, - darkred: 0x8b0000, - darksalmon: 0xe9967a, - darkseagreen: 0x8fbc8f, - darkslateblue: 0x483d8b, - darkslategray: 0x2f4f4f, - darkslategrey: 0x2f4f4f, - darkturquoise: 0x00ced1, - darkviolet: 0x9400d3, - deeppink: 0xff1493, - deepskyblue: 0x00bfff, - dimgray: 0x696969, - dimgrey: 0x696969, - dodgerblue: 0x1e90ff, - firebrick: 0xb22222, - floralwhite: 0xfffaf0, - forestgreen: 0x228b22, - fuchsia: 0xff00ff, - gainsboro: 0xdcdcdc, - ghostwhite: 0xf8f8ff, - gold: 0xffd700, - goldenrod: 0xdaa520, - gray: 0x808080, - green: 0x008000, - greenyellow: 0xadff2f, - grey: 0x808080, - honeydew: 0xf0fff0, - hotpink: 0xff69b4, - indianred: 0xcd5c5c, - indigo: 0x4b0082, - ivory: 0xfffff0, - khaki: 0xf0e68c, - lavender: 0xe6e6fa, - lavenderblush: 0xfff0f5, - lawngreen: 0x7cfc00, - lemonchiffon: 0xfffacd, - lightblue: 0xadd8e6, - lightcoral: 0xf08080, - lightcyan: 0xe0ffff, - lightgoldenrodyellow: 0xfafad2, - lightgray: 0xd3d3d3, - lightgreen: 0x90ee90, - lightgrey: 0xd3d3d3, - lightpink: 0xffb6c1, - lightsalmon: 0xffa07a, - lightseagreen: 0x20b2aa, - lightskyblue: 0x87cefa, - lightslategray: 0x778899, - lightslategrey: 0x778899, - lightsteelblue: 0xb0c4de, - lightyellow: 0xffffe0, - lime: 0x00ff00, - limegreen: 0x32cd32, - linen: 0xfaf0e6, - magenta: 0xff00ff, - maroon: 0x800000, - mediumaquamarine: 0x66cdaa, - mediumblue: 0x0000cd, - mediumorchid: 0xba55d3, - mediumpurple: 0x9370db, - mediumseagreen: 0x3cb371, - mediumslateblue: 0x7b68ee, - mediumspringgreen: 0x00fa9a, - mediumturquoise: 0x48d1cc, - mediumvioletred: 0xc71585, - midnightblue: 0x191970, - mintcream: 0xf5fffa, - mistyrose: 0xffe4e1, - moccasin: 0xffe4b5, - navajowhite: 0xffdead, - navy: 0x000080, - oldlace: 0xfdf5e6, - olive: 0x808000, - olivedrab: 0x6b8e23, - orange: 0xffa500, - orangered: 0xff4500, - orchid: 0xda70d6, - palegoldenrod: 0xeee8aa, - palegreen: 0x98fb98, - paleturquoise: 0xafeeee, - palevioletred: 0xdb7093, - papayawhip: 0xffefd5, - peachpuff: 0xffdab9, - peru: 0xcd853f, - pink: 0xffc0cb, - plum: 0xdda0dd, - powderblue: 0xb0e0e6, - purple: 0x800080, - rebeccapurple: 0x663399, - red: 0xff0000, - rosybrown: 0xbc8f8f, - royalblue: 0x4169e1, - saddlebrown: 0x8b4513, - salmon: 0xfa8072, - sandybrown: 0xf4a460, - seagreen: 0x2e8b57, - seashell: 0xfff5ee, - sienna: 0xa0522d, - silver: 0xc0c0c0, - skyblue: 0x87ceeb, - slateblue: 0x6a5acd, - slategray: 0x708090, - slategrey: 0x708090, - snow: 0xfffafa, - springgreen: 0x00ff7f, - steelblue: 0x4682b4, - tan: 0xd2b48c, - teal: 0x008080, - thistle: 0xd8bfd8, - tomato: 0xff6347, - turquoise: 0x40e0d0, - violet: 0xee82ee, - wheat: 0xf5deb3, - white: 0xffffff, - whitesmoke: 0xf5f5f5, - yellow: 0xffff00, - yellowgreen: 0x9acd32 -}; - -define(Color, color$1, { - displayable: function() { - return this.rgb().displayable(); - }, - hex: function() { - return this.rgb().hex(); - }, - toString: function() { - return this.rgb() + ""; - } -}); - -function color$1(format) { - var m; - format = (format + "").trim().toLowerCase(); - return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00 - : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000 - : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0) - : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%) - : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1) - : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1) - : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%) - : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1) - : named.hasOwnProperty(format) ? rgbn(named[format]) - : format === "transparent" ? new Rgb(NaN, NaN, NaN, 0) - : null; -} - -function rgbn(n) { - return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1); -} - -function rgba(r, g, b, a) { - if (a <= 0) r = g = b = NaN; - return new Rgb(r, g, b, a); -} - -function rgbConvert(o) { - if (!(o instanceof Color)) o = color$1(o); - if (!o) return new Rgb; - o = o.rgb(); - return new Rgb(o.r, o.g, o.b, o.opacity); -} - -function rgb(r, g, b, opacity) { - return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity); -} - -function Rgb(r, g, b, opacity) { - this.r = +r; - this.g = +g; - this.b = +b; - this.opacity = +opacity; -} - -define(Rgb, rgb, extend$1(Color, { - brighter: function(k) { - k = k == null ? brighter : Math.pow(brighter, k); - return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); - }, - darker: function(k) { - k = k == null ? darker : Math.pow(darker, k); - return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity); - }, - rgb: function() { - return this; - }, - displayable: function() { - return (0 <= this.r && this.r <= 255) - && (0 <= this.g && this.g <= 255) - && (0 <= this.b && this.b <= 255) - && (0 <= this.opacity && this.opacity <= 1); - }, - hex: function() { - return "#" + hex(this.r) + hex(this.g) + hex(this.b); - }, - toString: function() { - var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a)); - return (a === 1 ? "rgb(" : "rgba(") - + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + ", " - + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + ", " - + Math.max(0, Math.min(255, Math.round(this.b) || 0)) - + (a === 1 ? ")" : ", " + a + ")"); - } -})); - -function hex(value) { - value = Math.max(0, Math.min(255, Math.round(value) || 0)); - return (value < 16 ? "0" : "") + value.toString(16); -} - -function hsla(h, s, l, a) { - if (a <= 0) h = s = l = NaN; - else if (l <= 0 || l >= 1) h = s = NaN; - else if (s <= 0) h = NaN; - return new Hsl(h, s, l, a); -} - -function hslConvert(o) { - if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity); - if (!(o instanceof Color)) o = color$1(o); - if (!o) return new Hsl; - if (o instanceof Hsl) return o; - o = o.rgb(); - var r = o.r / 255, - g = o.g / 255, - b = o.b / 255, - min = Math.min(r, g, b), - max = Math.max(r, g, b), - h = NaN, - s = max - min, - l = (max + min) / 2; - if (s) { - if (r === max) h = (g - b) / s + (g < b) * 6; - else if (g === max) h = (b - r) / s + 2; - else h = (r - g) / s + 4; - s /= l < 0.5 ? max + min : 2 - max - min; - h *= 60; - } else { - s = l > 0 && l < 1 ? 0 : h; - } - return new Hsl(h, s, l, o.opacity); -} - -function hsl(h, s, l, opacity) { - return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity); -} - -function Hsl(h, s, l, opacity) { - this.h = +h; - this.s = +s; - this.l = +l; - this.opacity = +opacity; -} - -define(Hsl, hsl, extend$1(Color, { - brighter: function(k) { - k = k == null ? brighter : Math.pow(brighter, k); - return new Hsl(this.h, this.s, this.l * k, this.opacity); - }, - darker: function(k) { - k = k == null ? darker : Math.pow(darker, k); - return new Hsl(this.h, this.s, this.l * k, this.opacity); - }, - rgb: function() { - var h = this.h % 360 + (this.h < 0) * 360, - s = isNaN(h) || isNaN(this.s) ? 0 : this.s, - l = this.l, - m2 = l + (l < 0.5 ? l : 1 - l) * s, - m1 = 2 * l - m2; - return new Rgb( - hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2), - hsl2rgb(h, m1, m2), - hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2), - this.opacity - ); - }, - displayable: function() { - return (0 <= this.s && this.s <= 1 || isNaN(this.s)) - && (0 <= this.l && this.l <= 1) - && (0 <= this.opacity && this.opacity <= 1); - } -})); - -/* From FvD 13.37, CSS Color Module Level 3 */ -function hsl2rgb(h, m1, m2) { - return (h < 60 ? m1 + (m2 - m1) * h / 60 - : h < 180 ? m2 - : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60 - : m1) * 255; -} - -var deg2rad = Math.PI / 180; -var rad2deg = 180 / Math.PI; - -// https://beta.observablehq.com/@mbostock/lab-and-rgb -var K = 18, - Xn = 0.96422, - Yn = 1, - Zn = 0.82521, - t0$1 = 4 / 29, - t1$1 = 6 / 29, - t2 = 3 * t1$1 * t1$1, - t3 = t1$1 * t1$1 * t1$1; - -function labConvert(o) { - if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity); - if (o instanceof Hcl) { - if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity); - var h = o.h * deg2rad; - return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity); - } - if (!(o instanceof Rgb)) o = rgbConvert(o); - var r = rgb2lrgb(o.r), - g = rgb2lrgb(o.g), - b = rgb2lrgb(o.b), - y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z; - if (r === g && g === b) x = z = y; else { - x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn); - z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn); - } - return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity); -} - -function lab(l, a, b, opacity) { - return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity); -} - -function Lab(l, a, b, opacity) { - this.l = +l; - this.a = +a; - this.b = +b; - this.opacity = +opacity; -} - -define(Lab, lab, extend$1(Color, { - brighter: function(k) { - return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity); - }, - darker: function(k) { - return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity); - }, - rgb: function() { - var y = (this.l + 16) / 116, - x = isNaN(this.a) ? y : y + this.a / 500, - z = isNaN(this.b) ? y : y - this.b / 200; - x = Xn * lab2xyz(x); - y = Yn * lab2xyz(y); - z = Zn * lab2xyz(z); - return new Rgb( - lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z), - lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z), - lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z), - this.opacity - ); - } -})); - -function xyz2lab(t) { - return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0$1; -} - -function lab2xyz(t) { - return t > t1$1 ? t * t * t : t2 * (t - t0$1); -} - -function lrgb2rgb(x) { - return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055); -} - -function rgb2lrgb(x) { - return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4); -} - -function hclConvert(o) { - if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity); - if (!(o instanceof Lab)) o = labConvert(o); - if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity); - var h = Math.atan2(o.b, o.a) * rad2deg; - return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity); -} - -function hcl(h, c, l, opacity) { - return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity); -} - -function Hcl(h, c, l, opacity) { - this.h = +h; - this.c = +c; - this.l = +l; - this.opacity = +opacity; -} - -define(Hcl, hcl, extend$1(Color, { - brighter: function(k) { - return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity); - }, - darker: function(k) { - return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity); - }, - rgb: function() { - return labConvert(this).rgb(); - } -})); - -var A = -0.14861, - B = +1.78277, - C = -0.29227, - D = -0.90649, - E = +1.97294, - ED = E * D, - EB = E * B, - BC_DA = B * C - D * A; - -function cubehelixConvert(o) { - if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity); - if (!(o instanceof Rgb)) o = rgbConvert(o); - var r = o.r / 255, - g = o.g / 255, - b = o.b / 255, - l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB), - bl = b - l, - k = (E * (g - l) - C * bl) / D, - s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1 - h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN; - return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity); -} - -function cubehelix(h, s, l, opacity) { - return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity); -} - -function Cubehelix(h, s, l, opacity) { - this.h = +h; - this.s = +s; - this.l = +l; - this.opacity = +opacity; -} - -define(Cubehelix, cubehelix, extend$1(Color, { - brighter: function(k) { - k = k == null ? brighter : Math.pow(brighter, k); - return new Cubehelix(this.h, this.s, this.l * k, this.opacity); - }, - darker: function(k) { - k = k == null ? darker : Math.pow(darker, k); - return new Cubehelix(this.h, this.s, this.l * k, this.opacity); - }, - rgb: function() { - var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad, - l = +this.l, - a = isNaN(this.s) ? 0 : this.s * l * (1 - l), - cosh = Math.cos(h), - sinh = Math.sin(h); - return new Rgb( - 255 * (l + a * (A * cosh + B * sinh)), - 255 * (l + a * (C * cosh + D * sinh)), - 255 * (l + a * (E * cosh)), - this.opacity - ); - } -})); - -function basis(t1, v0, v1, v2, v3) { - var t2 = t1 * t1, t3 = t2 * t1; - return ((1 - 3 * t1 + 3 * t2 - t3) * v0 - + (4 - 6 * t2 + 3 * t3) * v1 - + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2 - + t3 * v3) / 6; -} - -function basis$1(values) { - var n = values.length - 1; - return function(t) { - var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n), - v1 = values[i], - v2 = values[i + 1], - v0 = i > 0 ? values[i - 1] : 2 * v1 - v2, - v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1; - return basis((t - i / n) * n, v0, v1, v2, v3); - }; -} - -function basisClosed(values) { - var n = values.length; - return function(t) { - var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n), - v0 = values[(i + n - 1) % n], - v1 = values[i % n], - v2 = values[(i + 1) % n], - v3 = values[(i + 2) % n]; - return basis((t - i / n) * n, v0, v1, v2, v3); - }; -} - -function constant$3(x) { - return function() { - return x; - }; -} - -function linear(a, d) { - return function(t) { - return a + t * d; - }; -} - -function exponential(a, b, y) { - return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) { - return Math.pow(a + t * b, y); - }; -} - -function hue(a, b) { - var d = b - a; - return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant$3(isNaN(a) ? b : a); -} - -function gamma(y) { - return (y = +y) === 1 ? nogamma : function(a, b) { - return b - a ? exponential(a, b, y) : constant$3(isNaN(a) ? b : a); - }; -} - -function nogamma(a, b) { - var d = b - a; - return d ? linear(a, d) : constant$3(isNaN(a) ? b : a); -} - -var rgb$1 = (function rgbGamma(y) { - var color = gamma(y); - - function rgb$1(start, end) { - var r = color((start = rgb(start)).r, (end = rgb(end)).r), - g = color(start.g, end.g), - b = color(start.b, end.b), - opacity = nogamma(start.opacity, end.opacity); - return function(t) { - start.r = r(t); - start.g = g(t); - start.b = b(t); - start.opacity = opacity(t); - return start + ""; - }; - } - - rgb$1.gamma = rgbGamma; - - return rgb$1; -})(1); - -function rgbSpline(spline) { - return function(colors) { - var n = colors.length, - r = new Array(n), - g = new Array(n), - b = new Array(n), - i, color; - for (i = 0; i < n; ++i) { - color = rgb(colors[i]); - r[i] = color.r || 0; - g[i] = color.g || 0; - b[i] = color.b || 0; - } - r = spline(r); - g = spline(g); - b = spline(b); - color.opacity = 1; - return function(t) { - color.r = r(t); - color.g = g(t); - color.b = b(t); - return color + ""; - }; - }; -} - -var rgbBasis = rgbSpline(basis$1); -var rgbBasisClosed = rgbSpline(basisClosed); - -function array$1(a, b) { - var nb = b ? b.length : 0, - na = a ? Math.min(nb, a.length) : 0, - x = new Array(na), - c = new Array(nb), - i; - - for (i = 0; i < na; ++i) x[i] = interpolate(a[i], b[i]); - for (; i < nb; ++i) c[i] = b[i]; - - return function(t) { - for (i = 0; i < na; ++i) c[i] = x[i](t); - return c; - }; -} - -function date(a, b) { - var d = new Date; - return a = +a, b -= a, function(t) { - return d.setTime(a + b * t), d; - }; -} - -function interpolateNumber(a, b) { - return a = +a, b -= a, function(t) { - return a + b * t; - }; -} - -function object$2(a, b) { - var i = {}, - c = {}, - k; - - if (a === null || typeof a !== "object") a = {}; - if (b === null || typeof b !== "object") b = {}; - - for (k in b) { - if (k in a) { - i[k] = interpolate(a[k], b[k]); - } else { - c[k] = b[k]; - } - } - - return function(t) { - for (k in i) c[k] = i[k](t); - return c; - }; -} - -var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, - reB = new RegExp(reA.source, "g"); - -function zero$1(b) { - return function() { - return b; - }; -} - -function one$1(b) { - return function(t) { - return b(t) + ""; - }; -} - -function string(a, b) { - var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b - am, // current match in a - bm, // current match in b - bs, // string preceding current number in b, if any - i = -1, // index in s - s = [], // string constants and placeholders - q = []; // number interpolators - - // Coerce inputs to strings. - a = a + "", b = b + ""; - - // Interpolate pairs of numbers in a & b. - while ((am = reA.exec(a)) - && (bm = reB.exec(b))) { - if ((bs = bm.index) > bi) { // a string precedes the next number in b - bs = b.slice(bi, bs); - if (s[i]) s[i] += bs; // coalesce with previous string - else s[++i] = bs; - } - if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match - if (s[i]) s[i] += bm; // coalesce with previous string - else s[++i] = bm; - } else { // interpolate non-matching numbers - s[++i] = null; - q.push({i: i, x: interpolateNumber(am, bm)}); - } - bi = reB.lastIndex; - } - - // Add remains of b. - if (bi < b.length) { - bs = b.slice(bi); - if (s[i]) s[i] += bs; // coalesce with previous string - else s[++i] = bs; - } - - // Special optimization for only a single match. - // Otherwise, interpolate each of the numbers and rejoin the string. - return s.length < 2 ? (q[0] - ? one$1(q[0].x) - : zero$1(b)) - : (b = q.length, function(t) { - for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t); - return s.join(""); - }); -} - -function interpolate(a, b) { - var t = typeof b, c; - return b == null || t === "boolean" ? constant$3(b) - : (t === "number" ? interpolateNumber - : t === "string" ? ((c = color$1(b)) ? (b = c, rgb$1) : string) - : b instanceof color$1 ? rgb$1 - : b instanceof Date ? date - : Array.isArray(b) ? array$1 - : typeof b.valueOf !== "function" && typeof b.toString !== "function" || isNaN(b) ? object$2 - : interpolateNumber)(a, b); -} - -function discrete(range) { - var n = range.length; - return function(t) { - return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))]; - }; -} - -function hue$1(a, b) { - var i = hue(+a, +b); - return function(t) { - var x = i(t); - return x - 360 * Math.floor(x / 360); - }; -} - -function interpolateRound(a, b) { - return a = +a, b -= a, function(t) { - return Math.round(a + b * t); - }; -} - -var degrees = 180 / Math.PI; - -var identity$2 = { - translateX: 0, - translateY: 0, - rotate: 0, - skewX: 0, - scaleX: 1, - scaleY: 1 -}; - -function decompose(a, b, c, d, e, f) { - var scaleX, scaleY, skewX; - if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX; - if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX; - if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY; - if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX; - return { - translateX: e, - translateY: f, - rotate: Math.atan2(b, a) * degrees, - skewX: Math.atan(skewX) * degrees, - scaleX: scaleX, - scaleY: scaleY - }; -} - -var cssNode, - cssRoot, - cssView, - svgNode; - -function parseCss(value) { - if (value === "none") return identity$2; - if (!cssNode) cssNode = document.createElement("DIV"), cssRoot = document.documentElement, cssView = document.defaultView; - cssNode.style.transform = value; - value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue("transform"); - cssRoot.removeChild(cssNode); - value = value.slice(7, -1).split(","); - return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]); -} - -function parseSvg(value) { - if (value == null) return identity$2; - if (!svgNode) svgNode = document.createElementNS("http://www.w3.org/2000/svg", "g"); - svgNode.setAttribute("transform", value); - if (!(value = svgNode.transform.baseVal.consolidate())) return identity$2; - value = value.matrix; - return decompose(value.a, value.b, value.c, value.d, value.e, value.f); -} - -function interpolateTransform(parse, pxComma, pxParen, degParen) { - - function pop(s) { - return s.length ? s.pop() + " " : ""; - } - - function translate(xa, ya, xb, yb, s, q) { - if (xa !== xb || ya !== yb) { - var i = s.push("translate(", null, pxComma, null, pxParen); - q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)}); - } else if (xb || yb) { - s.push("translate(" + xb + pxComma + yb + pxParen); - } - } - - function rotate(a, b, s, q) { - if (a !== b) { - if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path - q.push({i: s.push(pop(s) + "rotate(", null, degParen) - 2, x: interpolateNumber(a, b)}); - } else if (b) { - s.push(pop(s) + "rotate(" + b + degParen); - } - } - - function skewX(a, b, s, q) { - if (a !== b) { - q.push({i: s.push(pop(s) + "skewX(", null, degParen) - 2, x: interpolateNumber(a, b)}); - } else if (b) { - s.push(pop(s) + "skewX(" + b + degParen); - } - } - - function scale(xa, ya, xb, yb, s, q) { - if (xa !== xb || ya !== yb) { - var i = s.push(pop(s) + "scale(", null, ",", null, ")"); - q.push({i: i - 4, x: interpolateNumber(xa, xb)}, {i: i - 2, x: interpolateNumber(ya, yb)}); - } else if (xb !== 1 || yb !== 1) { - s.push(pop(s) + "scale(" + xb + "," + yb + ")"); - } - } - - return function(a, b) { - var s = [], // string constants and placeholders - q = []; // number interpolators - a = parse(a), b = parse(b); - translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q); - rotate(a.rotate, b.rotate, s, q); - skewX(a.skewX, b.skewX, s, q); - scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q); - a = b = null; // gc - return function(t) { - var i = -1, n = q.length, o; - while (++i < n) s[(o = q[i]).i] = o.x(t); - return s.join(""); - }; - }; -} - -var interpolateTransformCss = interpolateTransform(parseCss, "px, ", "px)", "deg)"); -var interpolateTransformSvg = interpolateTransform(parseSvg, ", ", ")", ")"); - -var rho = Math.SQRT2, - rho2 = 2, - rho4 = 4, - epsilon2 = 1e-12; - -function cosh(x) { - return ((x = Math.exp(x)) + 1 / x) / 2; -} - -function sinh(x) { - return ((x = Math.exp(x)) - 1 / x) / 2; -} - -function tanh(x) { - return ((x = Math.exp(2 * x)) - 1) / (x + 1); -} - -// p0 = [ux0, uy0, w0] -// p1 = [ux1, uy1, w1] -function zoom$1(p0, p1) { - var ux0 = p0[0], uy0 = p0[1], w0 = p0[2], - ux1 = p1[0], uy1 = p1[1], w1 = p1[2], - dx = ux1 - ux0, - dy = uy1 - uy0, - d2 = dx * dx + dy * dy, - i, - S; - - // Special case for u0 ≅ u1. - if (d2 < epsilon2) { - S = Math.log(w1 / w0) / rho; - i = function(t) { - return [ - ux0 + t * dx, - uy0 + t * dy, - w0 * Math.exp(rho * t * S) - ]; - }; - } - - // General case. - else { - var d1 = Math.sqrt(d2), - b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1), - b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1), - r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0), - r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1); - S = (r1 - r0) / rho; - i = function(t) { - var s = t * S, - coshr0 = cosh(r0), - u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0)); - return [ - ux0 + u * dx, - uy0 + u * dy, - w0 * coshr0 / cosh(rho * s + r0) - ]; - }; - } - - i.duration = S * 1000; - - return i; -} - -function hsl$1(hue) { - return function(start, end) { - var h = hue((start = hsl(start)).h, (end = hsl(end)).h), - s = nogamma(start.s, end.s), - l = nogamma(start.l, end.l), - opacity = nogamma(start.opacity, end.opacity); - return function(t) { - start.h = h(t); - start.s = s(t); - start.l = l(t); - start.opacity = opacity(t); - return start + ""; - }; - } -} - -var hsl$2 = hsl$1(hue); -var hslLong = hsl$1(nogamma); - -function lab$1(start, end) { - var l = nogamma((start = lab(start)).l, (end = lab(end)).l), - a = nogamma(start.a, end.a), - b = nogamma(start.b, end.b), - opacity = nogamma(start.opacity, end.opacity); - return function(t) { - start.l = l(t); - start.a = a(t); - start.b = b(t); - start.opacity = opacity(t); - return start + ""; - }; -} - -function hcl$1(hue) { - return function(start, end) { - var h = hue((start = hcl(start)).h, (end = hcl(end)).h), - c = nogamma(start.c, end.c), - l = nogamma(start.l, end.l), - opacity = nogamma(start.opacity, end.opacity); - return function(t) { - start.h = h(t); - start.c = c(t); - start.l = l(t); - start.opacity = opacity(t); - return start + ""; - }; - } -} - -var hcl$2 = hcl$1(hue); -var hclLong = hcl$1(nogamma); - -function cubehelix$1(hue) { - return (function cubehelixGamma(y) { - y = +y; - - function cubehelix$1(start, end) { - var h = hue((start = cubehelix(start)).h, (end = cubehelix(end)).h), - s = nogamma(start.s, end.s), - l = nogamma(start.l, end.l), - opacity = nogamma(start.opacity, end.opacity); - return function(t) { - start.h = h(t); - start.s = s(t); - start.l = l(Math.pow(t, y)); - start.opacity = opacity(t); - return start + ""; - }; - } - - cubehelix$1.gamma = cubehelixGamma; - - return cubehelix$1; - })(1); -} - -var cubehelix$2 = cubehelix$1(hue); -var cubehelixLong = cubehelix$1(nogamma); - -function piecewise(interpolate, values) { - var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n); - while (i < n) I[i] = interpolate(v, v = values[++i]); - return function(t) { - var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n))); - return I[i](t - i); - }; -} - -function quantize(interpolator, n) { - var samples = new Array(n); - for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1)); - return samples; -} - - - -var $$1 = /*#__PURE__*/Object.freeze({ - interpolate: interpolate, - interpolateArray: array$1, - interpolateBasis: basis$1, - interpolateBasisClosed: basisClosed, - interpolateDate: date, - interpolateDiscrete: discrete, - interpolateHue: hue$1, - interpolateNumber: interpolateNumber, - interpolateObject: object$2, - interpolateRound: interpolateRound, - interpolateString: string, - interpolateTransformCss: interpolateTransformCss, - interpolateTransformSvg: interpolateTransformSvg, - interpolateZoom: zoom$1, - interpolateRgb: rgb$1, - interpolateRgbBasis: rgbBasis, - interpolateRgbBasisClosed: rgbBasisClosed, - interpolateHsl: hsl$2, - interpolateHslLong: hslLong, - interpolateLab: lab$1, - interpolateHcl: hcl$2, - interpolateHclLong: hclLong, - interpolateCubehelix: cubehelix$2, - interpolateCubehelixLong: cubehelixLong, - piecewise: piecewise, - quantize: quantize -}); - -function constant$4(x) { - return function() { - return x; - }; -} - -function number$3(x) { - return +x; -} - -var unit = [0, 1]; - -function identity$3(x) { - return x; -} - -function normalize(a, b) { - return (b -= (a = +a)) - ? function(x) { return (x - a) / b; } - : constant$4(isNaN(b) ? NaN : 0.5); -} - -function clamper(domain) { - var a = domain[0], b = domain[domain.length - 1], t; - if (a > b) t = a, a = b, b = t; - return function(x) { return Math.max(a, Math.min(b, x)); }; -} - -// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1]. -// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b]. -function bimap(domain, range, interpolate) { - var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1]; - if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0); - else d0 = normalize(d0, d1), r0 = interpolate(r0, r1); - return function(x) { return r0(d0(x)); }; -} - -function polymap(domain, range, interpolate) { - var j = Math.min(domain.length, range.length) - 1, - d = new Array(j), - r = new Array(j), - i = -1; - - // Reverse descending domains. - if (domain[j] < domain[0]) { - domain = domain.slice().reverse(); - range = range.slice().reverse(); - } - - while (++i < j) { - d[i] = normalize(domain[i], domain[i + 1]); - r[i] = interpolate(range[i], range[i + 1]); - } - - return function(x) { - var i = bisectRight$1(domain, x, 1, j) - 1; - return r[i](d[i](x)); - }; -} - -function copy(source, target) { - return target - .domain(source.domain()) - .range(source.range()) - .interpolate(source.interpolate()) - .clamp(source.clamp()) - .unknown(source.unknown()); -} - -function transformer() { - var domain = unit, - range = unit, - interpolate$1 = interpolate, - transform, - untransform, - unknown, - clamp = identity$3, - piecewise, - output, - input; - - function rescale() { - piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap; - output = input = null; - return scale; - } - - function scale(x) { - return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate$1)))(transform(clamp(x))); - } - - scale.invert = function(y) { - return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y))); - }; - - scale.domain = function(_) { - return arguments.length ? (domain = Array.from(_, number$3), clamp === identity$3 || (clamp = clamper(domain)), rescale()) : domain.slice(); - }; - - scale.range = function(_) { - return arguments.length ? (range = Array.from(_), rescale()) : range.slice(); - }; - - scale.rangeRound = function(_) { - return range = Array.from(_), interpolate$1 = interpolateRound, rescale(); - }; - - scale.clamp = function(_) { - return arguments.length ? (clamp = _ ? clamper(domain) : identity$3, scale) : clamp !== identity$3; - }; - - scale.interpolate = function(_) { - return arguments.length ? (interpolate$1 = _, rescale()) : interpolate$1; - }; - - scale.unknown = function(_) { - return arguments.length ? (unknown = _, scale) : unknown; - }; - - return function(t, u) { - transform = t, untransform = u; - return rescale(); - }; -} - -function continuous(transform, untransform) { - return transformer()(transform, untransform); -} - -// Computes the decimal coefficient and exponent of the specified number x with -// significant digits p, where x is positive and p is in [1, 21] or undefined. -// For example, formatDecimal(1.23) returns ["123", 0]. -function formatDecimal(x, p) { - if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf("e")) < 0) return null; // NaN, ±Infinity - var i, coefficient = x.slice(0, i); - - // The string returned by toExponential either has the form \d\.\d+e[-+]\d+ - // (e.g., 1.2e+3) or the form \de[-+]\d+ (e.g., 1e+3). - return [ - coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient, - +x.slice(i + 1) - ]; -} - -function exponent(x) { - return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN; -} - -function formatGroup(grouping, thousands) { - return function(value, width) { - var i = value.length, - t = [], - j = 0, - g = grouping[0], - length = 0; - - while (i > 0 && g > 0) { - if (length + g + 1 > width) g = Math.max(1, width - length); - t.push(value.substring(i -= g, i + g)); - if ((length += g + 1) > width) break; - g = grouping[j = (j + 1) % grouping.length]; - } - - return t.reverse().join(thousands); - }; -} - -function formatNumerals(numerals) { - return function(value) { - return value.replace(/[0-9]/g, function(i) { - return numerals[+i]; - }); - }; -} - -// [[fill]align][sign][symbol][0][width][,][.precision][~][type] -var re = /^(?:(.)?([<>=^]))?([+\-( ])?([$#])?(0)?(\d+)?(,)?(\.\d+)?(~)?([a-z%])?$/i; - -function formatSpecifier(specifier) { - return new FormatSpecifier(specifier); -} - -formatSpecifier.prototype = FormatSpecifier.prototype; // instanceof - -function FormatSpecifier(specifier) { - if (!(match = re.exec(specifier))) throw new Error("invalid format: " + specifier); - var match; - this.fill = match[1] || " "; - this.align = match[2] || ">"; - this.sign = match[3] || "-"; - this.symbol = match[4] || ""; - this.zero = !!match[5]; - this.width = match[6] && +match[6]; - this.comma = !!match[7]; - this.precision = match[8] && +match[8].slice(1); - this.trim = !!match[9]; - this.type = match[10] || ""; -} - -FormatSpecifier.prototype.toString = function() { - return this.fill - + this.align - + this.sign - + this.symbol - + (this.zero ? "0" : "") - + (this.width == null ? "" : Math.max(1, this.width | 0)) - + (this.comma ? "," : "") - + (this.precision == null ? "" : "." + Math.max(0, this.precision | 0)) - + (this.trim ? "~" : "") - + this.type; -}; - -// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k. -function formatTrim(s) { - out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) { - switch (s[i]) { - case ".": i0 = i1 = i; break; - case "0": if (i0 === 0) i0 = i; i1 = i; break; - default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break; - } - } - return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s; -} - -var prefixExponent; - -function formatPrefixAuto(x, p) { - var d = formatDecimal(x, p); - if (!d) return x + ""; - var coefficient = d[0], - exponent = d[1], - i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1, - n = coefficient.length; - return i === n ? coefficient - : i > n ? coefficient + new Array(i - n + 1).join("0") - : i > 0 ? coefficient.slice(0, i) + "." + coefficient.slice(i) - : "0." + new Array(1 - i).join("0") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y! -} - -function formatRounded(x, p) { - var d = formatDecimal(x, p); - if (!d) return x + ""; - var coefficient = d[0], - exponent = d[1]; - return exponent < 0 ? "0." + new Array(-exponent).join("0") + coefficient - : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + "." + coefficient.slice(exponent + 1) - : coefficient + new Array(exponent - coefficient.length + 2).join("0"); -} - -var formatTypes = { - "%": function(x, p) { return (x * 100).toFixed(p); }, - "b": function(x) { return Math.round(x).toString(2); }, - "c": function(x) { return x + ""; }, - "d": function(x) { return Math.round(x).toString(10); }, - "e": function(x, p) { return x.toExponential(p); }, - "f": function(x, p) { return x.toFixed(p); }, - "g": function(x, p) { return x.toPrecision(p); }, - "o": function(x) { return Math.round(x).toString(8); }, - "p": function(x, p) { return formatRounded(x * 100, p); }, - "r": formatRounded, - "s": formatPrefixAuto, - "X": function(x) { return Math.round(x).toString(16).toUpperCase(); }, - "x": function(x) { return Math.round(x).toString(16); } -}; - -function identity$4(x) { - return x; -} - -var prefixes = ["y","z","a","f","p","n","µ","m","","k","M","G","T","P","E","Z","Y"]; - -function formatLocale$1(locale) { - var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity$4, - currency = locale.currency, - decimal = locale.decimal, - numerals = locale.numerals ? formatNumerals(locale.numerals) : identity$4, - percent = locale.percent || "%"; - - function newFormat(specifier) { - specifier = formatSpecifier(specifier); - - var fill = specifier.fill, - align = specifier.align, - sign = specifier.sign, - symbol = specifier.symbol, - zero = specifier.zero, - width = specifier.width, - comma = specifier.comma, - precision = specifier.precision, - trim = specifier.trim, - type = specifier.type; - - // The "n" type is an alias for ",g". - if (type === "n") comma = true, type = "g"; - - // The "" type, and any invalid type, is an alias for ".12~g". - else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = "g"; - - // If zero fill is specified, padding goes after sign and before digits. - if (zero || (fill === "0" && align === "=")) zero = true, fill = "0", align = "="; - - // Compute the prefix and suffix. - // For SI-prefix, the suffix is lazily computed. - var prefix = symbol === "$" ? currency[0] : symbol === "#" && /[boxX]/.test(type) ? "0" + type.toLowerCase() : "", - suffix = symbol === "$" ? currency[1] : /[%p]/.test(type) ? percent : ""; - - // What format function should we use? - // Is this an integer type? - // Can this type generate exponential notation? - var formatType = formatTypes[type], - maybeSuffix = /[defgprs%]/.test(type); - - // Set the default precision if not specified, - // or clamp the specified precision to the supported range. - // For significant precision, it must be in [1, 21]. - // For fixed precision, it must be in [0, 20]. - precision = precision == null ? 6 - : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision)) - : Math.max(0, Math.min(20, precision)); - - function format(value) { - var valuePrefix = prefix, - valueSuffix = suffix, - i, n, c; - - if (type === "c") { - valueSuffix = formatType(value) + valueSuffix; - value = ""; - } else { - value = +value; - - // Perform the initial formatting. - var valueNegative = value < 0; - value = formatType(Math.abs(value), precision); - - // Trim insignificant zeros. - if (trim) value = formatTrim(value); - - // If a negative value rounds to zero during formatting, treat as positive. - if (valueNegative && +value === 0) valueNegative = false; - - // Compute the prefix and suffix. - valuePrefix = (valueNegative ? (sign === "(" ? sign : "-") : sign === "-" || sign === "(" ? "" : sign) + valuePrefix; - valueSuffix = (type === "s" ? prefixes[8 + prefixExponent / 3] : "") + valueSuffix + (valueNegative && sign === "(" ? ")" : ""); - - // Break the formatted value into the integer “value” part that can be - // grouped, and fractional or exponential “suffix” part that is not. - if (maybeSuffix) { - i = -1, n = value.length; - while (++i < n) { - if (c = value.charCodeAt(i), 48 > c || c > 57) { - valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix; - value = value.slice(0, i); - break; - } - } - } - } - - // If the fill character is not "0", grouping is applied before padding. - if (comma && !zero) value = group(value, Infinity); - - // Compute the padding. - var length = valuePrefix.length + value.length + valueSuffix.length, - padding = length < width ? new Array(width - length + 1).join(fill) : ""; - - // If the fill character is "0", grouping is applied after padding. - if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = ""; - - // Reconstruct the final output based on the desired alignment. - switch (align) { - case "<": value = valuePrefix + value + valueSuffix + padding; break; - case "=": value = valuePrefix + padding + value + valueSuffix; break; - case "^": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break; - default: value = padding + valuePrefix + value + valueSuffix; break; - } - - return numerals(value); - } - - format.toString = function() { - return specifier + ""; - }; - - return format; - } - - function formatPrefix(specifier, value) { - var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = "f", specifier)), - e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3, - k = Math.pow(10, -e), - prefix = prefixes[8 + e / 3]; - return function(value) { - return f(k * value) + prefix; - }; - } - - return { - format: newFormat, - formatPrefix: formatPrefix - }; -} - -var locale$1; -var format$1; -var formatPrefix; - -defaultLocale$1({ - decimal: ".", - thousands: ",", - grouping: [3], - currency: ["$", ""] -}); - -function defaultLocale$1(definition) { - locale$1 = formatLocale$1(definition); - format$1 = locale$1.format; - formatPrefix = locale$1.formatPrefix; - return locale$1; -} - -function precisionFixed(step) { - return Math.max(0, -exponent(Math.abs(step))); -} - -function precisionPrefix(step, value) { - return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step))); -} - -function precisionRound(step, max) { - step = Math.abs(step), max = Math.abs(max) - step; - return Math.max(0, exponent(max) - exponent(step)) + 1; -} - -function spanFormat(start, stop, count, specifier) { - var step = tickStep(start, stop, count), - precision; - specifier = formatSpecifier(specifier == null ? ",f" : specifier); - switch (specifier.type) { - case "s": { - var value = Math.max(Math.abs(start), Math.abs(stop)); - if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision; - return formatPrefix(specifier, value); - } - case "": - case "e": - case "g": - case "p": - case "r": { - if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === "e"); - break; - } - case "f": - case "%": { - if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === "%") * 2; - break; - } - } - return format$1(specifier); -} - -function linearish(scale) { - var domain = scale.domain; - - scale.ticks = function(count) { - var d = domain(); - return ticks(d[0], d[d.length - 1], count == null ? 10 : count); - }; - - scale.tickFormat = function(count, specifier) { - var d = domain(); - return spanFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier); - }; - - scale.nice = function(count) { - if (count == null) count = 10; - - var d = domain(), - i0 = 0, - i1 = d.length - 1, - start = d[i0], - stop = d[i1], - step; - - if (stop < start) { - step = start, start = stop, stop = step; - step = i0, i0 = i1, i1 = step; - } - - step = tickIncrement(start, stop, count); - - if (step > 0) { - start = Math.floor(start / step) * step; - stop = Math.ceil(stop / step) * step; - step = tickIncrement(start, stop, count); - } else if (step < 0) { - start = Math.ceil(start * step) / step; - stop = Math.floor(stop * step) / step; - step = tickIncrement(start, stop, count); - } - - if (step > 0) { - d[i0] = Math.floor(start / step) * step; - d[i1] = Math.ceil(stop / step) * step; - domain(d); - } else if (step < 0) { - d[i0] = Math.ceil(start * step) / step; - d[i1] = Math.floor(stop * step) / step; - domain(d); - } - - return scale; - }; - - return scale; -} - -function linear$1() { - var scale = continuous(identity$3, identity$3); - - scale.copy = function() { - return copy(scale, linear$1()); - }; - - initRange.apply(scale, arguments); - - return linearish(scale); -} - -function identity$5(domain) { - var unknown; - - function scale(x) { - return isNaN(x = +x) ? unknown : x; - } - - scale.invert = scale; - - scale.domain = scale.range = function(_) { - return arguments.length ? (domain = Array.from(_, number$3), scale) : domain.slice(); - }; - - scale.unknown = function(_) { - return arguments.length ? (unknown = _, scale) : unknown; - }; - - scale.copy = function() { - return identity$5(domain).unknown(unknown); - }; - - domain = arguments.length ? Array.from(domain, number$3) : [0, 1]; - - return linearish(scale); -} - -function nice(domain, interval) { - domain = domain.slice(); - - var i0 = 0, - i1 = domain.length - 1, - x0 = domain[i0], - x1 = domain[i1], - t; - - if (x1 < x0) { - t = i0, i0 = i1, i1 = t; - t = x0, x0 = x1, x1 = t; - } - - domain[i0] = interval.floor(x0); - domain[i1] = interval.ceil(x1); - return domain; -} - -function transformLog(x) { - return Math.log(x); -} - -function transformExp(x) { - return Math.exp(x); -} - -function transformLogn(x) { - return -Math.log(-x); -} - -function transformExpn(x) { - return -Math.exp(-x); -} - -function pow10(x) { - return isFinite(x) ? +("1e" + x) : x < 0 ? 0 : x; -} - -function powp(base) { - return base === 10 ? pow10 - : base === Math.E ? Math.exp - : function(x) { return Math.pow(base, x); }; -} - -function logp(base) { - return base === Math.E ? Math.log - : base === 10 && Math.log10 - || base === 2 && Math.log2 - || (base = Math.log(base), function(x) { return Math.log(x) / base; }); -} - -function reflect(f) { - return function(x) { - return -f(-x); - }; -} - -function loggish(transform) { - var scale = transform(transformLog, transformExp), - domain = scale.domain, - base = 10, - logs, - pows; - - function rescale() { - logs = logp(base), pows = powp(base); - if (domain()[0] < 0) { - logs = reflect(logs), pows = reflect(pows); - transform(transformLogn, transformExpn); - } else { - transform(transformLog, transformExp); - } - return scale; - } - - scale.base = function(_) { - return arguments.length ? (base = +_, rescale()) : base; - }; - - scale.domain = function(_) { - return arguments.length ? (domain(_), rescale()) : domain(); - }; - - scale.ticks = function(count) { - var d = domain(), - u = d[0], - v = d[d.length - 1], - r; - - if (r = v < u) i = u, u = v, v = i; - - var i = logs(u), - j = logs(v), - p, - k, - t, - n = count == null ? 10 : +count, - z = []; - - if (!(base % 1) && j - i < n) { - i = Math.round(i) - 1, j = Math.round(j) + 1; - if (u > 0) for (; i < j; ++i) { - for (k = 1, p = pows(i); k < base; ++k) { - t = p * k; - if (t < u) continue; - if (t > v) break; - z.push(t); - } - } else for (; i < j; ++i) { - for (k = base - 1, p = pows(i); k >= 1; --k) { - t = p * k; - if (t < u) continue; - if (t > v) break; - z.push(t); - } - } - } else { - z = ticks(i, j, Math.min(j - i, n)).map(pows); - } - - return r ? z.reverse() : z; - }; - - scale.tickFormat = function(count, specifier) { - if (specifier == null) specifier = base === 10 ? ".0e" : ","; - if (typeof specifier !== "function") specifier = format$1(specifier); - if (count === Infinity) return specifier; - if (count == null) count = 10; - var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate? - return function(d) { - var i = d / pows(Math.round(logs(d))); - if (i * base < base - 0.5) i *= base; - return i <= k ? specifier(d) : ""; - }; - }; - - scale.nice = function() { - return domain(nice(domain(), { - floor: function(x) { return pows(Math.floor(logs(x))); }, - ceil: function(x) { return pows(Math.ceil(logs(x))); } - })); - }; - - return scale; -} - -function log$2() { - var scale = loggish(transformer()).domain([1, 10]); - - scale.copy = function() { - return copy(scale, log$2()).base(scale.base()); - }; - - initRange.apply(scale, arguments); - - return scale; -} - -function transformSymlog(c) { - return function(x) { - return Math.sign(x) * Math.log1p(Math.abs(x / c)); - }; -} - -function transformSymexp(c) { - return function(x) { - return Math.sign(x) * Math.expm1(Math.abs(x)) * c; - }; -} - -function symlogish(transform) { - var c = 1, scale = transform(transformSymlog(c), transformSymexp(c)); - - scale.constant = function(_) { - return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c; - }; - - return linearish(scale); -} - -function symlog$1() { - var scale = symlogish(transformer()); - - scale.copy = function() { - return copy(scale, symlog$1()).constant(scale.constant()); - }; - - return initRange.apply(scale, arguments); -} - -function transformPow(exponent) { - return function(x) { - return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent); - }; -} - -function transformSqrt(x) { - return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x); -} - -function transformSquare(x) { - return x < 0 ? -x * x : x * x; -} - -function powish(transform) { - var scale = transform(identity$3, identity$3), - exponent = 1; - - function rescale() { - return exponent === 1 ? transform(identity$3, identity$3) - : exponent === 0.5 ? transform(transformSqrt, transformSquare) - : transform(transformPow(exponent), transformPow(1 / exponent)); - } - - scale.exponent = function(_) { - return arguments.length ? (exponent = +_, rescale()) : exponent; - }; - - return linearish(scale); -} - -function pow$1() { - var scale = powish(transformer()); - - scale.copy = function() { - return copy(scale, pow$1()).exponent(scale.exponent()); - }; - - initRange.apply(scale, arguments); - - return scale; -} - -function sqrt$1() { - return pow$1.apply(null, arguments).exponent(0.5); -} - -function quantile$3() { - var domain = [], - range = [], - thresholds = [], - unknown; - - function rescale() { - var i = 0, n = Math.max(1, range.length); - thresholds = new Array(n - 1); - while (++i < n) thresholds[i - 1] = quantile$2(domain, i / n); - return scale; - } - - function scale(x) { - return isNaN(x = +x) ? unknown : range[bisectRight$1(thresholds, x)]; - } - - scale.invertExtent = function(y) { - var i = range.indexOf(y); - return i < 0 ? [NaN, NaN] : [ - i > 0 ? thresholds[i - 1] : domain[0], - i < thresholds.length ? thresholds[i] : domain[domain.length - 1] - ]; - }; - - scale.domain = function(_) { - if (!arguments.length) return domain.slice(); - domain = []; - for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d); - domain.sort(ascending$4); - return rescale(); - }; - - scale.range = function(_) { - return arguments.length ? (range = Array.from(_), rescale()) : range.slice(); - }; - - scale.unknown = function(_) { - return arguments.length ? (unknown = _, scale) : unknown; - }; - - scale.quantiles = function() { - return thresholds.slice(); - }; - - scale.copy = function() { - return quantile$3() - .domain(domain) - .range(range) - .unknown(unknown); - }; - - return initRange.apply(scale, arguments); -} - -function quantize$1() { - var x0 = 0, - x1 = 1, - n = 1, - domain = [0.5], - range = [0, 1], - unknown; - - function scale(x) { - return x <= x ? range[bisectRight$1(domain, x, 0, n)] : unknown; - } - - function rescale() { - var i = -1; - domain = new Array(n); - while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1); - return scale; - } - - scale.domain = function(_) { - return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1]; - }; - - scale.range = function(_) { - return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice(); - }; - - scale.invertExtent = function(y) { - var i = range.indexOf(y); - return i < 0 ? [NaN, NaN] - : i < 1 ? [x0, domain[0]] - : i >= n ? [domain[n - 1], x1] - : [domain[i - 1], domain[i]]; - }; - - scale.unknown = function(_) { - return arguments.length ? (unknown = _, scale) : scale; - }; - - scale.thresholds = function() { - return domain.slice(); - }; - - scale.copy = function() { - return quantize$1() - .domain([x0, x1]) - .range(range) - .unknown(unknown); - }; - - return initRange.apply(linearish(scale), arguments); -} - -function threshold() { - var domain = [0.5], - range = [0, 1], - unknown, - n = 1; - - function scale(x) { - return x <= x ? range[bisectRight$1(domain, x, 0, n)] : unknown; - } - - scale.domain = function(_) { - return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice(); - }; - - scale.range = function(_) { - return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice(); - }; - - scale.invertExtent = function(y) { - var i = range.indexOf(y); - return [domain[i - 1], domain[i]]; - }; - - scale.unknown = function(_) { - return arguments.length ? (unknown = _, scale) : unknown; - }; - - scale.copy = function() { - return threshold() - .domain(domain) - .range(range) - .unknown(unknown); - }; - - return initRange.apply(scale, arguments); -} - -var durationSecond$1 = 1000, - durationMinute$1 = durationSecond$1 * 60, - durationHour$1 = durationMinute$1 * 60, - durationDay$1 = durationHour$1 * 24, - durationWeek$1 = durationDay$1 * 7, - durationMonth = durationDay$1 * 30, - durationYear = durationDay$1 * 365; - -function date$1(t) { - return new Date(t); -} - -function number$4(t) { - return t instanceof Date ? +t : +new Date(+t); -} - -function calendar(year, month, week, day, hour, minute, second, millisecond, format) { - var scale = continuous(identity$3, identity$3), - invert = scale.invert, - domain = scale.domain; - - var formatMillisecond = format(".%L"), - formatSecond = format(":%S"), - formatMinute = format("%I:%M"), - formatHour = format("%I %p"), - formatDay = format("%a %d"), - formatWeek = format("%b %d"), - formatMonth = format("%B"), - formatYear = format("%Y"); - - var tickIntervals = [ - [second, 1, durationSecond$1], - [second, 5, 5 * durationSecond$1], - [second, 15, 15 * durationSecond$1], - [second, 30, 30 * durationSecond$1], - [minute, 1, durationMinute$1], - [minute, 5, 5 * durationMinute$1], - [minute, 15, 15 * durationMinute$1], - [minute, 30, 30 * durationMinute$1], - [ hour, 1, durationHour$1 ], - [ hour, 3, 3 * durationHour$1 ], - [ hour, 6, 6 * durationHour$1 ], - [ hour, 12, 12 * durationHour$1 ], - [ day, 1, durationDay$1 ], - [ day, 2, 2 * durationDay$1 ], - [ week, 1, durationWeek$1 ], - [ month, 1, durationMonth ], - [ month, 3, 3 * durationMonth ], - [ year, 1, durationYear ] - ]; - - function tickFormat(date) { - return (second(date) < date ? formatMillisecond - : minute(date) < date ? formatSecond - : hour(date) < date ? formatMinute - : day(date) < date ? formatHour - : month(date) < date ? (week(date) < date ? formatDay : formatWeek) - : year(date) < date ? formatMonth - : formatYear)(date); - } - - function tickInterval(interval, start, stop, step) { - if (interval == null) interval = 10; - - // If a desired tick count is specified, pick a reasonable tick interval - // based on the extent of the domain and a rough estimate of tick size. - // Otherwise, assume interval is already a time interval and use it. - if (typeof interval === "number") { - var target = Math.abs(stop - start) / interval, - i = bisector$4(function(i) { return i[2]; }).right(tickIntervals, target); - if (i === tickIntervals.length) { - step = tickStep(start / durationYear, stop / durationYear, interval); - interval = year; - } else if (i) { - i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i]; - step = i[1]; - interval = i[0]; - } else { - step = Math.max(tickStep(start, stop, interval), 1); - interval = millisecond; - } - } - - return step == null ? interval : interval.every(step); - } - - scale.invert = function(y) { - return new Date(invert(y)); - }; - - scale.domain = function(_) { - return arguments.length ? domain(Array.from(_, number$4)) : domain().map(date$1); - }; - - scale.ticks = function(interval, step) { - var d = domain(), - t0 = d[0], - t1 = d[d.length - 1], - r = t1 < t0, - t; - if (r) t = t0, t0 = t1, t1 = t; - t = tickInterval(interval, t0, t1, step); - t = t ? t.range(t0, t1 + 1) : []; // inclusive stop - return r ? t.reverse() : t; - }; - - scale.tickFormat = function(count, specifier) { - return specifier == null ? tickFormat : format(specifier); - }; - - scale.nice = function(interval, step) { - var d = domain(); - return (interval = tickInterval(interval, d[0], d[d.length - 1], step)) - ? domain(nice(d, interval)) - : scale; - }; - - scale.copy = function() { - return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format)); - }; - - return scale; -} - -function time$1() { - return initRange.apply(calendar(year, month, sunday, day, hour, minute, second, millisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments); -} - -function utcTime() { - return initRange.apply(calendar(utcYear, utcMonth, utcSunday, utcDay, utcHour, utcMinute, second, millisecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments); -} - -function transformer$1() { - var x0 = 0, - x1 = 1, - t0, - t1, - k10, - transform, - interpolator = identity$3, - clamp = false, - unknown; - - function scale(x) { - return isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x)); - } - - scale.domain = function(_) { - return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1]; - }; - - scale.clamp = function(_) { - return arguments.length ? (clamp = !!_, scale) : clamp; - }; - - scale.interpolator = function(_) { - return arguments.length ? (interpolator = _, scale) : interpolator; - }; - - scale.unknown = function(_) { - return arguments.length ? (unknown = _, scale) : unknown; - }; - - return function(t) { - transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0); - return scale; - }; -} - -function copy$1(source, target) { - return target - .domain(source.domain()) - .interpolator(source.interpolator()) - .clamp(source.clamp()) - .unknown(source.unknown()); -} - -function sequential() { - var scale = linearish(transformer$1()(identity$3)); - - scale.copy = function() { - return copy$1(scale, sequential()); - }; - - return initInterpolator.apply(scale, arguments); -} - -function sequentialLog() { - var scale = loggish(transformer$1()).domain([1, 10]); - - scale.copy = function() { - return copy$1(scale, sequentialLog()).base(scale.base()); - }; - - return initInterpolator.apply(scale, arguments); -} - -function sequentialSymlog() { - var scale = symlogish(transformer$1()); - - scale.copy = function() { - return copy$1(scale, sequentialSymlog()).constant(scale.constant()); - }; - - return initInterpolator.apply(scale, arguments); -} - -function sequentialPow() { - var scale = powish(transformer$1()); - - scale.copy = function() { - return copy$1(scale, sequentialPow()).exponent(scale.exponent()); - }; - - return initInterpolator.apply(scale, arguments); -} - -function sequentialSqrt() { - return sequentialPow.apply(null, arguments).exponent(0.5); -} - -function transformer$2() { - var x0 = 0, - x1 = 0.5, - x2 = 1, - t0, - t1, - t2, - k10, - k21, - interpolator = identity$3, - transform, - clamp = false, - unknown; - - function scale(x) { - return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (x < t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x)); - } - - scale.domain = function(_) { - return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), scale) : [x0, x1, x2]; - }; - - scale.clamp = function(_) { - return arguments.length ? (clamp = !!_, scale) : clamp; - }; - - scale.interpolator = function(_) { - return arguments.length ? (interpolator = _, scale) : interpolator; - }; - - scale.unknown = function(_) { - return arguments.length ? (unknown = _, scale) : unknown; - }; - - return function(t) { - transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1); - return scale; - }; -} - -function diverging() { - var scale = linearish(transformer$2()(identity$3)); - - scale.copy = function() { - return copy$1(scale, diverging()); - }; - - return initInterpolator.apply(scale, arguments); -} - -function divergingLog() { - var scale = loggish(transformer$2()).domain([0.1, 1, 10]); - - scale.copy = function() { - return copy$1(scale, divergingLog()).base(scale.base()); - }; - - return initInterpolator.apply(scale, arguments); -} - -function divergingSymlog() { - var scale = symlogish(transformer$2()); - - scale.copy = function() { - return copy$1(scale, divergingSymlog()).constant(scale.constant()); - }; - - return initInterpolator.apply(scale, arguments); -} - -function divergingPow() { - var scale = powish(transformer$2()); - - scale.copy = function() { - return copy$1(scale, divergingPow()).exponent(scale.exponent()); - }; - - return initInterpolator.apply(scale, arguments); -} - -function divergingSqrt() { - return divergingPow.apply(null, arguments).exponent(0.5); -} - -function band() { - var scale = ordinal().unknown(undefined), - domain = scale.domain, - ordinalRange = scale.range, - range = [0, 1], - step, - bandwidth, - round = false, - paddingInner = 0, - paddingOuter = 0, - align = 0.5; - - delete scale.unknown; - - function rescale() { - var n = domain().length, - reverse = range[1] < range[0], - start = range[reverse - 0], - stop = range[1 - reverse], - space = bandSpace(n, paddingInner, paddingOuter); - - step = (stop - start) / (space || 1); - if (round) { - step = Math.floor(step); - } - start += (stop - start - step * (n - paddingInner)) * align; - bandwidth = step * (1 - paddingInner); - if (round) { - start = Math.round(start); - bandwidth = Math.round(bandwidth); - } - var values = sequence(n).map(function(i) { return start + step * i; }); - return ordinalRange(reverse ? values.reverse() : values); - } - - scale.domain = function(_) { - if (arguments.length) { - domain(_); - return rescale(); - } else { - return domain(); - } - }; - - scale.range = function(_) { - if (arguments.length) { - range = [+_[0], +_[1]]; - return rescale(); - } else { - return range.slice(); - } - }; - - scale.rangeRound = function(_) { - range = [+_[0], +_[1]]; - round = true; - return rescale(); - }; - - scale.bandwidth = function() { - return bandwidth; - }; - - scale.step = function() { - return step; - }; - - scale.round = function(_) { - if (arguments.length) { - round = !!_; - return rescale(); - } else { - return round; - } - }; - - scale.padding = function(_) { - if (arguments.length) { - paddingOuter = Math.max(0, Math.min(1, _)); - paddingInner = paddingOuter; - return rescale(); - } else { - return paddingInner; - } - }; - - scale.paddingInner = function(_) { - if (arguments.length) { - paddingInner = Math.max(0, Math.min(1, _)); - return rescale(); - } else { - return paddingInner; - } - }; - - scale.paddingOuter = function(_) { - if (arguments.length) { - paddingOuter = Math.max(0, Math.min(1, _)); - return rescale(); - } else { - return paddingOuter; - } - }; - - scale.align = function(_) { - if (arguments.length) { - align = Math.max(0, Math.min(1, _)); - return rescale(); - } else { - return align; - } - }; - - scale.invertRange = function(_) { - // bail if range has null or undefined values - if (_[0] == null || _[1] == null) return; - - var lo = +_[0], - hi = +_[1], - reverse = range[1] < range[0], - values = reverse ? ordinalRange().reverse() : ordinalRange(), - n = values.length - 1, a, b, t; - - // bail if either range endpoint is invalid - if (lo !== lo || hi !== hi) return; - - // order range inputs, bail if outside of scale range - if (hi < lo) { - t = lo; - lo = hi; - hi = t; - } - if (hi < values[0] || lo > range[1-reverse]) return; - - // binary search to index into scale range - a = Math.max(0, bisectRight(values, lo) - 1); - b = lo===hi ? a : bisectRight(values, hi) - 1; - - // increment index a if lo is within padding gap - if (lo - values[a] > bandwidth + 1e-10) ++a; - - if (reverse) { - // map + swap - t = a; - a = n - b; - b = n - t; - } - return (a > b) ? undefined : domain().slice(a, b+1); - }; - - scale.invert = function(_) { - var value = scale.invertRange([_, _]); - return value ? value[0] : value; - }; - - scale.copy = function() { - return band() - .domain(domain()) - .range(range) - .round(round) - .paddingInner(paddingInner) - .paddingOuter(paddingOuter) - .align(align); - }; - - return rescale(); -} - -function pointish(scale) { - var copy = scale.copy; - - scale.padding = scale.paddingOuter; - delete scale.paddingInner; - - scale.copy = function() { - return pointish(copy()); - }; - - return scale; -} - -function point$5() { - return pointish(band().paddingInner(1)); -} - -var map = Array.prototype.map; - -function numbers$2(_) { - return map.call(_, function(x) { return +x; }); -} - -var slice = Array.prototype.slice; - -function scaleBinOrdinal() { - var domain = [], - range = []; - - function scale(x) { - return x == null || x !== x - ? undefined - : range[(bisectRight(domain, x) - 1) % range.length]; - } - - scale.domain = function(_) { - if (arguments.length) { - domain = numbers$2(_); - return scale; - } else { - return domain.slice(); - } - }; - - scale.range = function(_) { - if (arguments.length) { - range = slice.call(_); - return scale; - } else { - return range.slice(); - } - }; - - scale.tickFormat = function(count, specifier) { - return spanFormat(domain[0], peek(domain), count == null ? 10 : count, specifier); - }; - - scale.copy = function() { - return scaleBinOrdinal().domain(scale.domain()).range(scale.range()); - }; - - return scale; -} - -/** - * Augment scales with their type and needed inverse methods. - */ -function create(type, constructor) { - return function scale() { - var s = constructor(); - - if (!s.invertRange) { - s.invertRange = s.invert ? invertRange(s) - : s.invertExtent ? invertRangeExtent(s) - : undefined; - } - - s.type = type; - return s; - }; -} - -function scale$1(type, scale) { - if (arguments.length > 1) { - scales[type] = create(type, scale); - return this; - } else { - return scales.hasOwnProperty(type) ? scales[type] : undefined; - } -} - -var scales = { - // identity scale - [Identity]: identity$5, - - // continuous scales - [Linear$1]: linear$1, - [Log]: log$2, - [Pow]: pow$1, - [Sqrt]: sqrt$1, - [Symlog]: symlog$1, - [Time]: time$1, - [UTC]: utcTime, - - // sequential scales - [Sequential]: sequential, // backwards compat - [Sequential+'-'+Linear$1]: sequential, - [Sequential+'-'+Log]: sequentialLog, - [Sequential+'-'+Pow]: sequentialPow, - [Sequential+'-'+Sqrt]: sequentialSqrt, - [Sequential+'-'+Symlog]: sequentialSymlog, - - // diverging scales - [Diverging+'-'+Linear$1]: diverging, - [Diverging+'-'+Log]: divergingLog, - [Diverging+'-'+Pow]: divergingPow, - [Diverging+'-'+Sqrt]: divergingSqrt, - [Diverging+'-'+Symlog]: divergingSymlog, - - // discretizing scales - [Quantile]: quantile$3, - [Quantize]: quantize$1, - [Threshold]: threshold, - - // discrete scales - [BinOrdinal]: scaleBinOrdinal, - [Ordinal]: ordinal, - [Band]: band, - [Point]: point$5 -}; - -for (var key$1 in scales) { - scale$1(key$1, scales[key$1]); -} - -const scaleProps = ['clamp', 'base', 'constant', 'exponent']; - -function interpolateRange(interpolator, range) { - var start = range[0], - span = peek(range) - start; - return function(i) { return interpolator(start + i * span); }; -} - -function interpolateColors(colors, type, gamma) { - return piecewise(interpolate$1(type || 'rgb', gamma), colors); -} - -function quantizeInterpolator(interpolator, count) { - var samples = new Array(count), - n = count + 1; - for (var i = 0; i < count;) samples[i] = interpolator(++i / n); - return samples; -} - -function scaleFraction(scale, min, max) { - var delta = max - min, i, t, s; - - if (!delta || !isFinite(delta)) { - return constant(0.5); - } else { - i = (t = scale.type).indexOf('-'); - t = i < 0 ? t : t.slice(i + 1); - s = scale$1(t)().domain([min, max]).range([0, 1]); - scaleProps.forEach(m => scale[m] ? s[m](scale[m]()) : 0); - return s; - } -} - -function interpolate$1(type, gamma) { - var interp = $$1[method(type)]; - return (gamma != null && interp && interp.gamma) - ? interp.gamma(gamma) - : interp; -} - -function method(type) { - return 'interpolate' + type.toLowerCase() - .split('-') - .map(function(s) { return s[0].toUpperCase() + s.slice(1); }) - .join(''); -} - -const continuous$1 = { - blues: 'cfe1f2bed8eca8cee58fc1de74b2d75ba3cf4592c63181bd206fb2125ca40a4a90', - greens: 'd3eecdc0e6baabdda594d3917bc77d60ba6c46ab5e329a512089430e7735036429', - greys: 'e2e2e2d4d4d4c4c4c4b1b1b19d9d9d8888887575756262624d4d4d3535351e1e1e', - oranges: 'fdd8b3fdc998fdb87bfda55efc9244f87f2cf06b18e4580bd14904b93d029f3303', - purples: 'e2e1efd4d4e8c4c5e0b4b3d6a3a0cc928ec3827cb97566ae684ea25c3696501f8c', - reds: 'fdc9b4fcb49afc9e80fc8767fa7051f6573fec3f2fdc2a25c81b1db21218970b13', - - blueGreen: 'd5efedc1e8e0a7ddd18bd2be70c6a958ba9144ad77319c5d2089460e7736036429', - bluePurple: 'ccddecbad0e4a8c2dd9ab0d4919cc98d85be8b6db28a55a6873c99822287730f71', - greenBlue: 'd3eecec5e8c3b1e1bb9bd8bb82cec269c2ca51b2cd3c9fc7288abd1675b10b60a1', - orangeRed: 'fddcaffdcf9bfdc18afdad77fb9562f67d53ee6545e24932d32d1ebf130da70403', - purpleBlue: 'dbdaebc8cee4b1c3de97b7d87bacd15b9fc93a90c01e7fb70b70ab056199045281', - purpleBlueGreen: 'dbd8eac8cee4b0c3de93b7d872acd1549fc83892bb1c88a3097f8702736b016353', - purpleRed: 'dcc9e2d3b3d7ce9eccd186c0da6bb2e14da0e23189d91e6fc61159ab07498f023a', - redPurple: 'fccfccfcbec0faa9b8f98faff571a5ec539ddb3695c41b8aa908808d0179700174', - yellowGreen: 'e4f4acd1eca0b9e2949ed68880c97c62bb6e47aa5e3297502083440e723b036034', - yellowOrangeBrown: 'feeaa1fedd84fecc63feb746fca031f68921eb7215db5e0bc54c05ab3d038f3204', - yellowOrangeRed: 'fee087fed16ffebd59fea849fd903efc7335f9522bee3423de1b20ca0b22af0225', - - blueOrange: '134b852f78b35da2cb9dcae1d2e5eff2f0ebfce0bafbbf74e8932fc5690d994a07', - brownBlueGreen: '704108a0651ac79548e3c78af3e6c6eef1eac9e9e48ed1c74da79e187a72025147', - purpleGreen: '5b1667834792a67fb6c9aed3e6d6e8eff0efd9efd5aedda971bb75368e490e5e29', - purpleOrange: '4114696647968f83b7b9b4d6dadbebf3eeeafce0bafbbf74e8932fc5690d994a07', - redBlue: '8c0d25bf363adf745ef4ae91fbdbc9f2efeed2e5ef9dcae15da2cb2f78b3134b85', - redGrey: '8c0d25bf363adf745ef4ae91fcdccbfaf4f1e2e2e2c0c0c0969696646464343434', - yellowGreenBlue: 'eff9bddbf1b4bde5b594d5b969c5be45b4c22c9ec02182b82163aa23479c1c3185', - redYellowBlue: 'a50026d4322cf16e43fcac64fedd90faf8c1dcf1ecabd6e875abd04a74b4313695', - redYellowGreen: 'a50026d4322cf16e43fcac63fedd8df9f7aed7ee8ea4d86e64bc6122964f006837', - pinkYellowGreen: '8e0152c0267edd72adf0b3d6faddedf5f3efe1f2cab6de8780bb474f9125276419', - spectral: '9e0142d13c4bf0704afcac63fedd8dfbf8b0e0f3a1a9dda269bda94288b55e4fa2', - - viridis: '440154470e61481a6c482575472f7d443a834144873d4e8a39568c35608d31688e2d708e2a788e27818e23888e21918d1f988b1fa08822a8842ab07f35b77943bf7154c56866cc5d7ad1518fd744a5db36bcdf27d2e21be9e51afde725', - magma: '0000040404130b0924150e3720114b2c11603b0f704a107957157e651a80721f817f24828c29819a2e80a8327db6377ac43c75d1426fde4968e95462f1605df76f5cfa7f5efc8f65fe9f6dfeaf78febf84fece91fddea0fcedaffcfdbf', - inferno: '0000040403130c0826170c3b240c4f330a5f420a68500d6c5d126e6b176e781c6d86216b932667a12b62ae305cbb3755c73e4cd24644dd513ae65c30ed6925f3771af8850ffb9506fca50afcb519fac62df6d645f2e661f3f484fcffa4', - plasma: '0d088723069033059742039d5002a25d01a66a00a87801a88405a7900da49c179ea72198b12a90ba3488c33d80cb4779d35171da5a69e16462e76e5bed7953f2834cf68f44fa9a3dfca636fdb32ffec029fcce25f9dc24f5ea27f0f921', - - rainbow: '6e40aa883eb1a43db3bf3cafd83fa4ee4395fe4b83ff576eff6659ff7847ff8c38f3a130e2b72fcfcc36bee044aff05b8ff4576ff65b52f6673af27828ea8d1ddfa319d0b81cbecb23abd82f96e03d82e14c6edb5a5dd0664dbf6e40aa', - sinebow: 'ff4040fc582af47218e78d0bd5a703bfbf00a7d5038de70b72f41858fc2a40ff402afc5818f4720be78d03d5a700bfbf03a7d50b8de71872f42a58fc4040ff582afc7218f48d0be7a703d5bf00bfd503a7e70b8df41872fc2a58ff4040', - - browns: 'eedbbdecca96e9b97ae4a865dc9856d18954c7784cc0673fb85536ad44339f3632', - tealBlues: 'bce4d89dd3d181c3cb65b3c245a2b9368fae347da0306a932c5985', - teals: 'bbdfdfa2d4d58ac9c975bcbb61b0af4da5a43799982b8b8c1e7f7f127273006667', - warmGreys: 'dcd4d0cec5c1c0b8b4b3aaa7a59c9998908c8b827f7e7673726866665c5a59504e', - - goldGreen: 'f4d166d5ca60b6c35c98bb597cb25760a6564b9c533f8f4f33834a257740146c36', - goldOrange: 'f4d166f8be5cf8aa4cf5983bf3852aef701be2621fd65322c54923b142239e3a26', - goldRed: 'f4d166f6be59f9aa51fc964ef6834bee734ae56249db5247cf4244c43141b71d3e', - - lightGreyRed: 'efe9e6e1dad7d5cbc8c8bdb9bbaea9cd967ddc7b43e15f19df4011dc000b', - lightGreyTeal: 'e4eaead6dcddc8ced2b7c2c7a6b4bc64b0bf22a6c32295c11f85be1876bc', - lightMulti: 'e0f1f2c4e9d0b0de9fd0e181f6e072f6c053f3993ef77440ef4a3c', - lightOrange: 'f2e7daf7d5baf9c499fab184fa9c73f68967ef7860e8645bde515bd43d5b', - lightTealBlue: 'e3e9e0c0dccf9aceca7abfc859afc0389fb9328dad2f7ca0276b95255988', - - darkBlue: '3232322d46681a5c930074af008cbf05a7ce25c0dd38daed50f3faffffff', - darkGold: '3c3c3c584b37725e348c7631ae8b2bcfa424ecc31ef9de30fff184ffffff', - darkGreen: '3a3a3a215748006f4d048942489e4276b340a6c63dd2d836ffeb2cffffaa', - darkMulti: '3737371f5287197d8c29a86995ce3fffe800ffffff', - darkRed: '3434347036339e3c38cc4037e75d1eec8620eeab29f0ce32ffeb2c' -}; - -const discrete$1 = { - category10: '1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf', - category20: '1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5', - category20b: '393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6', - category20c: '3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9', - tableau10: '4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac', - tableau20: '4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5', - accent: '7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666', - dark2: '1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666', - paired: 'a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928', - pastel1: 'fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2', - pastel2: 'b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc', - set1: 'e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999', - set2: '66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3', - set3: '8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f' -}; - -function colors(palette) { - var n = palette.length / 6 | 0, c = new Array(n), i = 0; - while (i < n) c[i] = '#' + palette.slice(i * 6, ++i * 6); - return c; -} - -function apply(_, f) { - for (let k in _) scheme(k, f(_[k])); -} - -const schemes = {}; -apply(discrete$1, colors); -apply(continuous$1, _ => interpolateColors(colors(_))); - -function scheme(name, scheme) { - name = name && name.toLowerCase(); - if (arguments.length > 1) { - schemes[name] = scheme; - return this; - } else { - return schemes[name]; - } -} - -/** - * Determine the tick count or interval function. - * @param {Scale} scale - The scale for which to generate tick values. - * @param {*} count - The desired tick count or interval specifier. - * @param {number} minStep - The desired minimum step between tick values. - * @return {*} - The tick count or interval function. - */ -function tickCount(scale, count, minStep) { - var step; - - if (isNumber(count) && minStep != null) { - count = Math.min(count, ~~(span(scale.domain()) / minStep) || 1); - } - - if (isObject(count)) { - step = count.step; - count = count.interval; - } - - if (isString(count)) { - count = timeInterval(count, scale.type) - || error('Only time and utc scales accept interval strings.'); - if (step) count = count.every(step); - } - - return count; -} - -/** - * Filter a set of candidate tick values, ensuring that only tick values - * that lie within the scale range are included. - * @param {Scale} scale - The scale for which to generate tick values. - * @param {Array<*>} ticks - The candidate tick values. - * @param {*} count - The tick count or interval function. - * @return {Array<*>} - The filtered tick values. - */ -function validTicks(scale, ticks, count) { - var range = scale.range(), - lo = Math.floor(range[0]), - hi = Math.ceil(peek(range)); - - if (lo > hi) { - range = hi; - hi = lo; - lo = range; - } - - ticks = ticks.filter(function(v) { - v = scale(v); - return lo <= v && v <= hi; - }); - - if (count > 0 && ticks.length > 1) { - var endpoints = [ticks[0], peek(ticks)]; - while (ticks.length > count && ticks.length >= 3) { - ticks = ticks.filter(function(_, i) { return !(i % 2); }); - } - if (ticks.length < 3) { - ticks = endpoints; - } - } - - return ticks; -} - -/** - * Generate tick values for the given scale and approximate tick count or - * interval value. If the scale has a 'ticks' method, it will be used to - * generate the ticks, with the count argument passed as a parameter. If the - * scale lacks a 'ticks' method, the full scale domain will be returned. - * @param {Scale} scale - The scale for which to generate tick values. - * @param {*} [count] - The approximate number of desired ticks. - * @return {Array<*>} - The generated tick values. - */ -function tickValues(scale, count) { - return scale.bins ? validTicks(scale, binValues(scale.bins, count)) - : scale.ticks ? scale.ticks(count) - : scale.domain(); -} - -/** - * Generate tick values for an array of bin values. - * @param {Array<*>} bins - An array of bin boundaries. - * @param {Number} [count] - The approximate number of desired ticks. - * @return {Array<*>} - The generated tick values. - */ -function binValues(bins, count) { - var n = bins.length, - stride = ~~(n / (count || n)); - - return stride < 2 - ? bins.slice() - : bins.filter(function(x, i) { return !(i % stride); }); -} - -/** - * Generate a label format function for a scale. If the scale has a - * 'tickFormat' method, it will be used to generate the formatter, with the - * count and specifier arguments passed as parameters. If the scale lacks a - * 'tickFormat' method, the returned formatter performs simple string coercion. - * If the input scale is a logarithmic scale and the format specifier does not - * indicate a desired decimal precision, a special variable precision formatter - * that automatically trims trailing zeroes will be generated. - * @param {Scale} scale - The scale for which to generate the label formatter. - * @param {*} [count] - The approximate number of desired ticks. - * @param {string} [specifier] - The format specifier. Must be a legal d3 - * specifier string (see https://github.com/d3/d3-format#formatSpecifier). - * @return {function(*):string} - The generated label formatter. - */ -function tickFormat(scale, count, specifier, formatType) { - var format = scale.tickFormat ? scale.tickFormat(count, specifier) - : specifier && formatType === Time ? timeFormat(specifier) - : specifier ? format$1(specifier) - : String; - - if (isLogarithmic(scale.type)) { - var logfmt = variablePrecision(specifier); - format = scale.bins ? logfmt : filter$1(format, logfmt); - } - - return format; -} - -function filter$1(sourceFormat, targetFormat) { - return function(_) { - return sourceFormat(_) ? targetFormat(_) : ''; - }; -} - -function variablePrecision(specifier) { - var s = formatSpecifier(specifier || ','); - - if (s.precision == null) { - s.precision = 12; - switch (s.type) { - case '%': s.precision -= 2; break; - case 'e': s.precision -= 1; break; - } - return trimZeroes( - format$1(s), // number format - format$1('.1f')(1)[1] // decimal point character - ); - } else { - return format$1(s); - } -} - -function trimZeroes(format, decimalChar) { - return function(x) { - var str = format(x), - dec = str.indexOf(decimalChar), - idx, end; - - if (dec < 0) return str; - - idx = rightmostDigit(str, dec); - end = idx < str.length ? str.slice(idx) : ''; - while (--idx > dec) if (str[idx] !== '0') { ++idx; break; } - - return str.slice(0, idx) + end; - }; -} - -function rightmostDigit(str, dec) { - var i = str.lastIndexOf('e'), c; - if (i > 0) return i; - for (i=str.length; --i > dec;) { - c = str.charCodeAt(i); - if (c >= 48 && c <= 57) return i + 1; // is digit - } -} - -/** - * Generates axis ticks for visualizing a spatial scale. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {Scale} params.scale - The scale to generate ticks for. - * @param {*} [params.count=10] - The approximate number of ticks, or - * desired tick interval, to use. - * @param {Array<*>} [params.values] - The exact tick values to use. - * These must be legal domain values for the provided scale. - * If provided, the count argument is ignored. - * @param {function(*):string} [params.formatSpecifier] - A format specifier - * to use in conjunction with scale.tickFormat. Legal values are - * any valid d3 4.0 format specifier. - * @param {function(*):string} [params.format] - The format function to use. - * If provided, the formatSpecifier argument is ignored. - */ -function AxisTicks(params) { - Transform.call(this, null, params); -} - -var prototype$T = inherits(AxisTicks, Transform); - -prototype$T.transform = function(_, pulse) { - if (this.value && !_.modified()) { - return pulse.StopPropagation; - } - - var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS), - ticks = this.value, - scale = _.scale, - tally = _.count == null ? (_.values ? _.values.length : 10) : _.count, - count = tickCount(scale, tally, _.minstep), - format = _.format || tickFormat(scale, count, _.formatSpecifier, _.formatType), - values = _.values ? validTicks(scale, _.values, count) : tickValues(scale, count); - - if (ticks) out.rem = ticks; - - ticks = values.map(function(value, i) { - return ingest({ - index: i / (values.length - 1 || 1), - value: value, - label: format(value) - }); - }); - - if (_.extra && ticks.length) { - // add an extra tick pegged to the initial domain value - // this is used to generate axes with 'binned' domains - ticks.push(ingest({ - index: -1, - extra: {value: ticks[0].value}, - label: '' - })); - } - - out.source = ticks; - out.add = ticks; - this.value = ticks; - - return out; -}; - -/** - * Joins a set of data elements against a set of visual items. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {function(object): object} [params.item] - An item generator function. - * @param {function(object): *} [params.key] - The key field associating data and visual items. - */ -function DataJoin(params) { - Transform.call(this, null, params); -} - -var prototype$U = inherits(DataJoin, Transform); - -function defaultItemCreate() { - return ingest({}); -} - -function isExit(t) { - return t.exit; -} - -prototype$U.transform = function(_, pulse) { - var df = pulse.dataflow, - out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS), - item = _.item || defaultItemCreate, - key = _.key || tupleid, - map = this.value; - - // prevent transient (e.g., hover) requests from - // cascading across marks derived from marks - if (isArray(out.encode)) { - out.encode = null; - } - - if (map && (_.modified('key') || pulse.modified(key))) { - error('DataJoin does not support modified key function or fields.'); - } - - if (!map) { - pulse = pulse.addAll(); - this.value = map = fastmap().test(isExit); - map.lookup = function(t) { return map.get(key(t)); }; - } - - pulse.visit(pulse.ADD, function(t) { - var k = key(t), - x = map.get(k); - - if (x) { - if (x.exit) { - map.empty--; - out.add.push(x); - } else { - out.mod.push(x); - } - } else { - map.set(k, (x = item(t))); - out.add.push(x); - } - - x.datum = t; - x.exit = false; - }); - - pulse.visit(pulse.MOD, function(t) { - var k = key(t), - x = map.get(k); - - if (x) { - x.datum = t; - out.mod.push(x); - } - }); - - pulse.visit(pulse.REM, function(t) { - var k = key(t), - x = map.get(k); - - if (t === x.datum && !x.exit) { - out.rem.push(x); - x.exit = true; - ++map.empty; - } - }); - - if (pulse.changed(pulse.ADD_MOD)) out.modifies('datum'); - - if (_.clean && map.empty > df.cleanThreshold) df.runAfter(map.clean); - - return out; -}; - -/** - * Invokes encoding functions for visual items. - * @constructor - * @param {object} params - The parameters to the encoding functions. This - * parameter object will be passed through to all invoked encoding functions. - * @param {object} [params.mod=false] - Flag indicating if tuples in the input - * mod set that are unmodified by encoders should be included in the output. - * @param {object} param.encoders - The encoding functions - * @param {function(object, object): boolean} [param.encoders.update] - Update encoding set - * @param {function(object, object): boolean} [param.encoders.enter] - Enter encoding set - * @param {function(object, object): boolean} [param.encoders.exit] - Exit encoding set - */ -function Encode(params) { - Transform.call(this, null, params); -} - -var prototype$V = inherits(Encode, Transform); - -prototype$V.transform = function(_, pulse) { - var out = pulse.fork(pulse.ADD_REM), - fmod = _.mod || false, - encoders = _.encoders, - encode = pulse.encode; - - // if an array, the encode directive includes additional sets - // that must be defined in order for the primary set to be invoked - // e.g., only run the update set if the hover set is defined - if (isArray(encode)) { - if (out.changed() || encode.every(function(e) { return encoders[e]; })) { - encode = encode[0]; - out.encode = null; // consume targeted encode directive - } else { - return pulse.StopPropagation; - } - } - - // marshall encoder functions - var reenter = encode === 'enter', - update = encoders.update || falsy, - enter = encoders.enter || falsy, - exit = encoders.exit || falsy, - set = (encode && !reenter ? encoders[encode] : update) || falsy; - - if (pulse.changed(pulse.ADD)) { - pulse.visit(pulse.ADD, function(t) { enter(t, _); update(t, _); }); - out.modifies(enter.output); - out.modifies(update.output); - if (set !== falsy && set !== update) { - pulse.visit(pulse.ADD, function(t) { set(t, _); }); - out.modifies(set.output); - } - } - - if (pulse.changed(pulse.REM) && exit !== falsy) { - pulse.visit(pulse.REM, function(t) { exit(t, _); }); - out.modifies(exit.output); - } - - if (reenter || set !== falsy) { - var flag = pulse.MOD | (_.modified() ? pulse.REFLOW : 0); - if (reenter) { - pulse.visit(flag, function(t) { - var mod = enter(t, _) || fmod; - if (set(t, _) || mod) out.mod.push(t); - }); - if (out.mod.length) out.modifies(enter.output); - } else { - pulse.visit(flag, function(t) { - if (set(t, _) || fmod) out.mod.push(t); - }); - } - if (out.mod.length) out.modifies(set.output); - } - - return out.changed() ? out : pulse.StopPropagation; -}; - -var Symbols$1 = 'symbol'; -var Discrete = 'discrete'; -var Gradient$1 = 'gradient'; - -const symbols$1 = { - [Quantile]: 'quantiles', - [Quantize]: 'thresholds', - [Threshold]: 'domain' -}; - -const formats$1 = { - [Quantile]: 'quantiles', - [Quantize]: 'domain' -}; - -function labelValues(scale, count) { - return scale.bins ? binValues$1(scale.bins) - : symbols$1[scale.type] ? thresholdValues(scale[symbols$1[scale.type]]()) - : tickValues(scale, count); -} - -function thresholdFormat(scale, specifier) { - var _ = scale[formats$1[scale.type]](), - n = _.length, - d = n > 1 ? _[1] - _[0] : _[0], i; - - for (i=1; i} [params.values] - The exact tick values to use. - * These must be legal domain values for the provided scale. - * If provided, the count argument is ignored. - * @param {string} [params.formatSpecifier] - A format specifier - * to use in conjunction with scale.tickFormat. Legal values are - * any valid D3 format specifier string. - * @param {function(*):string} [params.format] - The format function to use. - * If provided, the formatSpecifier argument is ignored. - */ -function LegendEntries(params) { - Transform.call(this, [], params); -} - -var prototype$W = inherits(LegendEntries, Transform); - -prototype$W.transform = function(_, pulse) { - if (this.value != null && !_.modified()) { - return pulse.StopPropagation; - } - - var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS), - items = this.value, - type = _.type || Symbols$1, - scale = _.scale, - count = tickCount(scale, _.count == null ? 5 : _.count, _.minstep), - format = _.format || labelFormat(scale, count, type, _.formatSpecifier, _.formatType), - values = _.values || labelValues(scale, count, type), - domain, fraction, size, offset; - - if (items) out.rem = items; - - if (type === Symbols$1) { - if (isFunction(size = _.size)) { - // if first value maps to size zero, remove from list (vega#717) - if (!_.values && scale(values[0]) === 0) { - values = values.slice(1); - } - // compute size offset for legend entries - offset = values.reduce(function(max, value) { - return Math.max(max, size(value, _)); - }, 0); - } else { - size = constant(offset = size || 8); - } - - items = values.map(function(value, index) { - return ingest({ - index: index, - label: format(value, index, values), - value: value, - offset: offset, - size: size(value, _) - }); - }); - } - - else if (type === Gradient$1) { - domain = scale.domain(), - fraction = scaleFraction(scale, domain[0], peek(domain)); - - // if automatic label generation produces 2 or fewer values, - // use the domain end points instead (fixes vega/vega#1364) - if (values.length < 3 && !_.values && domain[0] !== peek(domain)) { - values = [domain[0], peek(domain)]; - } - - items = values.map(function(value, index) { - return ingest({ - index: index, - label: format(value, index, values), - value: value, - perc: fraction(value) - }); - }); - } - - else { - size = values.length - 1; - fraction = labelFraction(scale); - - items = values.map(function(value, index) { - return ingest({ - index: index, - label: format(value, index, values), - value: value, - perc: index ? fraction(value) : 0, - perc2: index === size ? 1 : fraction(values[index+1]) - }); - }); - } - - out.source = items; - out.add = items; - this.value = items; - - return out; -}; - -var Paths = fastmap({ - 'line': line$2, - 'line-radial': lineR, - 'arc': arc$2, - 'arc-radial': arcR, - 'curve': curve, - 'curve-radial': curveR, - 'orthogonal-horizontal': orthoX, - 'orthogonal-vertical': orthoY, - 'orthogonal-radial': orthoR, - 'diagonal-horizontal': diagonalX, - 'diagonal-vertical': diagonalY, - 'diagonal-radial': diagonalR -}); - -function sourceX(t) { return t.source.x; } -function sourceY(t) { return t.source.y; } -function targetX(t) { return t.target.x; } -function targetY(t) { return t.target.y; } - - /** - * Layout paths linking source and target elements. - * @constructor - * @param {object} params - The parameters for this operator. - */ -function LinkPath(params) { - Transform.call(this, {}, params); -} - -LinkPath.Definition = { - "type": "LinkPath", - "metadata": {"modifies": true}, - "params": [ - { "name": "sourceX", "type": "field", "default": "source.x" }, - { "name": "sourceY", "type": "field", "default": "source.y" }, - { "name": "targetX", "type": "field", "default": "target.x" }, - { "name": "targetY", "type": "field", "default": "target.y" }, - { "name": "orient", "type": "enum", "default": "vertical", - "values": ["horizontal", "vertical", "radial"] }, - { "name": "shape", "type": "enum", "default": "line", - "values": ["line", "arc", "curve", "diagonal", "orthogonal"] }, - { "name": "require", "type": "signal" }, - { "name": "as", "type": "string", "default": "path" } - ] -}; - -var prototype$X = inherits(LinkPath, Transform); - -prototype$X.transform = function(_, pulse) { - var sx = _.sourceX || sourceX, - sy = _.sourceY || sourceY, - tx = _.targetX || targetX, - ty = _.targetY || targetY, - as = _.as || 'path', - orient = _.orient || 'vertical', - shape = _.shape || 'line', - path = Paths.get(shape + '-' + orient) || Paths.get(shape); - - if (!path) { - error('LinkPath unsupported type: ' + _.shape - + (_.orient ? '-' + _.orient : '')); - } - - pulse.visit(pulse.SOURCE, function(t) { - t[as] = path(sx(t), sy(t), tx(t), ty(t)); - }); - - return pulse.reflow(_.modified()).modifies(as); -}; - -// -- Link Path Generation Methods ----- - -function line$2(sx, sy, tx, ty) { - return 'M' + sx + ',' + sy + - 'L' + tx + ',' + ty; -} - -function lineR(sa, sr, ta, tr) { - return line$2( - sr * Math.cos(sa), sr * Math.sin(sa), - tr * Math.cos(ta), tr * Math.sin(ta) - ); -} - -function arc$2(sx, sy, tx, ty) { - var dx = tx - sx, - dy = ty - sy, - rr = Math.sqrt(dx * dx + dy * dy) / 2, - ra = 180 * Math.atan2(dy, dx) / Math.PI; - return 'M' + sx + ',' + sy + - 'A' + rr + ',' + rr + - ' ' + ra + ' 0 1' + - ' ' + tx + ',' + ty; -} - -function arcR(sa, sr, ta, tr) { - return arc$2( - sr * Math.cos(sa), sr * Math.sin(sa), - tr * Math.cos(ta), tr * Math.sin(ta) - ); -} - -function curve(sx, sy, tx, ty) { - var dx = tx - sx, - dy = ty - sy, - ix = 0.2 * (dx + dy), - iy = 0.2 * (dy - dx); - return 'M' + sx + ',' + sy + - 'C' + (sx+ix) + ',' + (sy+iy) + - ' ' + (tx+iy) + ',' + (ty-ix) + - ' ' + tx + ',' + ty; -} - -function curveR(sa, sr, ta, tr) { - return curve( - sr * Math.cos(sa), sr * Math.sin(sa), - tr * Math.cos(ta), tr * Math.sin(ta) - ); -} - -function orthoX(sx, sy, tx, ty) { - return 'M' + sx + ',' + sy + - 'V' + ty + 'H' + tx; -} - -function orthoY(sx, sy, tx, ty) { - return 'M' + sx + ',' + sy + - 'H' + tx + 'V' + ty; -} - -function orthoR(sa, sr, ta, tr) { - var sc = Math.cos(sa), - ss = Math.sin(sa), - tc = Math.cos(ta), - ts = Math.sin(ta), - sf = Math.abs(ta - sa) > Math.PI ? ta <= sa : ta > sa; - return 'M' + (sr*sc) + ',' + (sr*ss) + - 'A' + sr + ',' + sr + ' 0 0,' + (sf?1:0) + - ' ' + (sr*tc) + ',' + (sr*ts) + - 'L' + (tr*tc) + ',' + (tr*ts); -} - -function diagonalX(sx, sy, tx, ty) { - var m = (sx + tx) / 2; - return 'M' + sx + ',' + sy + - 'C' + m + ',' + sy + - ' ' + m + ',' + ty + - ' ' + tx + ',' + ty; -} - -function diagonalY(sx, sy, tx, ty) { - var m = (sy + ty) / 2; - return 'M' + sx + ',' + sy + - 'C' + sx + ',' + m + - ' ' + tx + ',' + m + - ' ' + tx + ',' + ty; -} - -function diagonalR(sa, sr, ta, tr) { - var sc = Math.cos(sa), - ss = Math.sin(sa), - tc = Math.cos(ta), - ts = Math.sin(ta), - mr = (sr + tr) / 2; - return 'M' + (sr*sc) + ',' + (sr*ss) + - 'C' + (mr*sc) + ',' + (mr*ss) + - ' ' + (mr*tc) + ',' + (mr*ts) + - ' ' + (tr*tc) + ',' + (tr*ts); -} - -function ascending$5(a, b) { - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; -} - -function bisector$5(compare) { - if (compare.length === 1) compare = ascendingComparator$5(compare); - return { - left: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) < 0) lo = mid + 1; - else hi = mid; - } - return lo; - }, - right: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) > 0) hi = mid; - else lo = mid + 1; - } - return lo; - } - }; -} - -function ascendingComparator$5(f) { - return function(d, x) { - return ascending$5(f(d), x); - }; -} - -var ascendingBisect$5 = bisector$5(ascending$5); - -function sequence$1(start, stop, step) { - start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step; - - var i = -1, - n = Math.max(0, Math.ceil((stop - start) / step)) | 0, - range = new Array(n); - - while (++i < n) { - range[i] = start + i * step; - } - - return range; -} - -function sum(values, valueof) { - let sum = 0; - if (valueof === undefined) { - for (let value of values) { - if (value = +value) { - sum += value; - } - } - } else { - let index = -1; - for (let value of values) { - if (value = +valueof(value, ++index, values)) { - sum += value; - } - } - } - return sum; -} - -/** - * Pie and donut chart layout. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {function(object): *} params.field - The value field to size pie segments. - * @param {number} [params.startAngle=0] - The start angle (in radians) of the layout. - * @param {number} [params.endAngle=2π] - The end angle (in radians) of the layout. - * @param {boolean} [params.sort] - Boolean flag for sorting sectors by value. - */ -function Pie(params) { - Transform.call(this, null, params); -} - -Pie.Definition = { - "type": "Pie", - "metadata": {"modifies": true}, - "params": [ - { "name": "field", "type": "field" }, - { "name": "startAngle", "type": "number", "default": 0 }, - { "name": "endAngle", "type": "number", "default": 6.283185307179586 }, - { "name": "sort", "type": "boolean", "default": false }, - { "name": "as", "type": "string", "array": true, "length": 2, "default": ["startAngle", "endAngle"] } - ] -}; - -var prototype$Y = inherits(Pie, Transform); - -prototype$Y.transform = function(_, pulse) { - var as = _.as || ['startAngle', 'endAngle'], - startAngle = as[0], - endAngle = as[1], - field = _.field || one, - start = _.startAngle || 0, - stop = _.endAngle != null ? _.endAngle : 2 * Math.PI, - data = pulse.source, - values = data.map(field), - n = values.length, - a = start, - k = (stop - start) / sum(values), - index = sequence$1(n), - i, t, v; - - if (_.sort) { - index.sort(function(a, b) { - return values[a] - values[b]; - }); - } - - for (i=0; i -1) return raw; - - var domain = _.domain, - type = scale.type, - zero = _.zero || (_.zero === undefined && includeZero(scale)), - n, mid; - - if (!domain) return 0; - - // adjust continuous domain for minimum pixel padding - if (includePad(type) && _.padding && domain[0] !== peek(domain)) { - domain = padDomain(type, domain, _.range, _.padding, _.exponent, _.constant); - } - - // adjust domain based on zero, min, max settings - if (zero || _.domainMin != null || _.domainMax != null || _.domainMid != null) { - n = ((domain = domain.slice()).length - 1) || 1; - if (zero) { - if (domain[0] > 0) domain[0] = 0; - if (domain[n] < 0) domain[n] = 0; - } - if (_.domainMin != null) domain[0] = _.domainMin; - if (_.domainMax != null) domain[n] = _.domainMax; - - if (_.domainMid != null) { - mid = _.domainMid; - if (mid < domain[0] || mid > domain[n]) { - df.warn('Scale domainMid exceeds domain min or max.', mid); - } - domain.splice(n, 0, mid); - } - } - - // set the scale domain - scale.domain(domainCheck(type, domain, df)); - - // if ordinal scale domain is defined, prevent implicit - // domain construction as side-effect of scale lookup - if (type === Ordinal) { - scale.unknown(_.domainImplicit ? implicit : undefined); - } - - // perform 'nice' adjustment as requested - if (_.nice && scale.nice) { - scale.nice((_.nice !== true && tickCount(scale, _.nice)) || null); - } - - // return the cardinality of the domain - return domain.length; -} - -function rawDomain(scale, raw, df) { - if (raw) { - scale.domain(domainCheck(scale.type, raw, df)); - return raw.length; - } else { - return -1; - } -} - -function padDomain(type, domain, range, pad, exponent, constant) { - var span = Math.abs(peek(range) - range[0]), - frac = span / (span - 2 * pad), - d = type === Log ? zoomLog(domain, null, frac) - : type === Sqrt ? zoomPow(domain, null, frac, 0.5) - : type === Pow ? zoomPow(domain, null, frac, exponent || 1) - : type === Symlog ? zoomSymlog(domain, null, frac, constant || 1) - : zoomLinear(domain, null, frac); - - domain = domain.slice(); - domain[0] = d[0]; - domain[domain.length-1] = d[1]; - return domain; -} - -function domainCheck(type, domain, df) { - if (isLogarithmic(type)) { - // sum signs of domain values - // if all pos or all neg, abs(sum) === domain.length - var s = Math.abs(domain.reduce(function(s, v) { - return s + (v < 0 ? -1 : v > 0 ? 1 : 0); - }, 0)); - - if (s !== domain.length) { - df.warn('Log scale domain includes zero: ' + $(domain)); - } - } - return domain; -} - -function configureBins(scale, _, count) { - let bins = _.bins; - - if (bins && !isArray(bins)) { - // generate bin boundary array - const domain = (bins.start == null || bins.stop == null) && scale.domain(), - start = bins.start == null ? domain[0] : bins.start, - stop = bins.stop == null ? peek(domain) : bins.stop, - step = bins.step; - - if (!step) error('Scale bins parameter missing step property.'); - bins = sequence$1(start, stop + step, step); - } - - if (bins) { - // assign bin boundaries to scale instance - scale.bins = bins; - } else if (scale.bins) { - // no current bins, remove bins if previously set - delete scale.bins; - } - - // special handling for bin-ordinal scales - if (scale.type === BinOrdinal) { - if (!bins) { - // the domain specifies the bins - scale.bins = scale.domain(); - } else if (!_.domain && !_.domainRaw) { - // the bins specify the domain - scale.domain(bins); - count = bins.length; - } - } - - // return domain cardinality - return count; -} - -function configureRange(scale, _, count) { - var round = _.round || false, - range = _.range; - - // if range step specified, calculate full range extent - if (_.rangeStep != null) { - range = configureRangeStep(scale.type, _, count); - } - - // else if a range scheme is defined, use that - else if (_.scheme) { - range = configureScheme(scale.type, _, count); - if (isFunction(range)) return scale.interpolator(range); - } - - // given a range array for an interpolating scale, convert to interpolator - else if (range && isInterpolating(scale.type)) { - return scale.interpolator( - interpolateColors(flip(range, _.reverse), _.interpolate, _.interpolateGamma) - ); - } - - // configure rounding / interpolation - if (range && _.interpolate && scale.interpolate) { - scale.interpolate(interpolate$1(_.interpolate, _.interpolateGamma)); - } else if (isFunction(scale.round)) { - scale.round(round); - } else if (isFunction(scale.rangeRound)) { - scale.interpolate(round ? interpolateRound : interpolate); - } - - if (range) scale.range(flip(range, _.reverse)); -} - -function configureRangeStep(type, _, count) { - if (type !== Band && type !== Point) { - error('Only band and point scales support rangeStep.'); - } - - // calculate full range based on requested step size and padding - var outer = (_.paddingOuter != null ? _.paddingOuter : _.padding) || 0, - inner = type === Point ? 1 - : ((_.paddingInner != null ? _.paddingInner : _.padding) || 0); - return [0, _.rangeStep * bandSpace(count, inner, outer)]; -} - -function configureScheme(type, _, count) { - var extent = _.schemeExtent, - name, scheme$1; - - if (isArray(_.scheme)) { - scheme$1 = interpolateColors(_.scheme, _.interpolate, _.interpolateGamma); - } else { - name = _.scheme.toLowerCase(); - scheme$1 = scheme(name); - if (!scheme$1) error('Unrecognized scheme name: ' + _.scheme); - } - - // determine size for potential discrete range - count = (type === Threshold) ? count + 1 - : (type === BinOrdinal) ? count - 1 - : (type === Quantile || type === Quantize) ? (+_.schemeCount || DEFAULT_COUNT) - : count; - - // adjust and/or quantize scheme as appropriate - return isInterpolating(type) ? adjustScheme(scheme$1, extent, _.reverse) - : isFunction(scheme$1) ? quantizeInterpolator(adjustScheme(scheme$1, extent), count) - : type === Ordinal ? scheme$1 : scheme$1.slice(0, count); -} - -function adjustScheme(scheme, extent, reverse) { - return (isFunction(scheme) && (extent || reverse)) - ? interpolateRange(scheme, flip(extent || [0, 1], reverse)) - : scheme; -} - -function flip(array, reverse) { - return reverse ? array.slice().reverse() : array; -} - -/** - * Sorts scenegraph items in the pulse source array. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {function(*,*): number} [params.sort] - A comparator - * function for sorting tuples. - */ -function SortItems(params) { - Transform.call(this, null, params); -} - -var prototype$_ = inherits(SortItems, Transform); - -prototype$_.transform = function(_, pulse) { - var mod = _.modified('sort') - || pulse.changed(pulse.ADD) - || pulse.modified(_.sort.fields) - || pulse.modified('datum'); - - if (mod) pulse.source.sort(_.sort); - - this.modified(mod); - return pulse; -}; - -var Zero = 'zero', - Center = 'center', - Normalize = 'normalize', - DefOutput = ['y0', 'y1']; - -/** - * Stack layout for visualization elements. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {function(object): *} params.field - The value field to stack. - * @param {Array} [params.groupby] - An array of accessors to groupby. - * @param {function(object,object): number} [params.sort] - A comparator for stack sorting. - * @param {string} [offset='zero'] - One of 'zero', 'center', 'normalize'. - */ -function Stack(params) { - Transform.call(this, null, params); -} - -Stack.Definition = { - "type": "Stack", - "metadata": {"modifies": true}, - "params": [ - { "name": "field", "type": "field" }, - { "name": "groupby", "type": "field", "array": true }, - { "name": "sort", "type": "compare" }, - { "name": "offset", "type": "enum", "default": Zero, "values": [Zero, Center, Normalize] }, - { "name": "as", "type": "string", "array": true, "length": 2, "default": DefOutput } - ] -}; - -var prototype$$ = inherits(Stack, Transform); - -prototype$$.transform = function(_, pulse) { - var as = _.as || DefOutput, - y0 = as[0], - y1 = as[1], - field = _.field || one, - stack = _.offset === Center ? stackCenter - : _.offset === Normalize ? stackNormalize - : stackZero, - groups, i, n, max; - - // partition, sum, and sort the stack groups - groups = partition$2(pulse.source, _.groupby, _.sort, field); - - // compute stack layouts per group - for (i=0, n=groups.length, max=groups.max; i max) max = s; - if (sort) g.sort(sort); - } - groups.max = max; - - return groups; -} - - - -var encode = /*#__PURE__*/Object.freeze({ - axisticks: AxisTicks, - datajoin: DataJoin, - encode: Encode, - legendentries: LegendEntries, - linkpath: LinkPath, - pie: Pie, - scale: Scale, - sortitems: SortItems, - stack: Stack, - validTicks: validTicks -}); - -function ascending$6(a, b) { - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; -} - -function bisector$6(compare) { - if (compare.length === 1) compare = ascendingComparator$6(compare); - return { - left: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) < 0) lo = mid + 1; - else hi = mid; - } - return lo; - }, - right: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) > 0) hi = mid; - else lo = mid + 1; - } - return lo; - } - }; -} - -function ascendingComparator$6(f) { - return function(d, x) { - return ascending$6(f(d), x); - }; -} - -var ascendingBisect$6 = bisector$6(ascending$6); - -function extent$3(values, valueof) { - let min; - let max; - if (valueof === undefined) { - for (const value of values) { - if (value != null) { - if (min === undefined) { - if (value >= value) min = max = value; - } else { - if (min > value) min = value; - if (max < value) max = value; - } - } - } - } else { - let index = -1; - for (let value of values) { - if ((value = valueof(value, ++index, values)) != null) { - if (min === undefined) { - if (value >= value) min = max = value; - } else { - if (min > value) min = value; - if (max < value) max = value; - } - } - } - } - return [min, max]; -} - -function ascending$7(a, b) { - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; -} - -function bisector$7(compare) { - if (compare.length === 1) compare = ascendingComparator$7(compare); - return { - left: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) < 0) lo = mid + 1; - else hi = mid; - } - return lo; - }, - right: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) > 0) hi = mid; - else lo = mid + 1; - } - return lo; - } - }; -} - -function ascendingComparator$7(f) { - return function(d, x) { - return ascending$7(f(d), x); - }; -} - -var ascendingBisect$7 = bisector$7(ascending$7); - -function extent$4(values, valueof) { - var n = values.length, - i = -1, - value, - min, - max; - - if (valueof == null) { - while (++i < n) { // Find the first comparable value. - if ((value = values[i]) != null && value >= value) { - min = max = value; - while (++i < n) { // Compare the remaining values. - if ((value = values[i]) != null) { - if (min > value) min = value; - if (max < value) max = value; - } - } - } - } - } - - else { - while (++i < n) { // Find the first comparable value. - if ((value = valueof(values[i], i, values)) != null && value >= value) { - min = max = value; - while (++i < n) { // Compare the remaining values. - if ((value = valueof(values[i], i, values)) != null) { - if (min > value) min = value; - if (max < value) max = value; - } - } - } - } - } - - return [min, max]; -} - -function range$1(start, stop, step) { - start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step; - - var i = -1, - n = Math.max(0, Math.ceil((stop - start) / step)) | 0, - range = new Array(n); - - while (++i < n) { - range[i] = start + i * step; - } - - return range; -} - -var e10$1 = Math.sqrt(50), - e5$1 = Math.sqrt(10), - e2$1 = Math.sqrt(2); - -function tickStep$1(start, stop, count) { - var step0 = Math.abs(stop - start) / Math.max(0, count), - step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)), - error = step0 / step1; - if (error >= e10$1) step1 *= 10; - else if (error >= e5$1) step1 *= 5; - else if (error >= e2$1) step1 *= 2; - return stop < start ? -step1 : step1; -} - -function thresholdSturges(values) { - return Math.ceil(Math.log(values.length) / Math.LN2) + 1; -} - -function max$3(values, valueof) { - var n = values.length, - i = -1, - value, - max; - - if (valueof == null) { - while (++i < n) { // Find the first comparable value. - if ((value = values[i]) != null && value >= value) { - max = value; - while (++i < n) { // Compare the remaining values. - if ((value = values[i]) != null && value > max) { - max = value; - } - } - } - } - } - - else { - while (++i < n) { // Find the first comparable value. - if ((value = valueof(values[i], i, values)) != null && value >= value) { - max = value; - while (++i < n) { // Compare the remaining values. - if ((value = valueof(values[i], i, values)) != null && value > max) { - max = value; - } - } - } - } - } - - return max; -} - -var array$2 = Array.prototype; - -var slice$1 = array$2.slice; - -function ascending$8(a, b) { - return a - b; -} - -function area$2(ring) { - var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1]; - while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1]; - return area; -} - -function constant$5(x) { - return function() { - return x; - }; -} - -function contains(ring, hole) { - var i = -1, n = hole.length, c; - while (++i < n) if (c = ringContains(ring, hole[i])) return c; - return 0; -} - -function ringContains(ring, point) { - var x = point[0], y = point[1], contains = -1; - for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) { - var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1]; - if (segmentContains(pi, pj, point)) return 0; - if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains; - } - return contains; -} - -function segmentContains(a, b, c) { - var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]); -} - -function collinear(a, b, c) { - return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]); -} - -function within(p, q, r) { - return p <= q && q <= r || r <= q && q <= p; -} - -function noop$2() {} - -var cases = [ - [], - [[[1.0, 1.5], [0.5, 1.0]]], - [[[1.5, 1.0], [1.0, 1.5]]], - [[[1.5, 1.0], [0.5, 1.0]]], - [[[1.0, 0.5], [1.5, 1.0]]], - [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]], - [[[1.0, 0.5], [1.0, 1.5]]], - [[[1.0, 0.5], [0.5, 1.0]]], - [[[0.5, 1.0], [1.0, 0.5]]], - [[[1.0, 1.5], [1.0, 0.5]]], - [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]], - [[[1.5, 1.0], [1.0, 0.5]]], - [[[0.5, 1.0], [1.5, 1.0]]], - [[[1.0, 1.5], [1.5, 1.0]]], - [[[0.5, 1.0], [1.0, 1.5]]], - [] -]; - -function contours() { - var dx = 1, - dy = 1, - threshold = thresholdSturges, - smooth = smoothLinear; - - function contours(values) { - var tz = threshold(values); - - // Convert number of thresholds into uniform thresholds. - if (!Array.isArray(tz)) { - var domain = extent$4(values), start = domain[0], stop = domain[1]; - tz = tickStep$1(start, stop, tz); - tz = range$1(Math.floor(start / tz) * tz, Math.floor(stop / tz) * tz, tz); - } else { - tz = tz.slice().sort(ascending$8); - } - - return tz.map(function(value) { - return contour(values, value); - }); - } - - // Accumulate, smooth contour rings, assign holes to exterior rings. - // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js - function contour(values, value) { - var polygons = [], - holes = []; - - isorings(values, value, function(ring) { - smooth(ring, values, value); - if (area$2(ring) > 0) polygons.push([ring]); - else holes.push(ring); - }); - - holes.forEach(function(hole) { - for (var i = 0, n = polygons.length, polygon; i < n; ++i) { - if (contains((polygon = polygons[i])[0], hole) !== -1) { - polygon.push(hole); - return; - } - } - }); - - return { - type: "MultiPolygon", - value: value, - coordinates: polygons - }; - } - - // Marching squares with isolines stitched into rings. - // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js - function isorings(values, value, callback) { - var fragmentByStart = new Array, - fragmentByEnd = new Array, - x, y, t0, t1, t2, t3; - - // Special case for the first row (y = -1, t2 = t3 = 0). - x = y = -1; - t1 = values[0] >= value; - cases[t1 << 1].forEach(stitch); - while (++x < dx - 1) { - t0 = t1, t1 = values[x + 1] >= value; - cases[t0 | t1 << 1].forEach(stitch); - } - cases[t1 << 0].forEach(stitch); - - // General case for the intermediate rows. - while (++y < dy - 1) { - x = -1; - t1 = values[y * dx + dx] >= value; - t2 = values[y * dx] >= value; - cases[t1 << 1 | t2 << 2].forEach(stitch); - while (++x < dx - 1) { - t0 = t1, t1 = values[y * dx + dx + x + 1] >= value; - t3 = t2, t2 = values[y * dx + x + 1] >= value; - cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch); - } - cases[t1 | t2 << 3].forEach(stitch); - } - - // Special case for the last row (y = dy - 1, t0 = t1 = 0). - x = -1; - t2 = values[y * dx] >= value; - cases[t2 << 2].forEach(stitch); - while (++x < dx - 1) { - t3 = t2, t2 = values[y * dx + x + 1] >= value; - cases[t2 << 2 | t3 << 3].forEach(stitch); - } - cases[t2 << 3].forEach(stitch); - - function stitch(line) { - var start = [line[0][0] + x, line[0][1] + y], - end = [line[1][0] + x, line[1][1] + y], - startIndex = index(start), - endIndex = index(end), - f, g; - if (f = fragmentByEnd[startIndex]) { - if (g = fragmentByStart[endIndex]) { - delete fragmentByEnd[f.end]; - delete fragmentByStart[g.start]; - if (f === g) { - f.ring.push(end); - callback(f.ring); - } else { - fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)}; - } - } else { - delete fragmentByEnd[f.end]; - f.ring.push(end); - fragmentByEnd[f.end = endIndex] = f; - } - } else if (f = fragmentByStart[endIndex]) { - if (g = fragmentByEnd[startIndex]) { - delete fragmentByStart[f.start]; - delete fragmentByEnd[g.end]; - if (f === g) { - f.ring.push(end); - callback(f.ring); - } else { - fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)}; - } - } else { - delete fragmentByStart[f.start]; - f.ring.unshift(start); - fragmentByStart[f.start = startIndex] = f; - } - } else { - fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]}; - } - } - } - - function index(point) { - return point[0] * 2 + point[1] * (dx + 1) * 4; - } - - function smoothLinear(ring, values, value) { - ring.forEach(function(point) { - var x = point[0], - y = point[1], - xt = x | 0, - yt = y | 0, - v0, - v1 = values[yt * dx + xt]; - if (x > 0 && x < dx && xt === x) { - v0 = values[yt * dx + xt - 1]; - point[0] = x + (value - v0) / (v1 - v0) - 0.5; - } - if (y > 0 && y < dy && yt === y) { - v0 = values[(yt - 1) * dx + xt]; - point[1] = y + (value - v0) / (v1 - v0) - 0.5; - } - }); - } - - contours.contour = contour; - - contours.size = function(_) { - if (!arguments.length) return [dx, dy]; - var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]); - if (!(_0 > 0) || !(_1 > 0)) throw new Error("invalid size"); - return dx = _0, dy = _1, contours; - }; - - contours.thresholds = function(_) { - return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant$5(slice$1.call(_)) : constant$5(_), contours) : threshold; - }; - - contours.smooth = function(_) { - return arguments.length ? (smooth = _ ? smoothLinear : noop$2, contours) : smooth === smoothLinear; - }; - - return contours; -} - -// TODO Optimize edge cases. -// TODO Optimize index calculation. -// TODO Optimize arguments. -function blurX(source, target, r) { - var n = source.width, - m = source.height, - w = (r << 1) + 1; - for (var j = 0; j < m; ++j) { - for (var i = 0, sr = 0; i < n + r; ++i) { - if (i < n) { - sr += source.data[i + j * n]; - } - if (i >= r) { - if (i >= w) { - sr -= source.data[i - w + j * n]; - } - target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w); - } - } - } -} - -// TODO Optimize edge cases. -// TODO Optimize index calculation. -// TODO Optimize arguments. -function blurY(source, target, r) { - var n = source.width, - m = source.height, - w = (r << 1) + 1; - for (var i = 0; i < n; ++i) { - for (var j = 0, sr = 0; j < m + r; ++j) { - if (j < m) { - sr += source.data[i + j * n]; - } - if (j >= r) { - if (j >= w) { - sr -= source.data[i + (j - w) * n]; - } - target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w); - } - } - } -} - -function defaultX(d) { - return d[0]; -} - -function defaultY(d) { - return d[1]; -} - -function defaultWeight() { - return 1; -} - -function contourDensity() { - var x = defaultX, - y = defaultY, - weight = defaultWeight, - dx = 960, - dy = 500, - r = 20, // blur radius - k = 2, // log2(grid cell size) - o = r * 3, // grid offset, to pad for blur - n = (dx + o * 2) >> k, // grid width - m = (dy + o * 2) >> k, // grid height - threshold = constant$5(20); - - function density(data) { - var values0 = new Float32Array(n * m), - values1 = new Float32Array(n * m); - - data.forEach(function(d, i, data) { - var xi = (+x(d, i, data) + o) >> k, - yi = (+y(d, i, data) + o) >> k, - wi = +weight(d, i, data); - if (xi >= 0 && xi < n && yi >= 0 && yi < m) { - values0[xi + yi * n] += wi; - } - }); - - // TODO Optimize. - blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k); - blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k); - blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k); - blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k); - blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k); - blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k); - - var tz = threshold(values0); - - // Convert number of thresholds into uniform thresholds. - if (!Array.isArray(tz)) { - var stop = max$3(values0); - tz = tickStep$1(0, stop, tz); - tz = range$1(0, Math.floor(stop / tz) * tz, tz); - tz.shift(); - } - - return contours() - .thresholds(tz) - .size([n, m]) - (values0) - .map(transform); - } - - function transform(geometry) { - geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel. - geometry.coordinates.forEach(transformPolygon); - return geometry; - } - - function transformPolygon(coordinates) { - coordinates.forEach(transformRing); - } - - function transformRing(coordinates) { - coordinates.forEach(transformPoint); - } - - // TODO Optimize. - function transformPoint(coordinates) { - coordinates[0] = coordinates[0] * Math.pow(2, k) - o; - coordinates[1] = coordinates[1] * Math.pow(2, k) - o; - } - - function resize() { - o = r * 3; - n = (dx + o * 2) >> k; - m = (dy + o * 2) >> k; - return density; - } - - density.x = function(_) { - return arguments.length ? (x = typeof _ === "function" ? _ : constant$5(+_), density) : x; - }; - - density.y = function(_) { - return arguments.length ? (y = typeof _ === "function" ? _ : constant$5(+_), density) : y; - }; - - density.weight = function(_) { - return arguments.length ? (weight = typeof _ === "function" ? _ : constant$5(+_), density) : weight; - }; - - density.size = function(_) { - if (!arguments.length) return [dx, dy]; - var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]); - if (!(_0 >= 0) && !(_0 >= 0)) throw new Error("invalid size"); - return dx = _0, dy = _1, resize(); - }; - - density.cellSize = function(_) { - if (!arguments.length) return 1 << k; - if (!((_ = +_) >= 1)) throw new Error("invalid cell size"); - return k = Math.floor(Math.log(_) / Math.LN2), resize(); - }; - - density.thresholds = function(_) { - return arguments.length ? (threshold = typeof _ === "function" ? _ : Array.isArray(_) ? constant$5(slice$1.call(_)) : constant$5(_), density) : threshold; - }; - - density.bandwidth = function(_) { - if (!arguments.length) return Math.sqrt(r * (r + 1)); - if (!((_ = +_) >= 0)) throw new Error("invalid bandwidth"); - return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize(); - }; - - return density; -} - -var CONTOUR_PARAMS = ['size', 'smooth']; -var DENSITY_PARAMS = ['x', 'y', 'weight', 'size', 'cellSize', 'bandwidth']; - -/** - * Generate contours based on kernel-density estimation of point data. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {Array} params.size - The dimensions [width, height] over which to compute contours. - * If the values parameter is provided, this must be the dimensions of the input data. - * If density estimation is performed, this is the output view dimensions in pixels. - * @param {Array} [params.values] - An array of numeric values representing an - * width x height grid of values over which to compute contours. If unspecified, this - * transform will instead attempt to compute contours for the kernel density estimate - * using values drawn from data tuples in the input pulse. - * @param {function(object): number} [params.x] - The pixel x-coordinate accessor for density estimation. - * @param {function(object): number} [params.y] - The pixel y-coordinate accessor for density estimation. - * @param {function(object): number} [params.weight] - The data point weight accessor for density estimation. - * @param {number} [params.cellSize] - Contour density calculation cell size. - * @param {number} [params.bandwidth] - Kernel density estimation bandwidth. - * @param {Array} [params.thresholds] - Contour threshold array. If - * this parameter is set, the count and nice parameters will be ignored. - * @param {number} [params.count] - The desired number of contours. - * @param {boolean} [params.nice] - Boolean flag indicating if the contour - * threshold values should be automatically aligned to "nice" - * human-friendly values. Setting this flag may cause the number of - * thresholds to deviate from the specified count. - * @param {boolean} [params.smooth] - Boolean flag indicating if the contour - * polygons should be smoothed using linear interpolation. The default is - * true. The parameter is ignored when using density estimation. - */ -function Contour(params) { - Transform.call(this, null, params); -} - -Contour.Definition = { - "type": "Contour", - "metadata": {"generates": true}, - "params": [ - { "name": "size", "type": "number", "array": true, "length": 2, "required": true }, - { "name": "values", "type": "number", "array": true }, - { "name": "x", "type": "field" }, - { "name": "y", "type": "field" }, - { "name": "weight", "type": "field" }, - { "name": "cellSize", "type": "number" }, - { "name": "bandwidth", "type": "number" }, - { "name": "count", "type": "number" }, - { "name": "smooth", "type": "boolean" }, - { "name": "nice", "type": "boolean", "default": false }, - { "name": "thresholds", "type": "number", "array": true } - ] -}; - -var prototype$10 = inherits(Contour, Transform); - -prototype$10.transform = function(_, pulse) { - if (this.value && !pulse.changed() && !_.modified()) - return pulse.StopPropagation; - - var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS), - count = _.count || 10, - contour, params, values; - - if (_.values) { - contour = contours(); - params = CONTOUR_PARAMS; - values = _.values; - } else { - contour = contourDensity(); - params = DENSITY_PARAMS; - values = pulse.materialize(pulse.SOURCE).source; - } - - // set threshold parameter - contour.thresholds(_.thresholds || (_.nice ? count : quantize$2(count))); - - // set all other parameters - params.forEach(function(param) { - if (_[param] != null) contour[param](_[param]); - }); - - if (this.value) out.rem = this.value; - values = values && values.length ? contour(values).map(ingest) : []; - this.value = out.source = out.add = values; - - return out; -}; - -function quantize$2(k) { - return function(values) { - var ex = extent$3(values), x0 = ex[0], dx = ex[1] - x0, - t = [], i = 1; - for (; i<=k; ++i) t.push(x0 + dx * i / (k + 1)); - return t; - }; -} - -var Feature = 'Feature'; -var FeatureCollection = 'FeatureCollection'; -var MultiPoint = 'MultiPoint'; - -/** - * Consolidate an array of [longitude, latitude] points or GeoJSON features - * into a combined GeoJSON object. This transform is particularly useful for - * combining geo data for a Projection's fit argument. The resulting GeoJSON - * data is available as this transform's value. Input pulses are unchanged. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {Array} [params.fields] - A two-element array - * of field accessors for the longitude and latitude values. - * @param {function(object): *} params.geojson - A field accessor for - * retrieving GeoJSON feature data. - */ -function GeoJSON(params) { - Transform.call(this, null, params); -} - -GeoJSON.Definition = { - "type": "GeoJSON", - "metadata": {}, - "params": [ - { "name": "fields", "type": "field", "array": true, "length": 2 }, - { "name": "geojson", "type": "field" }, - ] -}; - -var prototype$11 = inherits(GeoJSON, Transform); - -prototype$11.transform = function(_, pulse) { - var features = this._features, - points = this._points, - fields = _.fields, - lon = fields && fields[0], - lat = fields && fields[1], - geojson = _.geojson, - flag = pulse.ADD, - mod; - - mod = _.modified() - || pulse.changed(pulse.REM) - || pulse.modified(accessorFields(geojson)) - || (lon && (pulse.modified(accessorFields(lon)))) - || (lat && (pulse.modified(accessorFields(lat)))); - - if (!this.value || mod) { - flag = pulse.SOURCE; - this._features = (features = []); - this._points = (points = []); - } - - if (geojson) { - pulse.visit(flag, function(t) { - features.push(geojson(t)); - }); - } - - if (lon && lat) { - pulse.visit(flag, function(t) { - var x = lon(t), - y = lat(t); - if (x != null && y != null && (x = +x) === x && (y = +y) === y) { - points.push([x, y]); - } - }); - features = features.concat({ - type: Feature, - geometry: { - type: MultiPoint, - coordinates: points - } - }); - } - - this.value = { - type: FeatureCollection, - features: features - }; -}; - -// Adds floating point numbers with twice the normal precision. -// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and -// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3) -// 305–363 (1997). -// Code adapted from GeographicLib by Charles F. F. Karney, -// http://geographiclib.sourceforge.net/ - -function adder() { - return new Adder; -} - -function Adder() { - this.reset(); -} - -Adder.prototype = { - constructor: Adder, - reset: function() { - this.s = // rounded value - this.t = 0; // exact error - }, - add: function(y) { - add$2(temp$1, y, this.t); - add$2(this, temp$1.s, this.s); - if (this.s) this.t += temp$1.t; - else this.s = temp$1.t; - }, - valueOf: function() { - return this.s; - } -}; - -var temp$1 = new Adder; - -function add$2(adder, a, b) { - var x = adder.s = a + b, - bv = x - a, - av = x - bv; - adder.t = (a - av) + (b - bv); -} - -var epsilon$2 = 1e-6; -var epsilon2$1 = 1e-12; -var pi$2 = Math.PI; -var halfPi$1 = pi$2 / 2; -var quarterPi = pi$2 / 4; -var tau$2 = pi$2 * 2; - -var degrees$1 = 180 / pi$2; -var radians = pi$2 / 180; - -var abs$1 = Math.abs; -var atan = Math.atan; -var atan2$1 = Math.atan2; -var cos$1 = Math.cos; -var ceil = Math.ceil; -var exp$1 = Math.exp; -var log$3 = Math.log; -var pow$2 = Math.pow; -var sin$1 = Math.sin; -var sign$1 = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; }; -var sqrt$2 = Math.sqrt; -var tan = Math.tan; - -function acos$1(x) { - return x > 1 ? 0 : x < -1 ? pi$2 : Math.acos(x); -} - -function asin$1(x) { - return x > 1 ? halfPi$1 : x < -1 ? -halfPi$1 : Math.asin(x); -} - -function noop$3() {} - -function streamGeometry(geometry, stream) { - if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) { - streamGeometryType[geometry.type](geometry, stream); - } -} - -var streamObjectType = { - Feature: function(object, stream) { - streamGeometry(object.geometry, stream); - }, - FeatureCollection: function(object, stream) { - var features = object.features, i = -1, n = features.length; - while (++i < n) streamGeometry(features[i].geometry, stream); - } -}; - -var streamGeometryType = { - Sphere: function(object, stream) { - stream.sphere(); - }, - Point: function(object, stream) { - object = object.coordinates; - stream.point(object[0], object[1], object[2]); - }, - MultiPoint: function(object, stream) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]); - }, - LineString: function(object, stream) { - streamLine(object.coordinates, stream, 0); - }, - MultiLineString: function(object, stream) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) streamLine(coordinates[i], stream, 0); - }, - Polygon: function(object, stream) { - streamPolygon(object.coordinates, stream); - }, - MultiPolygon: function(object, stream) { - var coordinates = object.coordinates, i = -1, n = coordinates.length; - while (++i < n) streamPolygon(coordinates[i], stream); - }, - GeometryCollection: function(object, stream) { - var geometries = object.geometries, i = -1, n = geometries.length; - while (++i < n) streamGeometry(geometries[i], stream); - } -}; - -function streamLine(coordinates, stream, closed) { - var i = -1, n = coordinates.length - closed, coordinate; - stream.lineStart(); - while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]); - stream.lineEnd(); -} - -function streamPolygon(coordinates, stream) { - var i = -1, n = coordinates.length; - stream.polygonStart(); - while (++i < n) streamLine(coordinates[i], stream, 1); - stream.polygonEnd(); -} - -function geoStream(object, stream) { - if (object && streamObjectType.hasOwnProperty(object.type)) { - streamObjectType[object.type](object, stream); - } else { - streamGeometry(object, stream); - } -} - -var areaRingSum = adder(); - -var areaSum = adder(), - lambda00, - phi00, - lambda0, - cosPhi0, - sinPhi0; - -var areaStream = { - point: noop$3, - lineStart: noop$3, - lineEnd: noop$3, - polygonStart: function() { - areaRingSum.reset(); - areaStream.lineStart = areaRingStart; - areaStream.lineEnd = areaRingEnd; - }, - polygonEnd: function() { - var areaRing = +areaRingSum; - areaSum.add(areaRing < 0 ? tau$2 + areaRing : areaRing); - this.lineStart = this.lineEnd = this.point = noop$3; - }, - sphere: function() { - areaSum.add(tau$2); - } -}; - -function areaRingStart() { - areaStream.point = areaPointFirst; -} - -function areaRingEnd() { - areaPoint(lambda00, phi00); -} - -function areaPointFirst(lambda, phi) { - areaStream.point = areaPoint; - lambda00 = lambda, phi00 = phi; - lambda *= radians, phi *= radians; - lambda0 = lambda, cosPhi0 = cos$1(phi = phi / 2 + quarterPi), sinPhi0 = sin$1(phi); -} - -function areaPoint(lambda, phi) { - lambda *= radians, phi *= radians; - phi = phi / 2 + quarterPi; // half the angular distance from south pole - - // Spherical excess E for a spherical triangle with vertices: south pole, - // previous point, current point. Uses a formula derived from Cagnoli’s - // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2). - var dLambda = lambda - lambda0, - sdLambda = dLambda >= 0 ? 1 : -1, - adLambda = sdLambda * dLambda, - cosPhi = cos$1(phi), - sinPhi = sin$1(phi), - k = sinPhi0 * sinPhi, - u = cosPhi0 * cosPhi + k * cos$1(adLambda), - v = k * sdLambda * sin$1(adLambda); - areaRingSum.add(atan2$1(v, u)); - - // Advance the previous points. - lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi; -} - -function area$3(object) { - areaSum.reset(); - geoStream(object, areaStream); - return areaSum * 2; -} - -function spherical(cartesian) { - return [atan2$1(cartesian[1], cartesian[0]), asin$1(cartesian[2])]; -} - -function cartesian(spherical) { - var lambda = spherical[0], phi = spherical[1], cosPhi = cos$1(phi); - return [cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)]; -} - -function cartesianDot(a, b) { - return a[0] * b[0] + a[1] * b[1] + a[2] * b[2]; -} - -function cartesianCross(a, b) { - return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]]; -} - -// TODO return a -function cartesianAddInPlace(a, b) { - a[0] += b[0], a[1] += b[1], a[2] += b[2]; -} - -function cartesianScale(vector, k) { - return [vector[0] * k, vector[1] * k, vector[2] * k]; -} - -// TODO return d -function cartesianNormalizeInPlace(d) { - var l = sqrt$2(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]); - d[0] /= l, d[1] /= l, d[2] /= l; -} - -var lambda0$1, phi0, lambda1, phi1, // bounds - lambda2, // previous lambda-coordinate - lambda00$1, phi00$1, // first point - p0, // previous 3D point - deltaSum = adder(), - ranges, - range$2; - -var boundsStream = { - point: boundsPoint, - lineStart: boundsLineStart, - lineEnd: boundsLineEnd, - polygonStart: function() { - boundsStream.point = boundsRingPoint; - boundsStream.lineStart = boundsRingStart; - boundsStream.lineEnd = boundsRingEnd; - deltaSum.reset(); - areaStream.polygonStart(); - }, - polygonEnd: function() { - areaStream.polygonEnd(); - boundsStream.point = boundsPoint; - boundsStream.lineStart = boundsLineStart; - boundsStream.lineEnd = boundsLineEnd; - if (areaRingSum < 0) lambda0$1 = -(lambda1 = 180), phi0 = -(phi1 = 90); - else if (deltaSum > epsilon$2) phi1 = 90; - else if (deltaSum < -epsilon$2) phi0 = -90; - range$2[0] = lambda0$1, range$2[1] = lambda1; - } -}; - -function boundsPoint(lambda, phi) { - ranges.push(range$2 = [lambda0$1 = lambda, lambda1 = lambda]); - if (phi < phi0) phi0 = phi; - if (phi > phi1) phi1 = phi; -} - -function linePoint(lambda, phi) { - var p = cartesian([lambda * radians, phi * radians]); - if (p0) { - var normal = cartesianCross(p0, p), - equatorial = [normal[1], -normal[0], 0], - inflection = cartesianCross(equatorial, normal); - cartesianNormalizeInPlace(inflection); - inflection = spherical(inflection); - var delta = lambda - lambda2, - sign = delta > 0 ? 1 : -1, - lambdai = inflection[0] * degrees$1 * sign, - phii, - antimeridian = abs$1(delta) > 180; - if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) { - phii = inflection[1] * degrees$1; - if (phii > phi1) phi1 = phii; - } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) { - phii = -inflection[1] * degrees$1; - if (phii < phi0) phi0 = phii; - } else { - if (phi < phi0) phi0 = phi; - if (phi > phi1) phi1 = phi; - } - if (antimeridian) { - if (lambda < lambda2) { - if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda; - } else { - if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda; - } - } else { - if (lambda1 >= lambda0$1) { - if (lambda < lambda0$1) lambda0$1 = lambda; - if (lambda > lambda1) lambda1 = lambda; - } else { - if (lambda > lambda2) { - if (angle(lambda0$1, lambda) > angle(lambda0$1, lambda1)) lambda1 = lambda; - } else { - if (angle(lambda, lambda1) > angle(lambda0$1, lambda1)) lambda0$1 = lambda; - } - } - } - } else { - ranges.push(range$2 = [lambda0$1 = lambda, lambda1 = lambda]); - } - if (phi < phi0) phi0 = phi; - if (phi > phi1) phi1 = phi; - p0 = p, lambda2 = lambda; -} - -function boundsLineStart() { - boundsStream.point = linePoint; -} - -function boundsLineEnd() { - range$2[0] = lambda0$1, range$2[1] = lambda1; - boundsStream.point = boundsPoint; - p0 = null; -} - -function boundsRingPoint(lambda, phi) { - if (p0) { - var delta = lambda - lambda2; - deltaSum.add(abs$1(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta); - } else { - lambda00$1 = lambda, phi00$1 = phi; - } - areaStream.point(lambda, phi); - linePoint(lambda, phi); -} - -function boundsRingStart() { - areaStream.lineStart(); -} - -function boundsRingEnd() { - boundsRingPoint(lambda00$1, phi00$1); - areaStream.lineEnd(); - if (abs$1(deltaSum) > epsilon$2) lambda0$1 = -(lambda1 = 180); - range$2[0] = lambda0$1, range$2[1] = lambda1; - p0 = null; -} - -// Finds the left-right distance between two longitudes. -// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want -// the distance between ±180° to be 360°. -function angle(lambda0, lambda1) { - return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1; -} - -function rangeCompare(a, b) { - return a[0] - b[0]; -} - -function rangeContains(range, x) { - return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x; -} - -function bounds$1(feature) { - var i, n, a, b, merged, deltaMax, delta; - - phi1 = lambda1 = -(lambda0$1 = phi0 = Infinity); - ranges = []; - geoStream(feature, boundsStream); - - // First, sort ranges by their minimum longitudes. - if (n = ranges.length) { - ranges.sort(rangeCompare); - - // Then, merge any ranges that overlap. - for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) { - b = ranges[i]; - if (rangeContains(a, b[0]) || rangeContains(a, b[1])) { - if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1]; - if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0]; - } else { - merged.push(a = b); - } - } - - // Finally, find the largest gap between the merged ranges. - // The final bounding box will be the inverse of this gap. - for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) { - b = merged[i]; - if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0$1 = b[0], lambda1 = a[1]; - } - } - - ranges = range$2 = null; - - return lambda0$1 === Infinity || phi0 === Infinity - ? [[NaN, NaN], [NaN, NaN]] - : [[lambda0$1, phi0], [lambda1, phi1]]; -} - -var W0, W1, - X0, Y0, Z0, - X1, Y1, Z1, - X2, Y2, Z2, - lambda00$2, phi00$2, // first point - x0, y0, z0; // previous point - -var centroidStream = { - sphere: noop$3, - point: centroidPoint, - lineStart: centroidLineStart, - lineEnd: centroidLineEnd, - polygonStart: function() { - centroidStream.lineStart = centroidRingStart; - centroidStream.lineEnd = centroidRingEnd; - }, - polygonEnd: function() { - centroidStream.lineStart = centroidLineStart; - centroidStream.lineEnd = centroidLineEnd; - } -}; - -// Arithmetic mean of Cartesian vectors. -function centroidPoint(lambda, phi) { - lambda *= radians, phi *= radians; - var cosPhi = cos$1(phi); - centroidPointCartesian(cosPhi * cos$1(lambda), cosPhi * sin$1(lambda), sin$1(phi)); -} - -function centroidPointCartesian(x, y, z) { - ++W0; - X0 += (x - X0) / W0; - Y0 += (y - Y0) / W0; - Z0 += (z - Z0) / W0; -} - -function centroidLineStart() { - centroidStream.point = centroidLinePointFirst; -} - -function centroidLinePointFirst(lambda, phi) { - lambda *= radians, phi *= radians; - var cosPhi = cos$1(phi); - x0 = cosPhi * cos$1(lambda); - y0 = cosPhi * sin$1(lambda); - z0 = sin$1(phi); - centroidStream.point = centroidLinePoint; - centroidPointCartesian(x0, y0, z0); -} - -function centroidLinePoint(lambda, phi) { - lambda *= radians, phi *= radians; - var cosPhi = cos$1(phi), - x = cosPhi * cos$1(lambda), - y = cosPhi * sin$1(lambda), - z = sin$1(phi), - w = atan2$1(sqrt$2((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z); - W1 += w; - X1 += w * (x0 + (x0 = x)); - Y1 += w * (y0 + (y0 = y)); - Z1 += w * (z0 + (z0 = z)); - centroidPointCartesian(x0, y0, z0); -} - -function centroidLineEnd() { - centroidStream.point = centroidPoint; -} - -// See J. E. Brock, The Inertia Tensor for a Spherical Triangle, -// J. Applied Mechanics 42, 239 (1975). -function centroidRingStart() { - centroidStream.point = centroidRingPointFirst; -} - -function centroidRingEnd() { - centroidRingPoint(lambda00$2, phi00$2); - centroidStream.point = centroidPoint; -} - -function centroidRingPointFirst(lambda, phi) { - lambda00$2 = lambda, phi00$2 = phi; - lambda *= radians, phi *= radians; - centroidStream.point = centroidRingPoint; - var cosPhi = cos$1(phi); - x0 = cosPhi * cos$1(lambda); - y0 = cosPhi * sin$1(lambda); - z0 = sin$1(phi); - centroidPointCartesian(x0, y0, z0); -} - -function centroidRingPoint(lambda, phi) { - lambda *= radians, phi *= radians; - var cosPhi = cos$1(phi), - x = cosPhi * cos$1(lambda), - y = cosPhi * sin$1(lambda), - z = sin$1(phi), - cx = y0 * z - z0 * y, - cy = z0 * x - x0 * z, - cz = x0 * y - y0 * x, - m = sqrt$2(cx * cx + cy * cy + cz * cz), - w = asin$1(m), // line weight = angle - v = m && -w / m; // area weight multiplier - X2 += v * cx; - Y2 += v * cy; - Z2 += v * cz; - W1 += w; - X1 += w * (x0 + (x0 = x)); - Y1 += w * (y0 + (y0 = y)); - Z1 += w * (z0 + (z0 = z)); - centroidPointCartesian(x0, y0, z0); -} - -function centroid(object) { - W0 = W1 = - X0 = Y0 = Z0 = - X1 = Y1 = Z1 = - X2 = Y2 = Z2 = 0; - geoStream(object, centroidStream); - - var x = X2, - y = Y2, - z = Z2, - m = x * x + y * y + z * z; - - // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid. - if (m < epsilon2$1) { - x = X1, y = Y1, z = Z1; - // If the feature has zero length, fall back to arithmetic mean of point vectors. - if (W1 < epsilon$2) x = X0, y = Y0, z = Z0; - m = x * x + y * y + z * z; - // If the feature still has an undefined ccentroid, then return. - if (m < epsilon2$1) return [NaN, NaN]; - } - - return [atan2$1(y, x) * degrees$1, asin$1(z / sqrt$2(m)) * degrees$1]; -} - -function compose(a, b) { - - function compose(x, y) { - return x = a(x, y), b(x[0], x[1]); - } - - if (a.invert && b.invert) compose.invert = function(x, y) { - return x = b.invert(x, y), x && a.invert(x[0], x[1]); - }; - - return compose; -} - -function rotationIdentity(lambda, phi) { - return [abs$1(lambda) > pi$2 ? lambda + Math.round(-lambda / tau$2) * tau$2 : lambda, phi]; -} - -rotationIdentity.invert = rotationIdentity; - -function rotateRadians(deltaLambda, deltaPhi, deltaGamma) { - return (deltaLambda %= tau$2) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma)) - : rotationLambda(deltaLambda)) - : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma) - : rotationIdentity); -} - -function forwardRotationLambda(deltaLambda) { - return function(lambda, phi) { - return lambda += deltaLambda, [lambda > pi$2 ? lambda - tau$2 : lambda < -pi$2 ? lambda + tau$2 : lambda, phi]; - }; -} - -function rotationLambda(deltaLambda) { - var rotation = forwardRotationLambda(deltaLambda); - rotation.invert = forwardRotationLambda(-deltaLambda); - return rotation; -} - -function rotationPhiGamma(deltaPhi, deltaGamma) { - var cosDeltaPhi = cos$1(deltaPhi), - sinDeltaPhi = sin$1(deltaPhi), - cosDeltaGamma = cos$1(deltaGamma), - sinDeltaGamma = sin$1(deltaGamma); - - function rotation(lambda, phi) { - var cosPhi = cos$1(phi), - x = cos$1(lambda) * cosPhi, - y = sin$1(lambda) * cosPhi, - z = sin$1(phi), - k = z * cosDeltaPhi + x * sinDeltaPhi; - return [ - atan2$1(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi), - asin$1(k * cosDeltaGamma + y * sinDeltaGamma) - ]; - } - - rotation.invert = function(lambda, phi) { - var cosPhi = cos$1(phi), - x = cos$1(lambda) * cosPhi, - y = sin$1(lambda) * cosPhi, - z = sin$1(phi), - k = z * cosDeltaGamma - y * sinDeltaGamma; - return [ - atan2$1(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi), - asin$1(k * cosDeltaPhi - x * sinDeltaPhi) - ]; - }; - - return rotation; -} - -function rotation(rotate) { - rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0); - - function forward(coordinates) { - coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians); - return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates; - } - - forward.invert = function(coordinates) { - coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians); - return coordinates[0] *= degrees$1, coordinates[1] *= degrees$1, coordinates; - }; - - return forward; -} - -// Generates a circle centered at [0°, 0°], with a given radius and precision. -function circleStream(stream, radius, delta, direction, t0, t1) { - if (!delta) return; - var cosRadius = cos$1(radius), - sinRadius = sin$1(radius), - step = direction * delta; - if (t0 == null) { - t0 = radius + direction * tau$2; - t1 = radius - step / 2; - } else { - t0 = circleRadius(cosRadius, t0); - t1 = circleRadius(cosRadius, t1); - if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau$2; - } - for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) { - point = spherical([cosRadius, -sinRadius * cos$1(t), -sinRadius * sin$1(t)]); - stream.point(point[0], point[1]); - } -} - -// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0]. -function circleRadius(cosRadius, point) { - point = cartesian(point), point[0] -= cosRadius; - cartesianNormalizeInPlace(point); - var radius = acos$1(-point[1]); - return ((-point[2] < 0 ? -radius : radius) + tau$2 - epsilon$2) % tau$2; -} - -function clipBuffer() { - var lines = [], - line; - return { - point: function(x, y) { - line.push([x, y]); - }, - lineStart: function() { - lines.push(line = []); - }, - lineEnd: noop$3, - rejoin: function() { - if (lines.length > 1) lines.push(lines.pop().concat(lines.shift())); - }, - result: function() { - var result = lines; - lines = []; - line = null; - return result; - } - }; -} - -function pointEqual(a, b) { - return abs$1(a[0] - b[0]) < epsilon$2 && abs$1(a[1] - b[1]) < epsilon$2; -} - -function Intersection(point, points, other, entry) { - this.x = point; - this.z = points; - this.o = other; // another intersection - this.e = entry; // is an entry? - this.v = false; // visited - this.n = this.p = null; // next & previous -} - -// A generalized polygon clipping algorithm: given a polygon that has been cut -// into its visible line segments, and rejoins the segments by interpolating -// along the clip edge. -function clipRejoin(segments, compareIntersection, startInside, interpolate, stream) { - var subject = [], - clip = [], - i, - n; - - segments.forEach(function(segment) { - if ((n = segment.length - 1) <= 0) return; - var n, p0 = segment[0], p1 = segment[n], x; - - // If the first and last points of a segment are coincident, then treat as a - // closed ring. TODO if all rings are closed, then the winding order of the - // exterior ring should be checked. - if (pointEqual(p0, p1)) { - stream.lineStart(); - for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]); - stream.lineEnd(); - return; - } - - subject.push(x = new Intersection(p0, segment, null, true)); - clip.push(x.o = new Intersection(p0, null, x, false)); - subject.push(x = new Intersection(p1, segment, null, false)); - clip.push(x.o = new Intersection(p1, null, x, true)); - }); - - if (!subject.length) return; - - clip.sort(compareIntersection); - link(subject); - link(clip); - - for (i = 0, n = clip.length; i < n; ++i) { - clip[i].e = startInside = !startInside; - } - - var start = subject[0], - points, - point; - - while (1) { - // Find first unvisited intersection. - var current = start, - isSubject = true; - while (current.v) if ((current = current.n) === start) return; - points = current.z; - stream.lineStart(); - do { - current.v = current.o.v = true; - if (current.e) { - if (isSubject) { - for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]); - } else { - interpolate(current.x, current.n.x, 1, stream); - } - current = current.n; - } else { - if (isSubject) { - points = current.p.z; - for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]); - } else { - interpolate(current.x, current.p.x, -1, stream); - } - current = current.p; - } - current = current.o; - points = current.z; - isSubject = !isSubject; - } while (!current.v); - stream.lineEnd(); - } -} - -function link(array) { - if (!(n = array.length)) return; - var n, - i = 0, - a = array[0], - b; - while (++i < n) { - a.n = b = array[i]; - b.p = a; - a = b; - } - a.n = b = array[0]; - b.p = a; -} - -var sum$1 = adder(); - -function polygonContains(polygon, point) { - var lambda = point[0], - phi = point[1], - sinPhi = sin$1(phi), - normal = [sin$1(lambda), -cos$1(lambda), 0], - angle = 0, - winding = 0; - - sum$1.reset(); - - if (sinPhi === 1) phi = halfPi$1 + epsilon$2; - else if (sinPhi === -1) phi = -halfPi$1 - epsilon$2; - - for (var i = 0, n = polygon.length; i < n; ++i) { - if (!(m = (ring = polygon[i]).length)) continue; - var ring, - m, - point0 = ring[m - 1], - lambda0 = point0[0], - phi0 = point0[1] / 2 + quarterPi, - sinPhi0 = sin$1(phi0), - cosPhi0 = cos$1(phi0); - - for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) { - var point1 = ring[j], - lambda1 = point1[0], - phi1 = point1[1] / 2 + quarterPi, - sinPhi1 = sin$1(phi1), - cosPhi1 = cos$1(phi1), - delta = lambda1 - lambda0, - sign = delta >= 0 ? 1 : -1, - absDelta = sign * delta, - antimeridian = absDelta > pi$2, - k = sinPhi0 * sinPhi1; - - sum$1.add(atan2$1(k * sign * sin$1(absDelta), cosPhi0 * cosPhi1 + k * cos$1(absDelta))); - angle += antimeridian ? delta + sign * tau$2 : delta; - - // Are the longitudes either side of the point’s meridian (lambda), - // and are the latitudes smaller than the parallel (phi)? - if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) { - var arc = cartesianCross(cartesian(point0), cartesian(point1)); - cartesianNormalizeInPlace(arc); - var intersection = cartesianCross(normal, arc); - cartesianNormalizeInPlace(intersection); - var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin$1(intersection[2]); - if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) { - winding += antimeridian ^ delta >= 0 ? 1 : -1; - } - } - } - } - - // First, determine whether the South pole is inside or outside: - // - // It is inside if: - // * the polygon winds around it in a clockwise direction. - // * the polygon does not (cumulatively) wind around it, but has a negative - // (counter-clockwise) area. - // - // Second, count the (signed) number of times a segment crosses a lambda - // from the point to the South pole. If it is zero, then the point is the - // same side as the South pole. - - return (angle < -epsilon$2 || angle < epsilon$2 && sum$1 < -epsilon$2) ^ (winding & 1); -} - -function ascending$9(a, b) { - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; -} - -function bisector$8(compare) { - if (compare.length === 1) compare = ascendingComparator$8(compare); - return { - left: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) < 0) lo = mid + 1; - else hi = mid; - } - return lo; - }, - right: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) > 0) hi = mid; - else lo = mid + 1; - } - return lo; - } - }; -} - -function ascendingComparator$8(f) { - return function(d, x) { - return ascending$9(f(d), x); - }; -} - -var ascendingBisect$8 = bisector$8(ascending$9); - -function range$3(start, stop, step) { - start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step; - - var i = -1, - n = Math.max(0, Math.ceil((stop - start) / step)) | 0, - range = new Array(n); - - while (++i < n) { - range[i] = start + i * step; - } - - return range; -} - -function merge$1(arrays) { - var n = arrays.length, - m, - i = -1, - j = 0, - merged, - array; - - while (++i < n) j += arrays[i].length; - merged = new Array(j); - - while (--n >= 0) { - array = arrays[n]; - m = array.length; - while (--m >= 0) { - merged[--j] = array[m]; - } - } - - return merged; -} - -function clip$2(pointVisible, clipLine, interpolate, start) { - return function(sink) { - var line = clipLine(sink), - ringBuffer = clipBuffer(), - ringSink = clipLine(ringBuffer), - polygonStarted = false, - polygon, - segments, - ring; - - var clip = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: function() { - clip.point = pointRing; - clip.lineStart = ringStart; - clip.lineEnd = ringEnd; - segments = []; - polygon = []; - }, - polygonEnd: function() { - clip.point = point; - clip.lineStart = lineStart; - clip.lineEnd = lineEnd; - segments = merge$1(segments); - var startInside = polygonContains(polygon, start); - if (segments.length) { - if (!polygonStarted) sink.polygonStart(), polygonStarted = true; - clipRejoin(segments, compareIntersection, startInside, interpolate, sink); - } else if (startInside) { - if (!polygonStarted) sink.polygonStart(), polygonStarted = true; - sink.lineStart(); - interpolate(null, null, 1, sink); - sink.lineEnd(); - } - if (polygonStarted) sink.polygonEnd(), polygonStarted = false; - segments = polygon = null; - }, - sphere: function() { - sink.polygonStart(); - sink.lineStart(); - interpolate(null, null, 1, sink); - sink.lineEnd(); - sink.polygonEnd(); - } - }; - - function point(lambda, phi) { - if (pointVisible(lambda, phi)) sink.point(lambda, phi); - } - - function pointLine(lambda, phi) { - line.point(lambda, phi); - } - - function lineStart() { - clip.point = pointLine; - line.lineStart(); - } - - function lineEnd() { - clip.point = point; - line.lineEnd(); - } - - function pointRing(lambda, phi) { - ring.push([lambda, phi]); - ringSink.point(lambda, phi); - } - - function ringStart() { - ringSink.lineStart(); - ring = []; - } - - function ringEnd() { - pointRing(ring[0][0], ring[0][1]); - ringSink.lineEnd(); - - var clean = ringSink.clean(), - ringSegments = ringBuffer.result(), - i, n = ringSegments.length, m, - segment, - point; - - ring.pop(); - polygon.push(ring); - ring = null; - - if (!n) return; - - // No intersections. - if (clean & 1) { - segment = ringSegments[0]; - if ((m = segment.length - 1) > 0) { - if (!polygonStarted) sink.polygonStart(), polygonStarted = true; - sink.lineStart(); - for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]); - sink.lineEnd(); - } - return; - } - - // Rejoin connected segments. - // TODO reuse ringBuffer.rejoin()? - if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift())); - - segments.push(ringSegments.filter(validSegment)); - } - - return clip; - }; -} - -function validSegment(segment) { - return segment.length > 1; -} - -// Intersections are sorted along the clip edge. For both antimeridian cutting -// and circle clipping, the same comparison is used. -function compareIntersection(a, b) { - return ((a = a.x)[0] < 0 ? a[1] - halfPi$1 - epsilon$2 : halfPi$1 - a[1]) - - ((b = b.x)[0] < 0 ? b[1] - halfPi$1 - epsilon$2 : halfPi$1 - b[1]); -} - -var clipAntimeridian = clip$2( - function() { return true; }, - clipAntimeridianLine, - clipAntimeridianInterpolate, - [-pi$2, -halfPi$1] -); - -// Takes a line and cuts into visible segments. Return values: 0 - there were -// intersections or the line was empty; 1 - no intersections; 2 - there were -// intersections, and the first and last segments should be rejoined. -function clipAntimeridianLine(stream) { - var lambda0 = NaN, - phi0 = NaN, - sign0 = NaN, - clean; // no intersections - - return { - lineStart: function() { - stream.lineStart(); - clean = 1; - }, - point: function(lambda1, phi1) { - var sign1 = lambda1 > 0 ? pi$2 : -pi$2, - delta = abs$1(lambda1 - lambda0); - if (abs$1(delta - pi$2) < epsilon$2) { // line crosses a pole - stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi$1 : -halfPi$1); - stream.point(sign0, phi0); - stream.lineEnd(); - stream.lineStart(); - stream.point(sign1, phi0); - stream.point(lambda1, phi0); - clean = 0; - } else if (sign0 !== sign1 && delta >= pi$2) { // line crosses antimeridian - if (abs$1(lambda0 - sign0) < epsilon$2) lambda0 -= sign0 * epsilon$2; // handle degeneracies - if (abs$1(lambda1 - sign1) < epsilon$2) lambda1 -= sign1 * epsilon$2; - phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1); - stream.point(sign0, phi0); - stream.lineEnd(); - stream.lineStart(); - stream.point(sign1, phi0); - clean = 0; - } - stream.point(lambda0 = lambda1, phi0 = phi1); - sign0 = sign1; - }, - lineEnd: function() { - stream.lineEnd(); - lambda0 = phi0 = NaN; - }, - clean: function() { - return 2 - clean; // if intersections, rejoin first and last segments - } - }; -} - -function clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) { - var cosPhi0, - cosPhi1, - sinLambda0Lambda1 = sin$1(lambda0 - lambda1); - return abs$1(sinLambda0Lambda1) > epsilon$2 - ? atan((sin$1(phi0) * (cosPhi1 = cos$1(phi1)) * sin$1(lambda1) - - sin$1(phi1) * (cosPhi0 = cos$1(phi0)) * sin$1(lambda0)) - / (cosPhi0 * cosPhi1 * sinLambda0Lambda1)) - : (phi0 + phi1) / 2; -} - -function clipAntimeridianInterpolate(from, to, direction, stream) { - var phi; - if (from == null) { - phi = direction * halfPi$1; - stream.point(-pi$2, phi); - stream.point(0, phi); - stream.point(pi$2, phi); - stream.point(pi$2, 0); - stream.point(pi$2, -phi); - stream.point(0, -phi); - stream.point(-pi$2, -phi); - stream.point(-pi$2, 0); - stream.point(-pi$2, phi); - } else if (abs$1(from[0] - to[0]) > epsilon$2) { - var lambda = from[0] < to[0] ? pi$2 : -pi$2; - phi = direction * lambda / 2; - stream.point(-lambda, phi); - stream.point(0, phi); - stream.point(lambda, phi); - } else { - stream.point(to[0], to[1]); - } -} - -function clipCircle(radius) { - var cr = cos$1(radius), - delta = 6 * radians, - smallRadius = cr > 0, - notHemisphere = abs$1(cr) > epsilon$2; // TODO optimise for this common case - - function interpolate(from, to, direction, stream) { - circleStream(stream, radius, delta, direction, from, to); - } - - function visible(lambda, phi) { - return cos$1(lambda) * cos$1(phi) > cr; - } - - // Takes a line and cuts into visible segments. Return values used for polygon - // clipping: 0 - there were intersections or the line was empty; 1 - no - // intersections 2 - there were intersections, and the first and last segments - // should be rejoined. - function clipLine(stream) { - var point0, // previous point - c0, // code for previous point - v0, // visibility of previous point - v00, // visibility of first point - clean; // no intersections - return { - lineStart: function() { - v00 = v0 = false; - clean = 1; - }, - point: function(lambda, phi) { - var point1 = [lambda, phi], - point2, - v = visible(lambda, phi), - c = smallRadius - ? v ? 0 : code(lambda, phi) - : v ? code(lambda + (lambda < 0 ? pi$2 : -pi$2), phi) : 0; - if (!point0 && (v00 = v0 = v)) stream.lineStart(); - // Handle degeneracies. - // TODO ignore if not clipping polygons. - if (v !== v0) { - point2 = intersect(point0, point1); - if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) { - point1[0] += epsilon$2; - point1[1] += epsilon$2; - v = visible(point1[0], point1[1]); - } - } - if (v !== v0) { - clean = 0; - if (v) { - // outside going in - stream.lineStart(); - point2 = intersect(point1, point0); - stream.point(point2[0], point2[1]); - } else { - // inside going out - point2 = intersect(point0, point1); - stream.point(point2[0], point2[1]); - stream.lineEnd(); - } - point0 = point2; - } else if (notHemisphere && point0 && smallRadius ^ v) { - var t; - // If the codes for two points are different, or are both zero, - // and there this segment intersects with the small circle. - if (!(c & c0) && (t = intersect(point1, point0, true))) { - clean = 0; - if (smallRadius) { - stream.lineStart(); - stream.point(t[0][0], t[0][1]); - stream.point(t[1][0], t[1][1]); - stream.lineEnd(); - } else { - stream.point(t[1][0], t[1][1]); - stream.lineEnd(); - stream.lineStart(); - stream.point(t[0][0], t[0][1]); - } - } - } - if (v && (!point0 || !pointEqual(point0, point1))) { - stream.point(point1[0], point1[1]); - } - point0 = point1, v0 = v, c0 = c; - }, - lineEnd: function() { - if (v0) stream.lineEnd(); - point0 = null; - }, - // Rejoin first and last segments if there were intersections and the first - // and last points were visible. - clean: function() { - return clean | ((v00 && v0) << 1); - } - }; - } - - // Intersects the great circle between a and b with the clip circle. - function intersect(a, b, two) { - var pa = cartesian(a), - pb = cartesian(b); - - // We have two planes, n1.p = d1 and n2.p = d2. - // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2). - var n1 = [1, 0, 0], // normal - n2 = cartesianCross(pa, pb), - n2n2 = cartesianDot(n2, n2), - n1n2 = n2[0], // cartesianDot(n1, n2), - determinant = n2n2 - n1n2 * n1n2; - - // Two polar points. - if (!determinant) return !two && a; - - var c1 = cr * n2n2 / determinant, - c2 = -cr * n1n2 / determinant, - n1xn2 = cartesianCross(n1, n2), - A = cartesianScale(n1, c1), - B = cartesianScale(n2, c2); - cartesianAddInPlace(A, B); - - // Solve |p(t)|^2 = 1. - var u = n1xn2, - w = cartesianDot(A, u), - uu = cartesianDot(u, u), - t2 = w * w - uu * (cartesianDot(A, A) - 1); - - if (t2 < 0) return; - - var t = sqrt$2(t2), - q = cartesianScale(u, (-w - t) / uu); - cartesianAddInPlace(q, A); - q = spherical(q); - - if (!two) return q; - - // Two intersection points. - var lambda0 = a[0], - lambda1 = b[0], - phi0 = a[1], - phi1 = b[1], - z; - - if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z; - - var delta = lambda1 - lambda0, - polar = abs$1(delta - pi$2) < epsilon$2, - meridian = polar || delta < epsilon$2; - - if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z; - - // Check that the first point is between a and b. - if (meridian - ? polar - ? phi0 + phi1 > 0 ^ q[1] < (abs$1(q[0] - lambda0) < epsilon$2 ? phi0 : phi1) - : phi0 <= q[1] && q[1] <= phi1 - : delta > pi$2 ^ (lambda0 <= q[0] && q[0] <= lambda1)) { - var q1 = cartesianScale(u, (-w + t) / uu); - cartesianAddInPlace(q1, A); - return [q, spherical(q1)]; - } - } - - // Generates a 4-bit vector representing the location of a point relative to - // the small circle's bounding box. - function code(lambda, phi) { - var r = smallRadius ? radius : pi$2 - radius, - code = 0; - if (lambda < -r) code |= 1; // left - else if (lambda > r) code |= 2; // right - if (phi < -r) code |= 4; // below - else if (phi > r) code |= 8; // above - return code; - } - - return clip$2(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi$2, radius - pi$2]); -} - -function clipLine(a, b, x0, y0, x1, y1) { - var ax = a[0], - ay = a[1], - bx = b[0], - by = b[1], - t0 = 0, - t1 = 1, - dx = bx - ax, - dy = by - ay, - r; - - r = x0 - ax; - if (!dx && r > 0) return; - r /= dx; - if (dx < 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } else if (dx > 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } - - r = x1 - ax; - if (!dx && r < 0) return; - r /= dx; - if (dx < 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } else if (dx > 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } - - r = y0 - ay; - if (!dy && r > 0) return; - r /= dy; - if (dy < 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } else if (dy > 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } - - r = y1 - ay; - if (!dy && r < 0) return; - r /= dy; - if (dy < 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } else if (dy > 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } - - if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy; - if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy; - return true; -} - -var clipMax = 1e9, clipMin = -clipMax; - -// TODO Use d3-polygon’s polygonContains here for the ring check? -// TODO Eliminate duplicate buffering in clipBuffer and polygon.push? - -function clipRectangle(x0, y0, x1, y1) { - - function visible(x, y) { - return x0 <= x && x <= x1 && y0 <= y && y <= y1; - } - - function interpolate(from, to, direction, stream) { - var a = 0, a1 = 0; - if (from == null - || (a = corner(from, direction)) !== (a1 = corner(to, direction)) - || comparePoint(from, to) < 0 ^ direction > 0) { - do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0); - while ((a = (a + direction + 4) % 4) !== a1); - } else { - stream.point(to[0], to[1]); - } - } - - function corner(p, direction) { - return abs$1(p[0] - x0) < epsilon$2 ? direction > 0 ? 0 : 3 - : abs$1(p[0] - x1) < epsilon$2 ? direction > 0 ? 2 : 1 - : abs$1(p[1] - y0) < epsilon$2 ? direction > 0 ? 1 : 0 - : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon - } - - function compareIntersection(a, b) { - return comparePoint(a.x, b.x); - } - - function comparePoint(a, b) { - var ca = corner(a, 1), - cb = corner(b, 1); - return ca !== cb ? ca - cb - : ca === 0 ? b[1] - a[1] - : ca === 1 ? a[0] - b[0] - : ca === 2 ? a[1] - b[1] - : b[0] - a[0]; - } - - return function(stream) { - var activeStream = stream, - bufferStream = clipBuffer(), - segments, - polygon, - ring, - x__, y__, v__, // first point - x_, y_, v_, // previous point - first, - clean; - - var clipStream = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: polygonStart, - polygonEnd: polygonEnd - }; - - function point(x, y) { - if (visible(x, y)) activeStream.point(x, y); - } - - function polygonInside() { - var winding = 0; - - for (var i = 0, n = polygon.length; i < n; ++i) { - for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) { - a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1]; - if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; } - else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; } - } - } - - return winding; - } - - // Buffer geometry within a polygon and then clip it en masse. - function polygonStart() { - activeStream = bufferStream, segments = [], polygon = [], clean = true; - } - - function polygonEnd() { - var startInside = polygonInside(), - cleanInside = clean && startInside, - visible = (segments = merge$1(segments)).length; - if (cleanInside || visible) { - stream.polygonStart(); - if (cleanInside) { - stream.lineStart(); - interpolate(null, null, 1, stream); - stream.lineEnd(); - } - if (visible) { - clipRejoin(segments, compareIntersection, startInside, interpolate, stream); - } - stream.polygonEnd(); - } - activeStream = stream, segments = polygon = ring = null; - } - - function lineStart() { - clipStream.point = linePoint; - if (polygon) polygon.push(ring = []); - first = true; - v_ = false; - x_ = y_ = NaN; - } - - // TODO rather than special-case polygons, simply handle them separately. - // Ideally, coincident intersection points should be jittered to avoid - // clipping issues. - function lineEnd() { - if (segments) { - linePoint(x__, y__); - if (v__ && v_) bufferStream.rejoin(); - segments.push(bufferStream.result()); - } - clipStream.point = point; - if (v_) activeStream.lineEnd(); - } - - function linePoint(x, y) { - var v = visible(x, y); - if (polygon) ring.push([x, y]); - if (first) { - x__ = x, y__ = y, v__ = v; - first = false; - if (v) { - activeStream.lineStart(); - activeStream.point(x, y); - } - } else { - if (v && v_) activeStream.point(x, y); - else { - var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))], - b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))]; - if (clipLine(a, b, x0, y0, x1, y1)) { - if (!v_) { - activeStream.lineStart(); - activeStream.point(a[0], a[1]); - } - activeStream.point(b[0], b[1]); - if (!v) activeStream.lineEnd(); - clean = false; - } else if (v) { - activeStream.lineStart(); - activeStream.point(x, y); - clean = false; - } - } - } - x_ = x, y_ = y, v_ = v; - } - - return clipStream; - }; -} - -var lengthSum = adder(); - -function graticuleX(y0, y1, dy) { - var y = range$3(y0, y1 - epsilon$2, dy).concat(y1); - return function(x) { return y.map(function(y) { return [x, y]; }); }; -} - -function graticuleY(x0, x1, dx) { - var x = range$3(x0, x1 - epsilon$2, dx).concat(x1); - return function(y) { return x.map(function(x) { return [x, y]; }); }; -} - -function graticule() { - var x1, x0, X1, X0, - y1, y0, Y1, Y0, - dx = 10, dy = dx, DX = 90, DY = 360, - x, y, X, Y, - precision = 2.5; - - function graticule() { - return {type: "MultiLineString", coordinates: lines()}; - } - - function lines() { - return range$3(ceil(X0 / DX) * DX, X1, DX).map(X) - .concat(range$3(ceil(Y0 / DY) * DY, Y1, DY).map(Y)) - .concat(range$3(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs$1(x % DX) > epsilon$2; }).map(x)) - .concat(range$3(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs$1(y % DY) > epsilon$2; }).map(y)); - } - - graticule.lines = function() { - return lines().map(function(coordinates) { return {type: "LineString", coordinates: coordinates}; }); - }; - - graticule.outline = function() { - return { - type: "Polygon", - coordinates: [ - X(X0).concat( - Y(Y1).slice(1), - X(X1).reverse().slice(1), - Y(Y0).reverse().slice(1)) - ] - }; - }; - - graticule.extent = function(_) { - if (!arguments.length) return graticule.extentMinor(); - return graticule.extentMajor(_).extentMinor(_); - }; - - graticule.extentMajor = function(_) { - if (!arguments.length) return [[X0, Y0], [X1, Y1]]; - X0 = +_[0][0], X1 = +_[1][0]; - Y0 = +_[0][1], Y1 = +_[1][1]; - if (X0 > X1) _ = X0, X0 = X1, X1 = _; - if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _; - return graticule.precision(precision); - }; - - graticule.extentMinor = function(_) { - if (!arguments.length) return [[x0, y0], [x1, y1]]; - x0 = +_[0][0], x1 = +_[1][0]; - y0 = +_[0][1], y1 = +_[1][1]; - if (x0 > x1) _ = x0, x0 = x1, x1 = _; - if (y0 > y1) _ = y0, y0 = y1, y1 = _; - return graticule.precision(precision); - }; - - graticule.step = function(_) { - if (!arguments.length) return graticule.stepMinor(); - return graticule.stepMajor(_).stepMinor(_); - }; - - graticule.stepMajor = function(_) { - if (!arguments.length) return [DX, DY]; - DX = +_[0], DY = +_[1]; - return graticule; - }; - - graticule.stepMinor = function(_) { - if (!arguments.length) return [dx, dy]; - dx = +_[0], dy = +_[1]; - return graticule; - }; - - graticule.precision = function(_) { - if (!arguments.length) return precision; - precision = +_; - x = graticuleX(y0, y1, 90); - y = graticuleY(x0, x1, precision); - X = graticuleX(Y0, Y1, 90); - Y = graticuleY(X0, X1, precision); - return graticule; - }; - - return graticule - .extentMajor([[-180, -90 + epsilon$2], [180, 90 - epsilon$2]]) - .extentMinor([[-180, -80 - epsilon$2], [180, 80 + epsilon$2]]); -} - -function identity$6(x) { - return x; -} - -var areaSum$1 = adder(), - areaRingSum$1 = adder(), - x00, - y00, - x0$1, - y0$1; - -var areaStream$1 = { - point: noop$3, - lineStart: noop$3, - lineEnd: noop$3, - polygonStart: function() { - areaStream$1.lineStart = areaRingStart$1; - areaStream$1.lineEnd = areaRingEnd$1; - }, - polygonEnd: function() { - areaStream$1.lineStart = areaStream$1.lineEnd = areaStream$1.point = noop$3; - areaSum$1.add(abs$1(areaRingSum$1)); - areaRingSum$1.reset(); - }, - result: function() { - var area = areaSum$1 / 2; - areaSum$1.reset(); - return area; - } -}; - -function areaRingStart$1() { - areaStream$1.point = areaPointFirst$1; -} - -function areaPointFirst$1(x, y) { - areaStream$1.point = areaPoint$1; - x00 = x0$1 = x, y00 = y0$1 = y; -} - -function areaPoint$1(x, y) { - areaRingSum$1.add(y0$1 * x - x0$1 * y); - x0$1 = x, y0$1 = y; -} - -function areaRingEnd$1() { - areaPoint$1(x00, y00); -} - -var x0$2 = Infinity, - y0$2 = x0$2, - x1 = -x0$2, - y1 = x1; - -var boundsStream$1 = { - point: boundsPoint$1, - lineStart: noop$3, - lineEnd: noop$3, - polygonStart: noop$3, - polygonEnd: noop$3, - result: function() { - var bounds = [[x0$2, y0$2], [x1, y1]]; - x1 = y1 = -(y0$2 = x0$2 = Infinity); - return bounds; - } -}; - -function boundsPoint$1(x, y) { - if (x < x0$2) x0$2 = x; - if (x > x1) x1 = x; - if (y < y0$2) y0$2 = y; - if (y > y1) y1 = y; -} - -// TODO Enforce positive area for exterior, negative area for interior? - -var X0$1 = 0, - Y0$1 = 0, - Z0$1 = 0, - X1$1 = 0, - Y1$1 = 0, - Z1$1 = 0, - X2$1 = 0, - Y2$1 = 0, - Z2$1 = 0, - x00$1, - y00$1, - x0$3, - y0$3; - -var centroidStream$1 = { - point: centroidPoint$1, - lineStart: centroidLineStart$1, - lineEnd: centroidLineEnd$1, - polygonStart: function() { - centroidStream$1.lineStart = centroidRingStart$1; - centroidStream$1.lineEnd = centroidRingEnd$1; - }, - polygonEnd: function() { - centroidStream$1.point = centroidPoint$1; - centroidStream$1.lineStart = centroidLineStart$1; - centroidStream$1.lineEnd = centroidLineEnd$1; - }, - result: function() { - var centroid = Z2$1 ? [X2$1 / Z2$1, Y2$1 / Z2$1] - : Z1$1 ? [X1$1 / Z1$1, Y1$1 / Z1$1] - : Z0$1 ? [X0$1 / Z0$1, Y0$1 / Z0$1] - : [NaN, NaN]; - X0$1 = Y0$1 = Z0$1 = - X1$1 = Y1$1 = Z1$1 = - X2$1 = Y2$1 = Z2$1 = 0; - return centroid; - } -}; - -function centroidPoint$1(x, y) { - X0$1 += x; - Y0$1 += y; - ++Z0$1; -} - -function centroidLineStart$1() { - centroidStream$1.point = centroidPointFirstLine; -} - -function centroidPointFirstLine(x, y) { - centroidStream$1.point = centroidPointLine; - centroidPoint$1(x0$3 = x, y0$3 = y); -} - -function centroidPointLine(x, y) { - var dx = x - x0$3, dy = y - y0$3, z = sqrt$2(dx * dx + dy * dy); - X1$1 += z * (x0$3 + x) / 2; - Y1$1 += z * (y0$3 + y) / 2; - Z1$1 += z; - centroidPoint$1(x0$3 = x, y0$3 = y); -} - -function centroidLineEnd$1() { - centroidStream$1.point = centroidPoint$1; -} - -function centroidRingStart$1() { - centroidStream$1.point = centroidPointFirstRing; -} - -function centroidRingEnd$1() { - centroidPointRing(x00$1, y00$1); -} - -function centroidPointFirstRing(x, y) { - centroidStream$1.point = centroidPointRing; - centroidPoint$1(x00$1 = x0$3 = x, y00$1 = y0$3 = y); -} - -function centroidPointRing(x, y) { - var dx = x - x0$3, - dy = y - y0$3, - z = sqrt$2(dx * dx + dy * dy); - - X1$1 += z * (x0$3 + x) / 2; - Y1$1 += z * (y0$3 + y) / 2; - Z1$1 += z; - - z = y0$3 * x - x0$3 * y; - X2$1 += z * (x0$3 + x); - Y2$1 += z * (y0$3 + y); - Z2$1 += z * 3; - centroidPoint$1(x0$3 = x, y0$3 = y); -} - -function PathContext(context) { - this._context = context; -} - -PathContext.prototype = { - _radius: 4.5, - pointRadius: function(_) { - return this._radius = _, this; - }, - polygonStart: function() { - this._line = 0; - }, - polygonEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._point = 0; - }, - lineEnd: function() { - if (this._line === 0) this._context.closePath(); - this._point = NaN; - }, - point: function(x, y) { - switch (this._point) { - case 0: { - this._context.moveTo(x, y); - this._point = 1; - break; - } - case 1: { - this._context.lineTo(x, y); - break; - } - default: { - this._context.moveTo(x + this._radius, y); - this._context.arc(x, y, this._radius, 0, tau$2); - break; - } - } - }, - result: noop$3 -}; - -var lengthSum$1 = adder(), - lengthRing, - x00$2, - y00$2, - x0$4, - y0$4; - -var lengthStream = { - point: noop$3, - lineStart: function() { - lengthStream.point = lengthPointFirst; - }, - lineEnd: function() { - if (lengthRing) lengthPoint(x00$2, y00$2); - lengthStream.point = noop$3; - }, - polygonStart: function() { - lengthRing = true; - }, - polygonEnd: function() { - lengthRing = null; - }, - result: function() { - var length = +lengthSum$1; - lengthSum$1.reset(); - return length; - } -}; - -function lengthPointFirst(x, y) { - lengthStream.point = lengthPoint; - x00$2 = x0$4 = x, y00$2 = y0$4 = y; -} - -function lengthPoint(x, y) { - x0$4 -= x, y0$4 -= y; - lengthSum$1.add(sqrt$2(x0$4 * x0$4 + y0$4 * y0$4)); - x0$4 = x, y0$4 = y; -} - -function PathString() { - this._string = []; -} - -PathString.prototype = { - _radius: 4.5, - _circle: circle$1(4.5), - pointRadius: function(_) { - if ((_ = +_) !== this._radius) this._radius = _, this._circle = null; - return this; - }, - polygonStart: function() { - this._line = 0; - }, - polygonEnd: function() { - this._line = NaN; - }, - lineStart: function() { - this._point = 0; - }, - lineEnd: function() { - if (this._line === 0) this._string.push("Z"); - this._point = NaN; - }, - point: function(x, y) { - switch (this._point) { - case 0: { - this._string.push("M", x, ",", y); - this._point = 1; - break; - } - case 1: { - this._string.push("L", x, ",", y); - break; - } - default: { - if (this._circle == null) this._circle = circle$1(this._radius); - this._string.push("M", x, ",", y, this._circle); - break; - } - } - }, - result: function() { - if (this._string.length) { - var result = this._string.join(""); - this._string = []; - return result; - } else { - return null; - } - } -}; - -function circle$1(radius) { - return "m0," + radius - + "a" + radius + "," + radius + " 0 1,1 0," + -2 * radius - + "a" + radius + "," + radius + " 0 1,1 0," + 2 * radius - + "z"; -} - -function geoPath(projection, context) { - var pointRadius = 4.5, - projectionStream, - contextStream; - - function path(object) { - if (object) { - if (typeof pointRadius === "function") contextStream.pointRadius(+pointRadius.apply(this, arguments)); - geoStream(object, projectionStream(contextStream)); - } - return contextStream.result(); - } - - path.area = function(object) { - geoStream(object, projectionStream(areaStream$1)); - return areaStream$1.result(); - }; - - path.measure = function(object) { - geoStream(object, projectionStream(lengthStream)); - return lengthStream.result(); - }; - - path.bounds = function(object) { - geoStream(object, projectionStream(boundsStream$1)); - return boundsStream$1.result(); - }; - - path.centroid = function(object) { - geoStream(object, projectionStream(centroidStream$1)); - return centroidStream$1.result(); - }; - - path.projection = function(_) { - return arguments.length ? (projectionStream = _ == null ? (projection = null, identity$6) : (projection = _).stream, path) : projection; - }; - - path.context = function(_) { - if (!arguments.length) return context; - contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _); - if (typeof pointRadius !== "function") contextStream.pointRadius(pointRadius); - return path; - }; - - path.pointRadius = function(_) { - if (!arguments.length) return pointRadius; - pointRadius = typeof _ === "function" ? _ : (contextStream.pointRadius(+_), +_); - return path; - }; - - return path.projection(projection).context(context); -} - -function transformer$3(methods) { - return function(stream) { - var s = new TransformStream; - for (var key in methods) s[key] = methods[key]; - s.stream = stream; - return s; - }; -} - -function TransformStream() {} - -TransformStream.prototype = { - constructor: TransformStream, - point: function(x, y) { this.stream.point(x, y); }, - sphere: function() { this.stream.sphere(); }, - lineStart: function() { this.stream.lineStart(); }, - lineEnd: function() { this.stream.lineEnd(); }, - polygonStart: function() { this.stream.polygonStart(); }, - polygonEnd: function() { this.stream.polygonEnd(); } -}; - -function fit(projection, fitBounds, object) { - var clip = projection.clipExtent && projection.clipExtent(); - projection.scale(150).translate([0, 0]); - if (clip != null) projection.clipExtent(null); - geoStream(object, projection.stream(boundsStream$1)); - fitBounds(boundsStream$1.result()); - if (clip != null) projection.clipExtent(clip); - return projection; -} - -function fitExtent(projection, extent, object) { - return fit(projection, function(b) { - var w = extent[1][0] - extent[0][0], - h = extent[1][1] - extent[0][1], - k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])), - x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2, - y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2; - projection.scale(150 * k).translate([x, y]); - }, object); -} - -function fitSize(projection, size, object) { - return fitExtent(projection, [[0, 0], size], object); -} - -function fitWidth(projection, width, object) { - return fit(projection, function(b) { - var w = +width, - k = w / (b[1][0] - b[0][0]), - x = (w - k * (b[1][0] + b[0][0])) / 2, - y = -k * b[0][1]; - projection.scale(150 * k).translate([x, y]); - }, object); -} - -function fitHeight(projection, height, object) { - return fit(projection, function(b) { - var h = +height, - k = h / (b[1][1] - b[0][1]), - x = -k * b[0][0], - y = (h - k * (b[1][1] + b[0][1])) / 2; - projection.scale(150 * k).translate([x, y]); - }, object); -} - -var maxDepth = 16, // maximum depth of subdivision - cosMinDistance = cos$1(30 * radians); // cos(minimum angular distance) - -function resample(project, delta2) { - return +delta2 ? resample$1(project, delta2) : resampleNone(project); -} - -function resampleNone(project) { - return transformer$3({ - point: function(x, y) { - x = project(x, y); - this.stream.point(x[0], x[1]); - } - }); -} - -function resample$1(project, delta2) { - - function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) { - var dx = x1 - x0, - dy = y1 - y0, - d2 = dx * dx + dy * dy; - if (d2 > 4 * delta2 && depth--) { - var a = a0 + a1, - b = b0 + b1, - c = c0 + c1, - m = sqrt$2(a * a + b * b + c * c), - phi2 = asin$1(c /= m), - lambda2 = abs$1(abs$1(c) - 1) < epsilon$2 || abs$1(lambda0 - lambda1) < epsilon$2 ? (lambda0 + lambda1) / 2 : atan2$1(b, a), - p = project(lambda2, phi2), - x2 = p[0], - y2 = p[1], - dx2 = x2 - x0, - dy2 = y2 - y0, - dz = dy * dx2 - dx * dy2; - if (dz * dz / d2 > delta2 // perpendicular projected distance - || abs$1((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end - || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance - resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream); - stream.point(x2, y2); - resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream); - } - } - } - return function(stream) { - var lambda00, x00, y00, a00, b00, c00, // first point - lambda0, x0, y0, a0, b0, c0; // previous point - - var resampleStream = { - point: point, - lineStart: lineStart, - lineEnd: lineEnd, - polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; }, - polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; } - }; - - function point(x, y) { - x = project(x, y); - stream.point(x[0], x[1]); - } - - function lineStart() { - x0 = NaN; - resampleStream.point = linePoint; - stream.lineStart(); - } - - function linePoint(lambda, phi) { - var c = cartesian([lambda, phi]), p = project(lambda, phi); - resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream); - stream.point(x0, y0); - } - - function lineEnd() { - resampleStream.point = point; - stream.lineEnd(); - } - - function ringStart() { - lineStart(); - resampleStream.point = ringPoint; - resampleStream.lineEnd = ringEnd; - } - - function ringPoint(lambda, phi) { - linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0; - resampleStream.point = linePoint; - } - - function ringEnd() { - resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream); - resampleStream.lineEnd = lineEnd; - lineEnd(); - } - - return resampleStream; - }; -} - -var transformRadians = transformer$3({ - point: function(x, y) { - this.stream.point(x * radians, y * radians); - } -}); - -function transformRotate(rotate) { - return transformer$3({ - point: function(x, y) { - var r = rotate(x, y); - return this.stream.point(r[0], r[1]); - } - }); -} - -function scaleTranslate(k, dx, dy) { - function transform(x, y) { - return [dx + k * x, dy - k * y]; - } - transform.invert = function(x, y) { - return [(x - dx) / k, (dy - y) / k]; - }; - return transform; -} - -function scaleTranslateRotate(k, dx, dy, alpha) { - var cosAlpha = cos$1(alpha), - sinAlpha = sin$1(alpha), - a = cosAlpha * k, - b = sinAlpha * k, - ai = cosAlpha / k, - bi = sinAlpha / k, - ci = (sinAlpha * dy - cosAlpha * dx) / k, - fi = (sinAlpha * dx + cosAlpha * dy) / k; - function transform(x, y) { - return [a * x - b * y + dx, dy - b * x - a * y]; - } - transform.invert = function(x, y) { - return [ai * x - bi * y + ci, fi - bi * x - ai * y]; - }; - return transform; -} - -function projection(project) { - return projectionMutator(function() { return project; })(); -} - -function projectionMutator(projectAt) { - var project, - k = 150, // scale - x = 480, y = 250, // translate - lambda = 0, phi = 0, // center - deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate - alpha = 0, // post-rotate - theta = null, preclip = clipAntimeridian, // pre-clip angle - x0 = null, y0, x1, y1, postclip = identity$6, // post-clip extent - delta2 = 0.5, // precision - projectResample, - projectTransform, - projectRotateTransform, - cache, - cacheStream; - - function projection(point) { - return projectRotateTransform(point[0] * radians, point[1] * radians); - } - - function invert(point) { - point = projectRotateTransform.invert(point[0], point[1]); - return point && [point[0] * degrees$1, point[1] * degrees$1]; - } - - projection.stream = function(stream) { - return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream))))); - }; - - projection.preclip = function(_) { - return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip; - }; - - projection.postclip = function(_) { - return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip; - }; - - projection.clipAngle = function(_) { - return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees$1; - }; - - projection.clipExtent = function(_) { - return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$6) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]]; - }; - - projection.scale = function(_) { - return arguments.length ? (k = +_, recenter()) : k; - }; - - projection.translate = function(_) { - return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y]; - }; - - projection.center = function(_) { - return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees$1, phi * degrees$1]; - }; - - projection.rotate = function(_) { - return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees$1, deltaPhi * degrees$1, deltaGamma * degrees$1]; - }; - - projection.angle = function(_) { - return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees$1; - }; - - projection.precision = function(_) { - return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt$2(delta2); - }; - - projection.fitExtent = function(extent, object) { - return fitExtent(projection, extent, object); - }; - - projection.fitSize = function(size, object) { - return fitSize(projection, size, object); - }; - - projection.fitWidth = function(width, object) { - return fitWidth(projection, width, object); - }; - - projection.fitHeight = function(height, object) { - return fitHeight(projection, height, object); - }; - - function recenter() { - var center = scaleTranslateRotate(k, 0, 0, alpha).apply(null, project(lambda, phi)), - transform = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], alpha); - rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma); - projectTransform = compose(project, transform); - projectRotateTransform = compose(rotate, projectTransform); - projectResample = resample(projectTransform, delta2); - return reset(); - } - - function reset() { - cache = cacheStream = null; - return projection; - } - - return function() { - project = projectAt.apply(this, arguments); - projection.invert = project.invert && invert; - return recenter(); - }; -} - -function conicProjection(projectAt) { - var phi0 = 0, - phi1 = pi$2 / 3, - m = projectionMutator(projectAt), - p = m(phi0, phi1); - - p.parallels = function(_) { - return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees$1, phi1 * degrees$1]; - }; - - return p; -} - -function cylindricalEqualAreaRaw(phi0) { - var cosPhi0 = cos$1(phi0); - - function forward(lambda, phi) { - return [lambda * cosPhi0, sin$1(phi) / cosPhi0]; - } - - forward.invert = function(x, y) { - return [x / cosPhi0, asin$1(y * cosPhi0)]; - }; - - return forward; -} - -function conicEqualAreaRaw(y0, y1) { - var sy0 = sin$1(y0), n = (sy0 + sin$1(y1)) / 2; - - // Are the parallels symmetrical around the Equator? - if (abs$1(n) < epsilon$2) return cylindricalEqualAreaRaw(y0); - - var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt$2(c) / n; - - function project(x, y) { - var r = sqrt$2(c - 2 * n * sin$1(y)) / n; - return [r * sin$1(x *= n), r0 - r * cos$1(x)]; - } - - project.invert = function(x, y) { - var r0y = r0 - y; - return [atan2$1(x, abs$1(r0y)) / n * sign$1(r0y), asin$1((c - (x * x + r0y * r0y) * n * n) / (2 * n))]; - }; - - return project; -} - -function geoConicEqualArea() { - return conicProjection(conicEqualAreaRaw) - .scale(155.424) - .center([0, 33.6442]); -} - -function geoAlbers() { - return geoConicEqualArea() - .parallels([29.5, 45.5]) - .scale(1070) - .translate([480, 250]) - .rotate([96, 0]) - .center([-0.6, 38.7]); -} - -// The projections must have mutually exclusive clip regions on the sphere, -// as this will avoid emitting interleaving lines and polygons. -function multiplex(streams) { - var n = streams.length; - return { - point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); }, - sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); }, - lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); }, - lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); }, - polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); }, - polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); } - }; -} - -// A composite projection for the United States, configured by default for -// 960×500. The projection also works quite well at 960×600 if you change the -// scale to 1285 and adjust the translate accordingly. The set of standard -// parallels for each region comes from USGS, which is published here: -// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers -function geoAlbersUsa() { - var cache, - cacheStream, - lower48 = geoAlbers(), lower48Point, - alaska = geoConicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338 - hawaii = geoConicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007 - point, pointStream = {point: function(x, y) { point = [x, y]; }}; - - function albersUsa(coordinates) { - var x = coordinates[0], y = coordinates[1]; - return point = null, - (lower48Point.point(x, y), point) - || (alaskaPoint.point(x, y), point) - || (hawaiiPoint.point(x, y), point); - } - - albersUsa.invert = function(coordinates) { - var k = lower48.scale(), - t = lower48.translate(), - x = (coordinates[0] - t[0]) / k, - y = (coordinates[1] - t[1]) / k; - return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska - : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii - : lower48).invert(coordinates); - }; - - albersUsa.stream = function(stream) { - return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]); - }; - - albersUsa.precision = function(_) { - if (!arguments.length) return lower48.precision(); - lower48.precision(_), alaska.precision(_), hawaii.precision(_); - return reset(); - }; - - albersUsa.scale = function(_) { - if (!arguments.length) return lower48.scale(); - lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_); - return albersUsa.translate(lower48.translate()); - }; - - albersUsa.translate = function(_) { - if (!arguments.length) return lower48.translate(); - var k = lower48.scale(), x = +_[0], y = +_[1]; - - lower48Point = lower48 - .translate(_) - .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]]) - .stream(pointStream); - - alaskaPoint = alaska - .translate([x - 0.307 * k, y + 0.201 * k]) - .clipExtent([[x - 0.425 * k + epsilon$2, y + 0.120 * k + epsilon$2], [x - 0.214 * k - epsilon$2, y + 0.234 * k - epsilon$2]]) - .stream(pointStream); - - hawaiiPoint = hawaii - .translate([x - 0.205 * k, y + 0.212 * k]) - .clipExtent([[x - 0.214 * k + epsilon$2, y + 0.166 * k + epsilon$2], [x - 0.115 * k - epsilon$2, y + 0.234 * k - epsilon$2]]) - .stream(pointStream); - - return reset(); - }; - - albersUsa.fitExtent = function(extent, object) { - return fitExtent(albersUsa, extent, object); - }; - - albersUsa.fitSize = function(size, object) { - return fitSize(albersUsa, size, object); - }; - - albersUsa.fitWidth = function(width, object) { - return fitWidth(albersUsa, width, object); - }; - - albersUsa.fitHeight = function(height, object) { - return fitHeight(albersUsa, height, object); - }; - - function reset() { - cache = cacheStream = null; - return albersUsa; - } - - return albersUsa.scale(1070); -} - -function azimuthalRaw(scale) { - return function(x, y) { - var cx = cos$1(x), - cy = cos$1(y), - k = scale(cx * cy); - return [ - k * cy * sin$1(x), - k * sin$1(y) - ]; - } -} - -function azimuthalInvert(angle) { - return function(x, y) { - var z = sqrt$2(x * x + y * y), - c = angle(z), - sc = sin$1(c), - cc = cos$1(c); - return [ - atan2$1(x * sc, z * cc), - asin$1(z && y * sc / z) - ]; - } -} - -var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) { - return sqrt$2(2 / (1 + cxcy)); -}); - -azimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) { - return 2 * asin$1(z / 2); -}); - -function geoAzimuthalEqualArea() { - return projection(azimuthalEqualAreaRaw) - .scale(124.75) - .clipAngle(180 - 1e-3); -} - -var azimuthalEquidistantRaw = azimuthalRaw(function(c) { - return (c = acos$1(c)) && c / sin$1(c); -}); - -azimuthalEquidistantRaw.invert = azimuthalInvert(function(z) { - return z; -}); - -function geoAzimuthalEquidistant() { - return projection(azimuthalEquidistantRaw) - .scale(79.4188) - .clipAngle(180 - 1e-3); -} - -function mercatorRaw(lambda, phi) { - return [lambda, log$3(tan((halfPi$1 + phi) / 2))]; -} - -mercatorRaw.invert = function(x, y) { - return [x, 2 * atan(exp$1(y)) - halfPi$1]; -}; - -function geoMercator() { - return mercatorProjection(mercatorRaw) - .scale(961 / tau$2); -} - -function mercatorProjection(project) { - var m = projection(project), - center = m.center, - scale = m.scale, - translate = m.translate, - clipExtent = m.clipExtent, - x0 = null, y0, x1, y1; // clip extent - - m.scale = function(_) { - return arguments.length ? (scale(_), reclip()) : scale(); - }; - - m.translate = function(_) { - return arguments.length ? (translate(_), reclip()) : translate(); - }; - - m.center = function(_) { - return arguments.length ? (center(_), reclip()) : center(); - }; - - m.clipExtent = function(_) { - return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]]; - }; - - function reclip() { - var k = pi$2 * scale(), - t = m(rotation(m.rotate()).invert([0, 0])); - return clipExtent(x0 == null - ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw - ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]] - : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]); - } - - return reclip(); -} - -function tany(y) { - return tan((halfPi$1 + y) / 2); -} - -function conicConformalRaw(y0, y1) { - var cy0 = cos$1(y0), - n = y0 === y1 ? sin$1(y0) : log$3(cy0 / cos$1(y1)) / log$3(tany(y1) / tany(y0)), - f = cy0 * pow$2(tany(y0), n) / n; - - if (!n) return mercatorRaw; - - function project(x, y) { - if (f > 0) { if (y < -halfPi$1 + epsilon$2) y = -halfPi$1 + epsilon$2; } - else { if (y > halfPi$1 - epsilon$2) y = halfPi$1 - epsilon$2; } - var r = f / pow$2(tany(y), n); - return [r * sin$1(n * x), f - r * cos$1(n * x)]; - } - - project.invert = function(x, y) { - var fy = f - y, r = sign$1(n) * sqrt$2(x * x + fy * fy); - return [atan2$1(x, abs$1(fy)) / n * sign$1(fy), 2 * atan(pow$2(f / r, 1 / n)) - halfPi$1]; - }; - - return project; -} - -function geoConicConformal() { - return conicProjection(conicConformalRaw) - .scale(109.5) - .parallels([30, 30]); -} - -function equirectangularRaw(lambda, phi) { - return [lambda, phi]; -} - -equirectangularRaw.invert = equirectangularRaw; - -function geoEquirectangular() { - return projection(equirectangularRaw) - .scale(152.63); -} - -function conicEquidistantRaw(y0, y1) { - var cy0 = cos$1(y0), - n = y0 === y1 ? sin$1(y0) : (cy0 - cos$1(y1)) / (y1 - y0), - g = cy0 / n + y0; - - if (abs$1(n) < epsilon$2) return equirectangularRaw; - - function project(x, y) { - var gy = g - y, nx = n * x; - return [gy * sin$1(nx), g - gy * cos$1(nx)]; - } - - project.invert = function(x, y) { - var gy = g - y; - return [atan2$1(x, abs$1(gy)) / n * sign$1(gy), g - sign$1(n) * sqrt$2(x * x + gy * gy)]; - }; - - return project; -} - -function geoConicEquidistant() { - return conicProjection(conicEquidistantRaw) - .scale(131.154) - .center([0, 13.9389]); -} - -function gnomonicRaw(x, y) { - var cy = cos$1(y), k = cos$1(x) * cy; - return [cy * sin$1(x) / k, sin$1(y) / k]; -} - -gnomonicRaw.invert = azimuthalInvert(atan); - -function geoGnomonic() { - return projection(gnomonicRaw) - .scale(144.049) - .clipAngle(60); -} - -function scaleTranslate$1(kx, ky, tx, ty) { - return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? identity$6 : transformer$3({ - point: function(x, y) { - this.stream.point(x * kx + tx, y * ky + ty); - } - }); -} - -function geoIdentity() { - var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform = identity$6, // scale, translate and reflect - x0 = null, y0, x1, y1, // clip extent - postclip = identity$6, - cache, - cacheStream, - projection; - - function reset() { - cache = cacheStream = null; - return projection; - } - - return projection = { - stream: function(stream) { - return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream)); - }, - postclip: function(_) { - return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip; - }, - clipExtent: function(_) { - return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity$6) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]]; - }, - scale: function(_) { - return arguments.length ? (transform = scaleTranslate$1((k = +_) * sx, k * sy, tx, ty), reset()) : k; - }, - translate: function(_) { - return arguments.length ? (transform = scaleTranslate$1(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty]; - }, - reflectX: function(_) { - return arguments.length ? (transform = scaleTranslate$1(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0; - }, - reflectY: function(_) { - return arguments.length ? (transform = scaleTranslate$1(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0; - }, - fitExtent: function(extent, object) { - return fitExtent(projection, extent, object); - }, - fitSize: function(size, object) { - return fitSize(projection, size, object); - }, - fitWidth: function(width, object) { - return fitWidth(projection, width, object); - }, - fitHeight: function(height, object) { - return fitHeight(projection, height, object); - } - }; -} - -function naturalEarth1Raw(lambda, phi) { - var phi2 = phi * phi, phi4 = phi2 * phi2; - return [ - lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))), - phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - ]; -} - -naturalEarth1Raw.invert = function(x, y) { - var phi = y, i = 25, delta; - do { - var phi2 = phi * phi, phi4 = phi2 * phi2; - phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) / - (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4))); - } while (abs$1(delta) > epsilon$2 && --i > 0); - return [ - x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))), - phi - ]; -}; - -function geoNaturalEarth1() { - return projection(naturalEarth1Raw) - .scale(175.295); -} - -function orthographicRaw(x, y) { - return [cos$1(y) * sin$1(x), sin$1(y)]; -} - -orthographicRaw.invert = azimuthalInvert(asin$1); - -function geoOrthographic() { - return projection(orthographicRaw) - .scale(249.5) - .clipAngle(90 + epsilon$2); -} - -function stereographicRaw(x, y) { - var cy = cos$1(y), k = 1 + cos$1(x) * cy; - return [cy * sin$1(x) / k, sin$1(y) / k]; -} - -stereographicRaw.invert = azimuthalInvert(function(z) { - return 2 * atan(z); -}); - -function geoStereographic() { - return projection(stereographicRaw) - .scale(250) - .clipAngle(142); -} - -function transverseMercatorRaw(lambda, phi) { - return [log$3(tan((halfPi$1 + phi) / 2)), -lambda]; -} - -transverseMercatorRaw.invert = function(x, y) { - return [-y, 2 * atan(exp$1(x)) - halfPi$1]; -}; - -function geoTransverseMercator() { - var m = mercatorProjection(transverseMercatorRaw), - center = m.center, - rotate = m.rotate; - - m.center = function(_) { - return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]); - }; - - m.rotate = function(_) { - return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]); - }; - - return rotate([0, 0, 90]) - .scale(159.155); -} - -var defaultPath = geoPath(); - -var projectionProperties = [ - // standard properties in d3-geo - 'clipAngle', - 'clipExtent', - 'scale', - 'translate', - 'center', - 'rotate', - 'parallels', - 'precision', - 'reflectX', - 'reflectY', - - // extended properties in d3-geo-projections - 'coefficient', - 'distance', - 'fraction', - 'lobes', - 'parallel', - 'radius', - 'ratio', - 'spacing', - 'tilt' -]; - -/** - * Augment projections with their type and a copy method. - */ -function create$1(type, constructor) { - return function projection() { - var p = constructor(); - - p.type = type; - - p.path = geoPath().projection(p); - - p.copy = p.copy || function() { - var c = projection(); - projectionProperties.forEach(function(prop) { - if (p.hasOwnProperty(prop)) c[prop](p[prop]()); - }); - c.path.pointRadius(p.path.pointRadius()); - return c; - }; - - return p; - }; -} - -function projection$1(type, proj) { - if (!type || typeof type !== 'string') { - throw new Error('Projection type must be a name string.'); - } - type = type.toLowerCase(); - if (arguments.length > 1) { - projections[type] = create$1(type, proj); - return this; - } else { - return projections.hasOwnProperty(type) ? projections[type] : null; - } -} - -function getProjectionPath(proj) { - return (proj && proj.path) || defaultPath; -} - -var projections = { - // base d3-geo projection types - albers: geoAlbers, - albersusa: geoAlbersUsa, - azimuthalequalarea: geoAzimuthalEqualArea, - azimuthalequidistant: geoAzimuthalEquidistant, - conicconformal: geoConicConformal, - conicequalarea: geoConicEqualArea, - conicequidistant: geoConicEquidistant, - equirectangular: geoEquirectangular, - gnomonic: geoGnomonic, - identity: geoIdentity, - mercator: geoMercator, - naturalEarth1: geoNaturalEarth1, - orthographic: geoOrthographic, - stereographic: geoStereographic, - transversemercator: geoTransverseMercator -}; - -for (var key$2 in projections) { - projection$1(key$2, projections[key$2]); -} - -/** - * Map GeoJSON data to an SVG path string. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {function(number, number): *} params.projection - The cartographic - * projection to apply. - * @param {function(object): *} [params.field] - The field with GeoJSON data, - * or null if the tuple itself is a GeoJSON feature. - * @param {string} [params.as='path'] - The output field in which to store - * the generated path data (default 'path'). - */ -function GeoPath(params) { - Transform.call(this, null, params); -} - -GeoPath.Definition = { - "type": "GeoPath", - "metadata": {"modifies": true}, - "params": [ - { "name": "projection", "type": "projection" }, - { "name": "field", "type": "field" }, - { "name": "pointRadius", "type": "number", "expr": true }, - { "name": "as", "type": "string", "default": "path" } - ] -}; - -var prototype$12 = inherits(GeoPath, Transform); - -prototype$12.transform = function(_, pulse) { - var out = pulse.fork(pulse.ALL), - path = this.value, - field = _.field || identity, - as = _.as || 'path', - flag = out.SOURCE; - - function set(t) { t[as] = path(field(t)); } - - if (!path || _.modified()) { - // parameters updated, reset and reflow - this.value = path = getProjectionPath(_.projection); - out.materialize().reflow(); - } else { - flag = field === identity || pulse.modified(field.fields) - ? out.ADD_MOD - : out.ADD; - } - - var prev = initPath(path, _.pointRadius); - out.visit(flag, set); - path.pointRadius(prev); - - return out.modifies(as); -}; - -function initPath(path, pointRadius) { - var prev = path.pointRadius(); - path.context(null); - if (pointRadius != null) { - path.pointRadius(pointRadius); - } - return prev; -} - -/** - * Geo-code a longitude/latitude point to an x/y coordinate. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {function(number, number): *} params.projection - The cartographic - * projection to apply. - * @param {Array} params.fields - A two-element array of - * field accessors for the longitude and latitude values. - * @param {Array} [params.as] - A two-element array of field names - * under which to store the result. Defaults to ['x','y']. - */ -function GeoPoint(params) { - Transform.call(this, null, params); -} - -GeoPoint.Definition = { - "type": "GeoPoint", - "metadata": {"modifies": true}, - "params": [ - { "name": "projection", "type": "projection", "required": true }, - { "name": "fields", "type": "field", "array": true, "required": true, "length": 2 }, - { "name": "as", "type": "string", "array": true, "length": 2, "default": ["x", "y"] } - ] -}; - -var prototype$13 = inherits(GeoPoint, Transform); - -prototype$13.transform = function(_, pulse) { - var proj = _.projection, - lon = _.fields[0], - lat = _.fields[1], - as = _.as || ['x', 'y'], - x = as[0], - y = as[1], - mod; - - function set(t) { - var xy = proj([lon(t), lat(t)]); - if (xy) { - t[x] = xy[0]; - t[y] = xy[1]; - } else { - t[x] = undefined; - t[y] = undefined; - } - } - - if (_.modified()) { - // parameters updated, reflow - pulse = pulse.materialize().reflow(true).visit(pulse.SOURCE, set); - } else { - mod = pulse.modified(lon.fields) || pulse.modified(lat.fields); - pulse.visit(mod ? pulse.ADD_MOD : pulse.ADD, set); - } - - return pulse.modifies(as); -}; - -/** - * Annotate items with a geopath shape generator. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {function(number, number): *} params.projection - The cartographic - * projection to apply. - * @param {function(object): *} [params.field] - The field with GeoJSON data, - * or null if the tuple itself is a GeoJSON feature. - * @param {string} [params.as='shape'] - The output field in which to store - * the generated path data (default 'shape'). - */ -function GeoShape(params) { - Transform.call(this, null, params); -} - -GeoShape.Definition = { - "type": "GeoShape", - "metadata": {"modifies": true, "nomod": true}, - "params": [ - { "name": "projection", "type": "projection" }, - { "name": "field", "type": "field", "default": "datum" }, - { "name": "pointRadius", "type": "number", "expr": true }, - { "name": "as", "type": "string", "default": "shape" } - ] -}; - -var prototype$14 = inherits(GeoShape, Transform); - -prototype$14.transform = function(_, pulse) { - var out = pulse.fork(pulse.ALL), - shape = this.value, - as = _.as || 'shape', - flag = out.ADD; - - if (!shape || _.modified()) { - // parameters updated, reset and reflow - this.value = shape = shapeGenerator( - getProjectionPath(_.projection), - _.field || field('datum'), - _.pointRadius - ); - out.materialize().reflow(); - flag = out.SOURCE; - } - - out.visit(flag, function(t) { t[as] = shape; }); - - return out.modifies(as); -}; - -function shapeGenerator(path, field, pointRadius) { - var shape = pointRadius == null - ? function(_) { return path(field(_)); } - : function(_) { - var prev = path.pointRadius(), - value = path.pointRadius(pointRadius)(field(_)); - path.pointRadius(prev); - return value; - }; - shape.context = function(_) { - path.context(_); - return shape; - }; - - return shape; -} - -/** - * GeoJSON feature generator for creating graticules. - * @constructor - */ -function Graticule(params) { - Transform.call(this, [], params); - this.generator = graticule(); -} - -Graticule.Definition = { - "type": "Graticule", - "metadata": {"changes": true}, - "params": [ - { "name": "extent", "type": "array", "array": true, "length": 2, - "content": {"type": "number", "array": true, "length": 2} }, - { "name": "extentMajor", "type": "array", "array": true, "length": 2, - "content": {"type": "number", "array": true, "length": 2} }, - { "name": "extentMinor", "type": "array", "array": true, "length": 2, - "content": {"type": "number", "array": true, "length": 2} }, - { "name": "step", "type": "number", "array": true, "length": 2 }, - { "name": "stepMajor", "type": "number", "array": true, "length": 2, "default": [90, 360] }, - { "name": "stepMinor", "type": "number", "array": true, "length": 2, "default": [10, 10] }, - { "name": "precision", "type": "number", "default": 2.5 } - ] -}; - -var prototype$15 = inherits(Graticule, Transform); - -prototype$15.transform = function(_, pulse) { - var src = this.value, - gen = this.generator, t; - - if (!src.length || _.modified()) { - for (var prop in _) { - if (isFunction(gen[prop])) { - gen[prop](_[prop]); - } - } - } - - t = gen(); - if (src.length) { - pulse.mod.push(replace(src[0], t)); - } else { - pulse.add.push(ingest(t)); - } - src[0] = t; - - return pulse; -}; - -/** - * Maintains a cartographic projection. - * @constructor - * @param {object} params - The parameters for this operator. - */ -function Projection(params) { - Transform.call(this, null, params); - this.modified(true); // always treat as modified -} - -var prototype$16 = inherits(Projection, Transform); - -prototype$16.transform = function(_, pulse) { - var proj = this.value; - - if (!proj || _.modified('type')) { - this.value = (proj = create$2(_.type)); - projectionProperties.forEach(function(prop) { - if (_[prop] != null) set$1(proj, prop, _[prop]); - }); - } else { - projectionProperties.forEach(function(prop) { - if (_.modified(prop)) set$1(proj, prop, _[prop]); - }); - } - - if (_.pointRadius != null) proj.path.pointRadius(_.pointRadius); - if (_.fit) fit$1(proj, _); - - return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS); -}; - -function fit$1(proj, _) { - var data = collectGeoJSON(_.fit); - _.extent ? proj.fitExtent(_.extent, data) - : _.size ? proj.fitSize(_.size, data) : 0; -} - -function create$2(type) { - var constructor = projection$1((type || 'mercator').toLowerCase()); - if (!constructor) error('Unrecognized projection type: ' + type); - return constructor(); -} - -function set$1(proj, key, value) { - if (isFunction(proj[key])) proj[key](value); -} - -function collectGeoJSON(data) { - data = array(data); - return data.length === 1 ? data[0] - : { - type: FeatureCollection, - features: data.reduce((a, f) => a.concat(featurize(f)), []) - }; -} - -function featurize(f) { - return f.type === FeatureCollection - ? f.features - : array(f).filter(d => d != null).map( - d => d.type === Feature ? d : {type: Feature, geometry: d} - ); -} - - - -var geo = /*#__PURE__*/Object.freeze({ - contour: Contour, - geojson: GeoJSON, - geopath: GeoPath, - geopoint: GeoPoint, - geoshape: GeoShape, - graticule: Graticule, - projection: Projection -}); - -function forceCenter(x, y) { - var nodes; - - if (x == null) x = 0; - if (y == null) y = 0; - - function force() { - var i, - n = nodes.length, - node, - sx = 0, - sy = 0; - - for (i = 0; i < n; ++i) { - node = nodes[i], sx += node.x, sy += node.y; - } - - for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) { - node = nodes[i], node.x -= sx, node.y -= sy; - } - } - - force.initialize = function(_) { - nodes = _; - }; - - force.x = function(_) { - return arguments.length ? (x = +_, force) : x; - }; - - force.y = function(_) { - return arguments.length ? (y = +_, force) : y; - }; - - return force; -} - -function tree_add(d) { - var x = +this._x.call(null, d), - y = +this._y.call(null, d); - return add$3(this.cover(x, y), x, y, d); -} - -function add$3(tree, x, y, d) { - if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points - - var parent, - node = tree._root, - leaf = {data: d}, - x0 = tree._x0, - y0 = tree._y0, - x1 = tree._x1, - y1 = tree._y1, - xm, - ym, - xp, - yp, - right, - bottom, - i, - j; - - // If the tree is empty, initialize the root as a leaf. - if (!node) return tree._root = leaf, tree; - - // Find the existing leaf for the new point, or add it. - while (node.length) { - if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; - if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; - if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree; - } - - // Is the new point is exactly coincident with the existing point? - xp = +tree._x.call(null, node.data); - yp = +tree._y.call(null, node.data); - if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree; - - // Otherwise, split the leaf node until the old and new point are separated. - do { - parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4); - if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; - if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; - } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm))); - return parent[j] = node, parent[i] = leaf, tree; -} - -function addAll(data) { - var d, i, n = data.length, - x, - y, - xz = new Array(n), - yz = new Array(n), - x0 = Infinity, - y0 = Infinity, - x1 = -Infinity, - y1 = -Infinity; - - // Compute the points and their extent. - for (i = 0; i < n; ++i) { - if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue; - xz[i] = x; - yz[i] = y; - if (x < x0) x0 = x; - if (x > x1) x1 = x; - if (y < y0) y0 = y; - if (y > y1) y1 = y; - } - - // If there were no (valid) points, abort. - if (x0 > x1 || y0 > y1) return this; - - // Expand the tree to cover the new points. - this.cover(x0, y0).cover(x1, y1); - - // Add the new points. - for (i = 0; i < n; ++i) { - add$3(this, xz[i], yz[i], data[i]); - } - - return this; -} - -function tree_cover(x, y) { - if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points - - var x0 = this._x0, - y0 = this._y0, - x1 = this._x1, - y1 = this._y1; - - // If the quadtree has no extent, initialize them. - // Integer extent are necessary so that if we later double the extent, - // the existing quadrant boundaries don’t change due to floating point error! - if (isNaN(x0)) { - x1 = (x0 = Math.floor(x)) + 1; - y1 = (y0 = Math.floor(y)) + 1; - } - - // Otherwise, double repeatedly to cover. - else { - var z = x1 - x0, - node = this._root, - parent, - i; - - while (x0 > x || x >= x1 || y0 > y || y >= y1) { - i = (y < y0) << 1 | (x < x0); - parent = new Array(4), parent[i] = node, node = parent, z *= 2; - switch (i) { - case 0: x1 = x0 + z, y1 = y0 + z; break; - case 1: x0 = x1 - z, y1 = y0 + z; break; - case 2: x1 = x0 + z, y0 = y1 - z; break; - case 3: x0 = x1 - z, y0 = y1 - z; break; - } - } - - if (this._root && this._root.length) this._root = node; - } - - this._x0 = x0; - this._y0 = y0; - this._x1 = x1; - this._y1 = y1; - return this; -} - -function tree_data() { - var data = []; - this.visit(function(node) { - if (!node.length) do data.push(node.data); while (node = node.next) - }); - return data; -} - -function tree_extent(_) { - return arguments.length - ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1]) - : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]]; -} - -function Quad(node, x0, y0, x1, y1) { - this.node = node; - this.x0 = x0; - this.y0 = y0; - this.x1 = x1; - this.y1 = y1; -} - -function tree_find(x, y, radius) { - var data, - x0 = this._x0, - y0 = this._y0, - x1, - y1, - x2, - y2, - x3 = this._x1, - y3 = this._y1, - quads = [], - node = this._root, - q, - i; - - if (node) quads.push(new Quad(node, x0, y0, x3, y3)); - if (radius == null) radius = Infinity; - else { - x0 = x - radius, y0 = y - radius; - x3 = x + radius, y3 = y + radius; - radius *= radius; - } - - while (q = quads.pop()) { - - // Stop searching if this quadrant can’t contain a closer node. - if (!(node = q.node) - || (x1 = q.x0) > x3 - || (y1 = q.y0) > y3 - || (x2 = q.x1) < x0 - || (y2 = q.y1) < y0) continue; - - // Bisect the current quadrant. - if (node.length) { - var xm = (x1 + x2) / 2, - ym = (y1 + y2) / 2; - - quads.push( - new Quad(node[3], xm, ym, x2, y2), - new Quad(node[2], x1, ym, xm, y2), - new Quad(node[1], xm, y1, x2, ym), - new Quad(node[0], x1, y1, xm, ym) - ); - - // Visit the closest quadrant first. - if (i = (y >= ym) << 1 | (x >= xm)) { - q = quads[quads.length - 1]; - quads[quads.length - 1] = quads[quads.length - 1 - i]; - quads[quads.length - 1 - i] = q; - } - } - - // Visit this point. (Visiting coincident points isn’t necessary!) - else { - var dx = x - +this._x.call(null, node.data), - dy = y - +this._y.call(null, node.data), - d2 = dx * dx + dy * dy; - if (d2 < radius) { - var d = Math.sqrt(radius = d2); - x0 = x - d, y0 = y - d; - x3 = x + d, y3 = y + d; - data = node.data; - } - } - } - - return data; -} - -function tree_remove(d) { - if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points - - var parent, - node = this._root, - retainer, - previous, - next, - x0 = this._x0, - y0 = this._y0, - x1 = this._x1, - y1 = this._y1, - x, - y, - xm, - ym, - right, - bottom, - i, - j; - - // If the tree is empty, initialize the root as a leaf. - if (!node) return this; - - // Find the leaf node for the point. - // While descending, also retain the deepest parent with a non-removed sibling. - if (node.length) while (true) { - if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm; - if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym; - if (!(parent = node, node = node[i = bottom << 1 | right])) return this; - if (!node.length) break; - if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i; - } - - // Find the point to remove. - while (node.data !== d) if (!(previous = node, node = node.next)) return this; - if (next = node.next) delete node.next; - - // If there are multiple coincident points, remove just the point. - if (previous) return (next ? previous.next = next : delete previous.next), this; - - // If this is the root point, remove it. - if (!parent) return this._root = next, this; - - // Remove this leaf. - next ? parent[i] = next : delete parent[i]; - - // If the parent now contains exactly one leaf, collapse superfluous parents. - if ((node = parent[0] || parent[1] || parent[2] || parent[3]) - && node === (parent[3] || parent[2] || parent[1] || parent[0]) - && !node.length) { - if (retainer) retainer[j] = node; - else this._root = node; - } - - return this; -} - -function removeAll(data) { - for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]); - return this; -} - -function tree_root() { - return this._root; -} - -function tree_size() { - var size = 0; - this.visit(function(node) { - if (!node.length) do ++size; while (node = node.next) - }); - return size; -} - -function tree_visit(callback) { - var quads = [], q, node = this._root, child, x0, y0, x1, y1; - if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1)); - while (q = quads.pop()) { - if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) { - var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; - if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1)); - if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1)); - if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym)); - if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym)); - } - } - return this; -} - -function tree_visitAfter(callback) { - var quads = [], next = [], q; - if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1)); - while (q = quads.pop()) { - var node = q.node; - if (node.length) { - var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2; - if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym)); - if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym)); - if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1)); - if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1)); - } - next.push(q); - } - while (q = next.pop()) { - callback(q.node, q.x0, q.y0, q.x1, q.y1); - } - return this; -} - -function defaultX$1(d) { - return d[0]; -} - -function tree_x(_) { - return arguments.length ? (this._x = _, this) : this._x; -} - -function defaultY$1(d) { - return d[1]; -} - -function tree_y(_) { - return arguments.length ? (this._y = _, this) : this._y; -} - -function quadtree(nodes, x, y) { - var tree = new Quadtree(x == null ? defaultX$1 : x, y == null ? defaultY$1 : y, NaN, NaN, NaN, NaN); - return nodes == null ? tree : tree.addAll(nodes); -} - -function Quadtree(x, y, x0, y0, x1, y1) { - this._x = x; - this._y = y; - this._x0 = x0; - this._y0 = y0; - this._x1 = x1; - this._y1 = y1; - this._root = undefined; -} - -function leaf_copy(leaf) { - var copy = {data: leaf.data}, next = copy; - while (leaf = leaf.next) next = next.next = {data: leaf.data}; - return copy; -} - -var treeProto = quadtree.prototype = Quadtree.prototype; - -treeProto.copy = function() { - var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1), - node = this._root, - nodes, - child; - - if (!node) return copy; - - if (!node.length) return copy._root = leaf_copy(node), copy; - - nodes = [{source: node, target: copy._root = new Array(4)}]; - while (node = nodes.pop()) { - for (var i = 0; i < 4; ++i) { - if (child = node.source[i]) { - if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)}); - else node.target[i] = leaf_copy(child); - } - } - } - - return copy; -}; - -treeProto.add = tree_add; -treeProto.addAll = addAll; -treeProto.cover = tree_cover; -treeProto.data = tree_data; -treeProto.extent = tree_extent; -treeProto.find = tree_find; -treeProto.remove = tree_remove; -treeProto.removeAll = removeAll; -treeProto.root = tree_root; -treeProto.size = tree_size; -treeProto.visit = tree_visit; -treeProto.visitAfter = tree_visitAfter; -treeProto.x = tree_x; -treeProto.y = tree_y; - -function constant$6(x) { - return function() { - return x; - }; -} - -function jiggle() { - return (Math.random() - 0.5) * 1e-6; -} - -function x$2(d) { - return d.x + d.vx; -} - -function y$2(d) { - return d.y + d.vy; -} - -function forceCollide(radius) { - var nodes, - radii, - strength = 1, - iterations = 1; - - if (typeof radius !== "function") radius = constant$6(radius == null ? 1 : +radius); - - function force() { - var i, n = nodes.length, - tree, - node, - xi, - yi, - ri, - ri2; - - for (var k = 0; k < iterations; ++k) { - tree = quadtree(nodes, x$2, y$2).visitAfter(prepare); - for (i = 0; i < n; ++i) { - node = nodes[i]; - ri = radii[node.index], ri2 = ri * ri; - xi = node.x + node.vx; - yi = node.y + node.vy; - tree.visit(apply); - } - } - - function apply(quad, x0, y0, x1, y1) { - var data = quad.data, rj = quad.r, r = ri + rj; - if (data) { - if (data.index > node.index) { - var x = xi - data.x - data.vx, - y = yi - data.y - data.vy, - l = x * x + y * y; - if (l < r * r) { - if (x === 0) x = jiggle(), l += x * x; - if (y === 0) y = jiggle(), l += y * y; - l = (r - (l = Math.sqrt(l))) / l * strength; - node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj)); - node.vy += (y *= l) * r; - data.vx -= x * (r = 1 - r); - data.vy -= y * r; - } - } - return; - } - return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r; - } - } - - function prepare(quad) { - if (quad.data) return quad.r = radii[quad.data.index]; - for (var i = quad.r = 0; i < 4; ++i) { - if (quad[i] && quad[i].r > quad.r) { - quad.r = quad[i].r; - } - } - } - - function initialize() { - if (!nodes) return; - var i, n = nodes.length, node; - radii = new Array(n); - for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes); - } - - force.initialize = function(_) { - nodes = _; - initialize(); - }; - - force.iterations = function(_) { - return arguments.length ? (iterations = +_, force) : iterations; - }; - - force.strength = function(_) { - return arguments.length ? (strength = +_, force) : strength; - }; - - force.radius = function(_) { - return arguments.length ? (radius = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : radius; - }; - - return force; -} - -function index(d) { - return d.index; -} - -function find$1(nodeById, nodeId) { - var node = nodeById.get(nodeId); - if (!node) throw new Error("missing: " + nodeId); - return node; -} - -function forceLink(links) { - var id = index, - strength = defaultStrength, - strengths, - distance = constant$6(30), - distances, - nodes, - count, - bias, - iterations = 1; - - if (links == null) links = []; - - function defaultStrength(link) { - return 1 / Math.min(count[link.source.index], count[link.target.index]); - } - - function force(alpha) { - for (var k = 0, n = links.length; k < iterations; ++k) { - for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) { - link = links[i], source = link.source, target = link.target; - x = target.x + target.vx - source.x - source.vx || jiggle(); - y = target.y + target.vy - source.y - source.vy || jiggle(); - l = Math.sqrt(x * x + y * y); - l = (l - distances[i]) / l * alpha * strengths[i]; - x *= l, y *= l; - target.vx -= x * (b = bias[i]); - target.vy -= y * b; - source.vx += x * (b = 1 - b); - source.vy += y * b; - } - } - } - - function initialize() { - if (!nodes) return; - - var i, - n = nodes.length, - m = links.length, - nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])), - link; - - for (i = 0, count = new Array(n); i < m; ++i) { - link = links[i], link.index = i; - if (typeof link.source !== "object") link.source = find$1(nodeById, link.source); - if (typeof link.target !== "object") link.target = find$1(nodeById, link.target); - count[link.source.index] = (count[link.source.index] || 0) + 1; - count[link.target.index] = (count[link.target.index] || 0) + 1; - } - - for (i = 0, bias = new Array(m); i < m; ++i) { - link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]); - } - - strengths = new Array(m), initializeStrength(); - distances = new Array(m), initializeDistance(); - } - - function initializeStrength() { - if (!nodes) return; - - for (var i = 0, n = links.length; i < n; ++i) { - strengths[i] = +strength(links[i], i, links); - } - } - - function initializeDistance() { - if (!nodes) return; - - for (var i = 0, n = links.length; i < n; ++i) { - distances[i] = +distance(links[i], i, links); - } - } - - force.initialize = function(_) { - nodes = _; - initialize(); - }; - - force.links = function(_) { - return arguments.length ? (links = _, initialize(), force) : links; - }; - - force.id = function(_) { - return arguments.length ? (id = _, force) : id; - }; - - force.iterations = function(_) { - return arguments.length ? (iterations = +_, force) : iterations; - }; - - force.strength = function(_) { - return arguments.length ? (strength = typeof _ === "function" ? _ : constant$6(+_), initializeStrength(), force) : strength; - }; - - force.distance = function(_) { - return arguments.length ? (distance = typeof _ === "function" ? _ : constant$6(+_), initializeDistance(), force) : distance; - }; - - return force; -} - -var noop$4 = {value: function() {}}; - -function dispatch() { - for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) { - if (!(t = arguments[i] + "") || (t in _)) throw new Error("illegal type: " + t); - _[t] = []; - } - return new Dispatch(_); -} - -function Dispatch(_) { - this._ = _; -} - -function parseTypenames(typenames, types) { - return typenames.trim().split(/^|\s+/).map(function(t) { - var name = "", i = t.indexOf("."); - if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i); - if (t && !types.hasOwnProperty(t)) throw new Error("unknown type: " + t); - return {type: t, name: name}; - }); -} - -Dispatch.prototype = dispatch.prototype = { - constructor: Dispatch, - on: function(typename, callback) { - var _ = this._, - T = parseTypenames(typename + "", _), - t, - i = -1, - n = T.length; - - // If no callback was specified, return the callback of the given type and name. - if (arguments.length < 2) { - while (++i < n) if ((t = (typename = T[i]).type) && (t = get$3(_[t], typename.name))) return t; - return; - } - - // If a type was specified, set the callback for the given type and name. - // Otherwise, if a null callback was specified, remove callbacks of the given name. - if (callback != null && typeof callback !== "function") throw new Error("invalid callback: " + callback); - while (++i < n) { - if (t = (typename = T[i]).type) _[t] = set$2(_[t], typename.name, callback); - else if (callback == null) for (t in _) _[t] = set$2(_[t], typename.name, null); - } - - return this; - }, - copy: function() { - var copy = {}, _ = this._; - for (var t in _) copy[t] = _[t].slice(); - return new Dispatch(copy); - }, - call: function(type, that) { - if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2]; - if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); - for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); - }, - apply: function(type, that, args) { - if (!this._.hasOwnProperty(type)) throw new Error("unknown type: " + type); - for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args); - } -}; - -function get$3(type, name) { - for (var i = 0, n = type.length, c; i < n; ++i) { - if ((c = type[i]).name === name) { - return c.value; - } - } -} - -function set$2(type, name, callback) { - for (var i = 0, n = type.length; i < n; ++i) { - if (type[i].name === name) { - type[i] = noop$4, type = type.slice(0, i).concat(type.slice(i + 1)); - break; - } - } - if (callback != null) type.push({name: name, value: callback}); - return type; -} - -var frame = 0, // is an animation frame pending? - timeout = 0, // is a timeout pending? - interval = 0, // are any timers active? - pokeDelay = 1000, // how frequently we check for clock skew - taskHead, - taskTail, - clockLast = 0, - clockNow = 0, - clockSkew = 0, - clock = typeof performance === "object" && performance.now ? performance : Date, - setFrame = typeof window === "object" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); }; - -function now() { - return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew); -} - -function clearNow() { - clockNow = 0; -} - -function Timer() { - this._call = - this._time = - this._next = null; -} - -Timer.prototype = timer.prototype = { - constructor: Timer, - restart: function(callback, delay, time) { - if (typeof callback !== "function") throw new TypeError("callback is not a function"); - time = (time == null ? now() : +time) + (delay == null ? 0 : +delay); - if (!this._next && taskTail !== this) { - if (taskTail) taskTail._next = this; - else taskHead = this; - taskTail = this; - } - this._call = callback; - this._time = time; - sleep(); - }, - stop: function() { - if (this._call) { - this._call = null; - this._time = Infinity; - sleep(); - } - } -}; - -function timer(callback, delay, time) { - var t = new Timer; - t.restart(callback, delay, time); - return t; -} - -function timerFlush() { - now(); // Get the current time, if not already set. - ++frame; // Pretend we’ve set an alarm, if we haven’t already. - var t = taskHead, e; - while (t) { - if ((e = clockNow - t._time) >= 0) t._call.call(null, e); - t = t._next; - } - --frame; -} - -function wake() { - clockNow = (clockLast = clock.now()) + clockSkew; - frame = timeout = 0; - try { - timerFlush(); - } finally { - frame = 0; - nap(); - clockNow = 0; - } -} - -function poke() { - var now = clock.now(), delay = now - clockLast; - if (delay > pokeDelay) clockSkew -= delay, clockLast = now; -} - -function nap() { - var t0, t1 = taskHead, t2, time = Infinity; - while (t1) { - if (t1._call) { - if (time > t1._time) time = t1._time; - t0 = t1, t1 = t1._next; - } else { - t2 = t1._next, t1._next = null; - t1 = t0 ? t0._next = t2 : taskHead = t2; - } - } - taskTail = t0; - sleep(time); -} - -function sleep(time) { - if (frame) return; // Soonest alarm already set, or will be. - if (timeout) timeout = clearTimeout(timeout); - var delay = time - clockNow; // Strictly less than if we recomputed clockNow. - if (delay > 24) { - if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew); - if (interval) interval = clearInterval(interval); - } else { - if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay); - frame = 1, setFrame(wake); - } -} - -function interval$1(callback, delay, time) { - var t = new Timer, total = delay; - if (delay == null) return t.restart(callback, delay, time), t; - delay = +delay, time = time == null ? now() : +time; - t.restart(function tick(elapsed) { - elapsed += total; - t.restart(tick, total += delay, time); - callback(elapsed); - }, delay, time); - return t; -} - -function x$3(d) { - return d.x; -} - -function y$3(d) { - return d.y; -} - -var initialRadius = 10, - initialAngle = Math.PI * (3 - Math.sqrt(5)); - -function forceSimulation(nodes) { - var simulation, - alpha = 1, - alphaMin = 0.001, - alphaDecay = 1 - Math.pow(alphaMin, 1 / 300), - alphaTarget = 0, - velocityDecay = 0.6, - forces = new Map(), - stepper = timer(step), - event = dispatch("tick", "end"); - - if (nodes == null) nodes = []; - - function step() { - tick(); - event.call("tick", simulation); - if (alpha < alphaMin) { - stepper.stop(); - event.call("end", simulation); - } - } - - function tick(iterations) { - var i, n = nodes.length, node; - - if (iterations === undefined) iterations = 1; - - for (var k = 0; k < iterations; ++k) { - alpha += (alphaTarget - alpha) * alphaDecay; - - forces.forEach(function(force) { - force(alpha); - }); - - for (i = 0; i < n; ++i) { - node = nodes[i]; - if (node.fx == null) node.x += node.vx *= velocityDecay; - else node.x = node.fx, node.vx = 0; - if (node.fy == null) node.y += node.vy *= velocityDecay; - else node.y = node.fy, node.vy = 0; - } - } - - return simulation; - } - - function initializeNodes() { - for (var i = 0, n = nodes.length, node; i < n; ++i) { - node = nodes[i], node.index = i; - if (node.fx != null) node.x = node.fx; - if (node.fy != null) node.y = node.fy; - if (isNaN(node.x) || isNaN(node.y)) { - var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle; - node.x = radius * Math.cos(angle); - node.y = radius * Math.sin(angle); - } - if (isNaN(node.vx) || isNaN(node.vy)) { - node.vx = node.vy = 0; - } - } - } - - function initializeForce(force) { - if (force.initialize) force.initialize(nodes); - return force; - } - - initializeNodes(); - - return simulation = { - tick: tick, - - restart: function() { - return stepper.restart(step), simulation; - }, - - stop: function() { - return stepper.stop(), simulation; - }, - - nodes: function(_) { - return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes; - }, - - alpha: function(_) { - return arguments.length ? (alpha = +_, simulation) : alpha; - }, - - alphaMin: function(_) { - return arguments.length ? (alphaMin = +_, simulation) : alphaMin; - }, - - alphaDecay: function(_) { - return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay; - }, - - alphaTarget: function(_) { - return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget; - }, - - velocityDecay: function(_) { - return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay; - }, - - force: function(name, _) { - return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name); - }, - - find: function(x, y, radius) { - var i = 0, - n = nodes.length, - dx, - dy, - d2, - node, - closest; - - if (radius == null) radius = Infinity; - else radius *= radius; - - for (i = 0; i < n; ++i) { - node = nodes[i]; - dx = x - node.x; - dy = y - node.y; - d2 = dx * dx + dy * dy; - if (d2 < radius) closest = node, radius = d2; - } - - return closest; - }, - - on: function(name, _) { - return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name); - } - }; -} - -function forceManyBody() { - var nodes, - node, - alpha, - strength = constant$6(-30), - strengths, - distanceMin2 = 1, - distanceMax2 = Infinity, - theta2 = 0.81; - - function force(_) { - var i, n = nodes.length, tree = quadtree(nodes, x$3, y$3).visitAfter(accumulate); - for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply); - } - - function initialize() { - if (!nodes) return; - var i, n = nodes.length, node; - strengths = new Array(n); - for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes); - } - - function accumulate(quad) { - var strength = 0, q, c, weight = 0, x, y, i; - - // For internal nodes, accumulate forces from child quadrants. - if (quad.length) { - for (x = y = i = 0; i < 4; ++i) { - if ((q = quad[i]) && (c = Math.abs(q.value))) { - strength += q.value, weight += c, x += c * q.x, y += c * q.y; - } - } - quad.x = x / weight; - quad.y = y / weight; - } - - // For leaf nodes, accumulate forces from coincident quadrants. - else { - q = quad; - q.x = q.data.x; - q.y = q.data.y; - do strength += strengths[q.data.index]; - while (q = q.next); - } - - quad.value = strength; - } - - function apply(quad, x1, _, x2) { - if (!quad.value) return true; - - var x = quad.x - node.x, - y = quad.y - node.y, - w = x2 - x1, - l = x * x + y * y; - - // Apply the Barnes-Hut approximation if possible. - // Limit forces for very close nodes; randomize direction if coincident. - if (w * w / theta2 < l) { - if (l < distanceMax2) { - if (x === 0) x = jiggle(), l += x * x; - if (y === 0) y = jiggle(), l += y * y; - if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); - node.vx += x * quad.value * alpha / l; - node.vy += y * quad.value * alpha / l; - } - return true; - } - - // Otherwise, process points directly. - else if (quad.length || l >= distanceMax2) return; - - // Limit forces for very close nodes; randomize direction if coincident. - if (quad.data !== node || quad.next) { - if (x === 0) x = jiggle(), l += x * x; - if (y === 0) y = jiggle(), l += y * y; - if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l); - } - - do if (quad.data !== node) { - w = strengths[quad.data.index] * alpha / l; - node.vx += x * w; - node.vy += y * w; - } while (quad = quad.next); - } - - force.initialize = function(_) { - nodes = _; - initialize(); - }; - - force.strength = function(_) { - return arguments.length ? (strength = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : strength; - }; - - force.distanceMin = function(_) { - return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2); - }; - - force.distanceMax = function(_) { - return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2); - }; - - force.theta = function(_) { - return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2); - }; - - return force; -} - -function forceX(x) { - var strength = constant$6(0.1), - nodes, - strengths, - xz; - - if (typeof x !== "function") x = constant$6(x == null ? 0 : +x); - - function force(alpha) { - for (var i = 0, n = nodes.length, node; i < n; ++i) { - node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha; - } - } - - function initialize() { - if (!nodes) return; - var i, n = nodes.length; - strengths = new Array(n); - xz = new Array(n); - for (i = 0; i < n; ++i) { - strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes); - } - } - - force.initialize = function(_) { - nodes = _; - initialize(); - }; - - force.strength = function(_) { - return arguments.length ? (strength = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : strength; - }; - - force.x = function(_) { - return arguments.length ? (x = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : x; - }; - - return force; -} - -function forceY(y) { - var strength = constant$6(0.1), - nodes, - strengths, - yz; - - if (typeof y !== "function") y = constant$6(y == null ? 0 : +y); - - function force(alpha) { - for (var i = 0, n = nodes.length, node; i < n; ++i) { - node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha; - } - } - - function initialize() { - if (!nodes) return; - var i, n = nodes.length; - strengths = new Array(n); - yz = new Array(n); - for (i = 0; i < n; ++i) { - strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes); - } - } - - force.initialize = function(_) { - nodes = _; - initialize(); - }; - - force.strength = function(_) { - return arguments.length ? (strength = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : strength; - }; - - force.y = function(_) { - return arguments.length ? (y = typeof _ === "function" ? _ : constant$6(+_), initialize(), force) : y; - }; - - return force; -} - -var ForceMap = { - center: forceCenter, - collide: forceCollide, - nbody: forceManyBody, - link: forceLink, - x: forceX, - y: forceY -}; - -var Forces = 'forces', - ForceParams = [ - 'alpha', 'alphaMin', 'alphaTarget', - 'velocityDecay', 'forces' - ], - ForceConfig = ['static', 'iterations'], - ForceOutput = ['x', 'y', 'vx', 'vy']; - -/** - * Force simulation layout. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {Array} params.forces - The forces to apply. - */ -function Force(params) { - Transform.call(this, null, params); -} - -Force.Definition = { - "type": "Force", - "metadata": {"modifies": true}, - "params": [ - { "name": "static", "type": "boolean", "default": false }, - { "name": "restart", "type": "boolean", "default": false }, - { "name": "iterations", "type": "number", "default": 300 }, - { "name": "alpha", "type": "number", "default": 1 }, - { "name": "alphaMin", "type": "number", "default": 0.001 }, - { "name": "alphaTarget", "type": "number", "default": 0 }, - { "name": "velocityDecay", "type": "number", "default": 0.4 }, - { "name": "forces", "type": "param", "array": true, - "params": [ - { - "key": {"force": "center"}, - "params": [ - { "name": "x", "type": "number", "default": 0 }, - { "name": "y", "type": "number", "default": 0 } - ] - }, - { - "key": {"force": "collide"}, - "params": [ - { "name": "radius", "type": "number", "expr": true }, - { "name": "strength", "type": "number", "default": 0.7 }, - { "name": "iterations", "type": "number", "default": 1 } - ] - }, - { - "key": {"force": "nbody"}, - "params": [ - { "name": "strength", "type": "number", "default": -30 }, - { "name": "theta", "type": "number", "default": 0.9 }, - { "name": "distanceMin", "type": "number", "default": 1 }, - { "name": "distanceMax", "type": "number" } - ] - }, - { - "key": {"force": "link"}, - "params": [ - { "name": "links", "type": "data" }, - { "name": "id", "type": "field" }, - { "name": "distance", "type": "number", "default": 30, "expr": true }, - { "name": "strength", "type": "number", "expr": true }, - { "name": "iterations", "type": "number", "default": 1 } - ] - }, - { - "key": {"force": "x"}, - "params": [ - { "name": "strength", "type": "number", "default": 0.1 }, - { "name": "x", "type": "field" } - ] - }, - { - "key": {"force": "y"}, - "params": [ - { "name": "strength", "type": "number", "default": 0.1 }, - { "name": "y", "type": "field" } - ] - } - ] }, - { - "name": "as", "type": "string", "array": true, "modify": false, - "default": ForceOutput - } - ] -}; - -var prototype$17 = inherits(Force, Transform); - -prototype$17.transform = function(_, pulse) { - var sim = this.value, - change = pulse.changed(pulse.ADD_REM), - params = _.modified(ForceParams), - iters = _.iterations || 300; - - // configure simulation - if (!sim) { - this.value = sim = simulation(pulse.source, _); - sim.on('tick', rerun(pulse.dataflow, this)); - if (!_.static) { - change = true; - sim.tick(); // ensure we run on init - } - pulse.modifies('index'); - } else { - if (change) { - pulse.modifies('index'); - sim.nodes(pulse.source); - } - if (params || pulse.changed(pulse.MOD)) { - setup(sim, _, 0, pulse); - } - } - - // run simulation - if (params || change || _.modified(ForceConfig) - || (pulse.changed() && _.restart)) - { - sim.alpha(Math.max(sim.alpha(), _.alpha || 1)) - .alphaDecay(1 - Math.pow(sim.alphaMin(), 1 / iters)); - - if (_.static) { - for (sim.stop(); --iters >= 0;) sim.tick(); - } else { - if (sim.stopped()) sim.restart(); - if (!change) return pulse.StopPropagation; // defer to sim ticks - } - } - - return this.finish(_, pulse); -}; - -prototype$17.finish = function(_, pulse) { - var dataflow = pulse.dataflow; - - // inspect dependencies, touch link source data - for (var args=this._argops, j=0, m=args.length, arg; j= 0) sum += children[i].value; - node.value = sum; -} - -function node_count() { - return this.eachAfter(count); -} - -function node_each(callback) { - var node = this, current, next = [node], children, i, n; - do { - current = next.reverse(), next = []; - while (node = current.pop()) { - callback(node), children = node.children; - if (children) for (i = 0, n = children.length; i < n; ++i) { - next.push(children[i]); - } - } - } while (next.length); - return this; -} - -function node_eachBefore(callback) { - var node = this, nodes = [node], children, i; - while (node = nodes.pop()) { - callback(node), children = node.children; - if (children) for (i = children.length - 1; i >= 0; --i) { - nodes.push(children[i]); - } - } - return this; -} - -function node_eachAfter(callback) { - var node = this, nodes = [node], next = [], children, i, n; - while (node = nodes.pop()) { - next.push(node), children = node.children; - if (children) for (i = 0, n = children.length; i < n; ++i) { - nodes.push(children[i]); - } - } - while (node = next.pop()) { - callback(node); - } - return this; -} - -function node_sum(value) { - return this.eachAfter(function(node) { - var sum = +value(node.data) || 0, - children = node.children, - i = children && children.length; - while (--i >= 0) sum += children[i].value; - node.value = sum; - }); -} - -function node_sort(compare) { - return this.eachBefore(function(node) { - if (node.children) { - node.children.sort(compare); - } - }); -} - -function node_path(end) { - var start = this, - ancestor = leastCommonAncestor(start, end), - nodes = [start]; - while (start !== ancestor) { - start = start.parent; - nodes.push(start); - } - var k = nodes.length; - while (end !== ancestor) { - nodes.splice(k, 0, end); - end = end.parent; - } - return nodes; -} - -function leastCommonAncestor(a, b) { - if (a === b) return a; - var aNodes = a.ancestors(), - bNodes = b.ancestors(), - c = null; - a = aNodes.pop(); - b = bNodes.pop(); - while (a === b) { - c = a; - a = aNodes.pop(); - b = bNodes.pop(); - } - return c; -} - -function node_ancestors() { - var node = this, nodes = [node]; - while (node = node.parent) { - nodes.push(node); - } - return nodes; -} - -function node_descendants() { - var nodes = []; - this.each(function(node) { - nodes.push(node); - }); - return nodes; -} - -function node_leaves() { - var leaves = []; - this.eachBefore(function(node) { - if (!node.children) { - leaves.push(node); - } - }); - return leaves; -} - -function node_links() { - var root = this, links = []; - root.each(function(node) { - if (node !== root) { // Don’t include the root’s parent, if any. - links.push({source: node.parent, target: node}); - } - }); - return links; -} - -function hierarchy(data, children) { - var root = new Node(data), - valued = +data.value && (root.value = data.value), - node, - nodes = [root], - child, - childs, - i, - n; - - if (children == null) children = defaultChildren; - - while (node = nodes.pop()) { - if (valued) node.value = +node.data.value; - if ((childs = children(node.data)) && (n = childs.length)) { - node.children = new Array(n); - for (i = n - 1; i >= 0; --i) { - nodes.push(child = node.children[i] = new Node(childs[i])); - child.parent = node; - child.depth = node.depth + 1; - } - } - } - - return root.eachBefore(computeHeight); -} - -function node_copy() { - return hierarchy(this).eachBefore(copyData); -} - -function defaultChildren(d) { - return d.children; -} - -function copyData(node) { - node.data = node.data.data; -} - -function computeHeight(node) { - var height = 0; - do node.height = height; - while ((node = node.parent) && (node.height < ++height)); -} - -function Node(data) { - this.data = data; - this.depth = - this.height = 0; - this.parent = null; -} - -Node.prototype = hierarchy.prototype = { - constructor: Node, - count: node_count, - each: node_each, - eachAfter: node_eachAfter, - eachBefore: node_eachBefore, - sum: node_sum, - sort: node_sort, - path: node_path, - ancestors: node_ancestors, - descendants: node_descendants, - leaves: node_leaves, - links: node_links, - copy: node_copy -}; - -var slice$2 = Array.prototype.slice; - -function shuffle(array) { - var m = array.length, - t, - i; - - while (m) { - i = Math.random() * m-- | 0; - t = array[m]; - array[m] = array[i]; - array[i] = t; - } - - return array; -} - -function enclose(circles) { - var i = 0, n = (circles = shuffle(slice$2.call(circles))).length, B = [], p, e; - - while (i < n) { - p = circles[i]; - if (e && enclosesWeak(e, p)) ++i; - else e = encloseBasis(B = extendBasis(B, p)), i = 0; - } - - return e; -} - -function extendBasis(B, p) { - var i, j; - - if (enclosesWeakAll(p, B)) return [p]; - - // If we get here then B must have at least one element. - for (i = 0; i < B.length; ++i) { - if (enclosesNot(p, B[i]) - && enclosesWeakAll(encloseBasis2(B[i], p), B)) { - return [B[i], p]; - } - } - - // If we get here then B must have at least two elements. - for (i = 0; i < B.length - 1; ++i) { - for (j = i + 1; j < B.length; ++j) { - if (enclosesNot(encloseBasis2(B[i], B[j]), p) - && enclosesNot(encloseBasis2(B[i], p), B[j]) - && enclosesNot(encloseBasis2(B[j], p), B[i]) - && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) { - return [B[i], B[j], p]; - } - } - } - - // If we get here then something is very wrong. - throw new Error; -} - -function enclosesNot(a, b) { - var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y; - return dr < 0 || dr * dr < dx * dx + dy * dy; -} - -function enclosesWeak(a, b) { - var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y; - return dr > 0 && dr * dr > dx * dx + dy * dy; -} - -function enclosesWeakAll(a, B) { - for (var i = 0; i < B.length; ++i) { - if (!enclosesWeak(a, B[i])) { - return false; - } - } - return true; -} - -function encloseBasis(B) { - switch (B.length) { - case 1: return encloseBasis1(B[0]); - case 2: return encloseBasis2(B[0], B[1]); - case 3: return encloseBasis3(B[0], B[1], B[2]); - } -} - -function encloseBasis1(a) { - return { - x: a.x, - y: a.y, - r: a.r - }; -} - -function encloseBasis2(a, b) { - var x1 = a.x, y1 = a.y, r1 = a.r, - x2 = b.x, y2 = b.y, r2 = b.r, - x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1, - l = Math.sqrt(x21 * x21 + y21 * y21); - return { - x: (x1 + x2 + x21 / l * r21) / 2, - y: (y1 + y2 + y21 / l * r21) / 2, - r: (l + r1 + r2) / 2 - }; -} - -function encloseBasis3(a, b, c) { - var x1 = a.x, y1 = a.y, r1 = a.r, - x2 = b.x, y2 = b.y, r2 = b.r, - x3 = c.x, y3 = c.y, r3 = c.r, - a2 = x1 - x2, - a3 = x1 - x3, - b2 = y1 - y2, - b3 = y1 - y3, - c2 = r2 - r1, - c3 = r3 - r1, - d1 = x1 * x1 + y1 * y1 - r1 * r1, - d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2, - d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3, - ab = a3 * b2 - a2 * b3, - xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1, - xb = (b3 * c2 - b2 * c3) / ab, - ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1, - yb = (a2 * c3 - a3 * c2) / ab, - A = xb * xb + yb * yb - 1, - B = 2 * (r1 + xa * xb + ya * yb), - C = xa * xa + ya * ya - r1 * r1, - r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B); - return { - x: x1 + xa + xb * r, - y: y1 + ya + yb * r, - r: r - }; -} - -function place(b, a, c) { - var dx = b.x - a.x, x, a2, - dy = b.y - a.y, y, b2, - d2 = dx * dx + dy * dy; - if (d2) { - a2 = a.r + c.r, a2 *= a2; - b2 = b.r + c.r, b2 *= b2; - if (a2 > b2) { - x = (d2 + b2 - a2) / (2 * d2); - y = Math.sqrt(Math.max(0, b2 / d2 - x * x)); - c.x = b.x - x * dx - y * dy; - c.y = b.y - x * dy + y * dx; - } else { - x = (d2 + a2 - b2) / (2 * d2); - y = Math.sqrt(Math.max(0, a2 / d2 - x * x)); - c.x = a.x + x * dx - y * dy; - c.y = a.y + x * dy + y * dx; - } - } else { - c.x = a.x + c.r; - c.y = a.y; - } -} - -function intersects(a, b) { - var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y; - return dr > 0 && dr * dr > dx * dx + dy * dy; -} - -function score(node) { - var a = node._, - b = node.next._, - ab = a.r + b.r, - dx = (a.x * b.r + b.x * a.r) / ab, - dy = (a.y * b.r + b.y * a.r) / ab; - return dx * dx + dy * dy; -} - -function Node$1(circle) { - this._ = circle; - this.next = null; - this.previous = null; -} - -function packEnclose(circles) { - if (!(n = circles.length)) return 0; - - var a, b, c, n, aa, ca, i, j, k, sj, sk; - - // Place the first circle. - a = circles[0], a.x = 0, a.y = 0; - if (!(n > 1)) return a.r; - - // Place the second circle. - b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0; - if (!(n > 2)) return a.r + b.r; - - // Place the third circle. - place(b, a, c = circles[2]); - - // Initialize the front-chain using the first three circles a, b and c. - a = new Node$1(a), b = new Node$1(b), c = new Node$1(c); - a.next = c.previous = b; - b.next = a.previous = c; - c.next = b.previous = a; - - // Attempt to place each remaining circle… - pack: for (i = 3; i < n; ++i) { - place(a._, b._, c = circles[i]), c = new Node$1(c); - - // Find the closest intersecting circle on the front-chain, if any. - // “Closeness” is determined by linear distance along the front-chain. - // “Ahead” or “behind” is likewise determined by linear distance. - j = b.next, k = a.previous, sj = b._.r, sk = a._.r; - do { - if (sj <= sk) { - if (intersects(j._, c._)) { - b = j, a.next = b, b.previous = a, --i; - continue pack; - } - sj += j._.r, j = j.next; - } else { - if (intersects(k._, c._)) { - a = k, a.next = b, b.previous = a, --i; - continue pack; - } - sk += k._.r, k = k.previous; - } - } while (j !== k.next); - - // Success! Insert the new circle c between a and b. - c.previous = a, c.next = b, a.next = b.previous = b = c; - - // Compute the new closest circle pair to the centroid. - aa = score(a); - while ((c = c.next) !== b) { - if ((ca = score(c)) < aa) { - a = c, aa = ca; - } - } - b = a.next; - } - - // Compute the enclosing circle of the front chain. - a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a); - - // Translate the circles to put the enclosing circle around the origin. - for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y; - - return c.r; -} - -function optional(f) { - return f == null ? null : required(f); -} - -function required(f) { - if (typeof f !== "function") throw new Error; - return f; -} - -function constantZero() { - return 0; -} - -function constant$7(x) { - return function() { - return x; - }; -} - -function defaultRadius(d) { - return Math.sqrt(d.value); -} - -function pack() { - var radius = null, - dx = 1, - dy = 1, - padding = constantZero; - - function pack(root) { - root.x = dx / 2, root.y = dy / 2; - if (radius) { - root.eachBefore(radiusLeaf(radius)) - .eachAfter(packChildren(padding, 0.5)) - .eachBefore(translateChild(1)); - } else { - root.eachBefore(radiusLeaf(defaultRadius)) - .eachAfter(packChildren(constantZero, 1)) - .eachAfter(packChildren(padding, root.r / Math.min(dx, dy))) - .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r))); - } - return root; - } - - pack.radius = function(x) { - return arguments.length ? (radius = optional(x), pack) : radius; - }; - - pack.size = function(x) { - return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy]; - }; - - pack.padding = function(x) { - return arguments.length ? (padding = typeof x === "function" ? x : constant$7(+x), pack) : padding; - }; - - return pack; -} - -function radiusLeaf(radius) { - return function(node) { - if (!node.children) { - node.r = Math.max(0, +radius(node) || 0); - } - }; -} - -function packChildren(padding, k) { - return function(node) { - if (children = node.children) { - var children, - i, - n = children.length, - r = padding(node) * k || 0, - e; - - if (r) for (i = 0; i < n; ++i) children[i].r += r; - e = packEnclose(children); - if (r) for (i = 0; i < n; ++i) children[i].r -= r; - node.r = e + r; - } - }; -} - -function translateChild(k) { - return function(node) { - var parent = node.parent; - node.r *= k; - if (parent) { - node.x = parent.x + k * node.x; - node.y = parent.y + k * node.y; - } - }; -} - -function roundNode(node) { - node.x0 = Math.round(node.x0); - node.y0 = Math.round(node.y0); - node.x1 = Math.round(node.x1); - node.y1 = Math.round(node.y1); -} - -function treemapDice(parent, x0, y0, x1, y1) { - var nodes = parent.children, - node, - i = -1, - n = nodes.length, - k = parent.value && (x1 - x0) / parent.value; - - while (++i < n) { - node = nodes[i], node.y0 = y0, node.y1 = y1; - node.x0 = x0, node.x1 = x0 += node.value * k; - } -} - -function partition$3() { - var dx = 1, - dy = 1, - padding = 0, - round = false; - - function partition(root) { - var n = root.height + 1; - root.x0 = - root.y0 = padding; - root.x1 = dx; - root.y1 = dy / n; - root.eachBefore(positionNode(dy, n)); - if (round) root.eachBefore(roundNode); - return root; - } - - function positionNode(dy, n) { - return function(node) { - if (node.children) { - treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n); - } - var x0 = node.x0, - y0 = node.y0, - x1 = node.x1 - padding, - y1 = node.y1 - padding; - if (x1 < x0) x0 = x1 = (x0 + x1) / 2; - if (y1 < y0) y0 = y1 = (y0 + y1) / 2; - node.x0 = x0; - node.y0 = y0; - node.x1 = x1; - node.y1 = y1; - }; - } - - partition.round = function(x) { - return arguments.length ? (round = !!x, partition) : round; - }; - - partition.size = function(x) { - return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy]; - }; - - partition.padding = function(x) { - return arguments.length ? (padding = +x, partition) : padding; - }; - - return partition; -} - -var keyPrefix = "$", // Protect against keys like “__proto__”. - preroot = {depth: -1}, - ambiguous = {}; - -function defaultId(d) { - return d.id; -} - -function defaultParentId(d) { - return d.parentId; -} - -function stratify() { - var id = defaultId, - parentId = defaultParentId; - - function stratify(data) { - var d, - i, - n = data.length, - root, - parent, - node, - nodes = new Array(n), - nodeId, - nodeKey, - nodeByKey = {}; - - for (i = 0; i < n; ++i) { - d = data[i], node = nodes[i] = new Node(d); - if ((nodeId = id(d, i, data)) != null && (nodeId += "")) { - nodeKey = keyPrefix + (node.id = nodeId); - nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node; - } - } - - for (i = 0; i < n; ++i) { - node = nodes[i], nodeId = parentId(data[i], i, data); - if (nodeId == null || !(nodeId += "")) { - if (root) throw new Error("multiple roots"); - root = node; - } else { - parent = nodeByKey[keyPrefix + nodeId]; - if (!parent) throw new Error("missing: " + nodeId); - if (parent === ambiguous) throw new Error("ambiguous: " + nodeId); - if (parent.children) parent.children.push(node); - else parent.children = [node]; - node.parent = parent; - } - } - - if (!root) throw new Error("no root"); - root.parent = preroot; - root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight); - root.parent = null; - if (n > 0) throw new Error("cycle"); - - return root; - } - - stratify.id = function(x) { - return arguments.length ? (id = required(x), stratify) : id; - }; - - stratify.parentId = function(x) { - return arguments.length ? (parentId = required(x), stratify) : parentId; - }; - - return stratify; -} - -function defaultSeparation$1(a, b) { - return a.parent === b.parent ? 1 : 2; -} - -// function radialSeparation(a, b) { -// return (a.parent === b.parent ? 1 : 2) / a.depth; -// } - -// This function is used to traverse the left contour of a subtree (or -// subforest). It returns the successor of v on this contour. This successor is -// either given by the leftmost child of v or by the thread of v. The function -// returns null if and only if v is on the highest level of its subtree. -function nextLeft(v) { - var children = v.children; - return children ? children[0] : v.t; -} - -// This function works analogously to nextLeft. -function nextRight(v) { - var children = v.children; - return children ? children[children.length - 1] : v.t; -} - -// Shifts the current subtree rooted at w+. This is done by increasing -// prelim(w+) and mod(w+) by shift. -function moveSubtree(wm, wp, shift) { - var change = shift / (wp.i - wm.i); - wp.c -= change; - wp.s += shift; - wm.c += change; - wp.z += shift; - wp.m += shift; -} - -// All other shifts, applied to the smaller subtrees between w- and w+, are -// performed by this function. To prepare the shifts, we have to adjust -// change(w+), shift(w+), and change(w-). -function executeShifts(v) { - var shift = 0, - change = 0, - children = v.children, - i = children.length, - w; - while (--i >= 0) { - w = children[i]; - w.z += shift; - w.m += shift; - shift += w.s + (change += w.c); - } -} - -// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise, -// returns the specified (default) ancestor. -function nextAncestor(vim, v, ancestor) { - return vim.a.parent === v.parent ? vim.a : ancestor; -} - -function TreeNode(node, i) { - this._ = node; - this.parent = null; - this.children = null; - this.A = null; // default ancestor - this.a = this; // ancestor - this.z = 0; // prelim - this.m = 0; // mod - this.c = 0; // change - this.s = 0; // shift - this.t = null; // thread - this.i = i; // number -} - -TreeNode.prototype = Object.create(Node.prototype); - -function treeRoot(root) { - var tree = new TreeNode(root, 0), - node, - nodes = [tree], - child, - children, - i, - n; - - while (node = nodes.pop()) { - if (children = node._.children) { - node.children = new Array(n = children.length); - for (i = n - 1; i >= 0; --i) { - nodes.push(child = node.children[i] = new TreeNode(children[i], i)); - child.parent = node; - } - } - } - - (tree.parent = new TreeNode(null, 0)).children = [tree]; - return tree; -} - -// Node-link tree diagram using the Reingold-Tilford "tidy" algorithm -function tree() { - var separation = defaultSeparation$1, - dx = 1, - dy = 1, - nodeSize = null; - - function tree(root) { - var t = treeRoot(root); - - // Compute the layout using Buchheim et al.’s algorithm. - t.eachAfter(firstWalk), t.parent.m = -t.z; - t.eachBefore(secondWalk); - - // If a fixed node size is specified, scale x and y. - if (nodeSize) root.eachBefore(sizeNode); - - // If a fixed tree size is specified, scale x and y based on the extent. - // Compute the left-most, right-most, and depth-most nodes for extents. - else { - var left = root, - right = root, - bottom = root; - root.eachBefore(function(node) { - if (node.x < left.x) left = node; - if (node.x > right.x) right = node; - if (node.depth > bottom.depth) bottom = node; - }); - var s = left === right ? 1 : separation(left, right) / 2, - tx = s - left.x, - kx = dx / (right.x + s + tx), - ky = dy / (bottom.depth || 1); - root.eachBefore(function(node) { - node.x = (node.x + tx) * kx; - node.y = node.depth * ky; - }); - } - - return root; - } - - // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is - // applied recursively to the children of v, as well as the function - // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the - // node v is placed to the midpoint of its outermost children. - function firstWalk(v) { - var children = v.children, - siblings = v.parent.children, - w = v.i ? siblings[v.i - 1] : null; - if (children) { - executeShifts(v); - var midpoint = (children[0].z + children[children.length - 1].z) / 2; - if (w) { - v.z = w.z + separation(v._, w._); - v.m = v.z - midpoint; - } else { - v.z = midpoint; - } - } else if (w) { - v.z = w.z + separation(v._, w._); - } - v.parent.A = apportion(v, w, v.parent.A || siblings[0]); - } - - // Computes all real x-coordinates by summing up the modifiers recursively. - function secondWalk(v) { - v._.x = v.z + v.parent.m; - v.m += v.parent.m; - } - - // The core of the algorithm. Here, a new subtree is combined with the - // previous subtrees. Threads are used to traverse the inside and outside - // contours of the left and right subtree up to the highest common level. The - // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the - // superscript o means outside and i means inside, the subscript - means left - // subtree and + means right subtree. For summing up the modifiers along the - // contour, we use respective variables si+, si-, so-, and so+. Whenever two - // nodes of the inside contours conflict, we compute the left one of the - // greatest uncommon ancestors using the function ANCESTOR and call MOVE - // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees. - // Finally, we add a new thread (if necessary). - function apportion(v, w, ancestor) { - if (w) { - var vip = v, - vop = v, - vim = w, - vom = vip.parent.children[0], - sip = vip.m, - sop = vop.m, - sim = vim.m, - som = vom.m, - shift; - while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) { - vom = nextLeft(vom); - vop = nextRight(vop); - vop.a = v; - shift = vim.z + sim - vip.z - sip + separation(vim._, vip._); - if (shift > 0) { - moveSubtree(nextAncestor(vim, v, ancestor), v, shift); - sip += shift; - sop += shift; - } - sim += vim.m; - sip += vip.m; - som += vom.m; - sop += vop.m; - } - if (vim && !nextRight(vop)) { - vop.t = vim; - vop.m += sim - sop; - } - if (vip && !nextLeft(vom)) { - vom.t = vip; - vom.m += sip - som; - ancestor = v; - } - } - return ancestor; - } - - function sizeNode(node) { - node.x *= dx; - node.y = node.depth * dy; - } - - tree.separation = function(x) { - return arguments.length ? (separation = x, tree) : separation; - }; - - tree.size = function(x) { - return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]); - }; - - tree.nodeSize = function(x) { - return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null); - }; - - return tree; -} - -function treemapSlice(parent, x0, y0, x1, y1) { - var nodes = parent.children, - node, - i = -1, - n = nodes.length, - k = parent.value && (y1 - y0) / parent.value; - - while (++i < n) { - node = nodes[i], node.x0 = x0, node.x1 = x1; - node.y0 = y0, node.y1 = y0 += node.value * k; - } -} - -var phi = (1 + Math.sqrt(5)) / 2; - -function squarifyRatio(ratio, parent, x0, y0, x1, y1) { - var rows = [], - nodes = parent.children, - row, - nodeValue, - i0 = 0, - i1 = 0, - n = nodes.length, - dx, dy, - value = parent.value, - sumValue, - minValue, - maxValue, - newRatio, - minRatio, - alpha, - beta; - - while (i0 < n) { - dx = x1 - x0, dy = y1 - y0; - - // Find the next non-empty node. - do sumValue = nodes[i1++].value; while (!sumValue && i1 < n); - minValue = maxValue = sumValue; - alpha = Math.max(dy / dx, dx / dy) / (value * ratio); - beta = sumValue * sumValue * alpha; - minRatio = Math.max(maxValue / beta, beta / minValue); - - // Keep adding nodes while the aspect ratio maintains or improves. - for (; i1 < n; ++i1) { - sumValue += nodeValue = nodes[i1].value; - if (nodeValue < minValue) minValue = nodeValue; - if (nodeValue > maxValue) maxValue = nodeValue; - beta = sumValue * sumValue * alpha; - newRatio = Math.max(maxValue / beta, beta / minValue); - if (newRatio > minRatio) { sumValue -= nodeValue; break; } - minRatio = newRatio; - } - - // Position and record the row orientation. - rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)}); - if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1); - else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1); - value -= sumValue, i0 = i1; - } - - return rows; -} - -var treemapSquarify = (function custom(ratio) { - - function squarify(parent, x0, y0, x1, y1) { - squarifyRatio(ratio, parent, x0, y0, x1, y1); - } - - squarify.ratio = function(x) { - return custom((x = +x) > 1 ? x : 1); - }; - - return squarify; -})(phi); - -function treemap() { - var tile = treemapSquarify, - round = false, - dx = 1, - dy = 1, - paddingStack = [0], - paddingInner = constantZero, - paddingTop = constantZero, - paddingRight = constantZero, - paddingBottom = constantZero, - paddingLeft = constantZero; - - function treemap(root) { - root.x0 = - root.y0 = 0; - root.x1 = dx; - root.y1 = dy; - root.eachBefore(positionNode); - paddingStack = [0]; - if (round) root.eachBefore(roundNode); - return root; - } - - function positionNode(node) { - var p = paddingStack[node.depth], - x0 = node.x0 + p, - y0 = node.y0 + p, - x1 = node.x1 - p, - y1 = node.y1 - p; - if (x1 < x0) x0 = x1 = (x0 + x1) / 2; - if (y1 < y0) y0 = y1 = (y0 + y1) / 2; - node.x0 = x0; - node.y0 = y0; - node.x1 = x1; - node.y1 = y1; - if (node.children) { - p = paddingStack[node.depth + 1] = paddingInner(node) / 2; - x0 += paddingLeft(node) - p; - y0 += paddingTop(node) - p; - x1 -= paddingRight(node) - p; - y1 -= paddingBottom(node) - p; - if (x1 < x0) x0 = x1 = (x0 + x1) / 2; - if (y1 < y0) y0 = y1 = (y0 + y1) / 2; - tile(node, x0, y0, x1, y1); - } - } - - treemap.round = function(x) { - return arguments.length ? (round = !!x, treemap) : round; - }; - - treemap.size = function(x) { - return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy]; - }; - - treemap.tile = function(x) { - return arguments.length ? (tile = required(x), treemap) : tile; - }; - - treemap.padding = function(x) { - return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner(); - }; - - treemap.paddingInner = function(x) { - return arguments.length ? (paddingInner = typeof x === "function" ? x : constant$7(+x), treemap) : paddingInner; - }; - - treemap.paddingOuter = function(x) { - return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop(); - }; - - treemap.paddingTop = function(x) { - return arguments.length ? (paddingTop = typeof x === "function" ? x : constant$7(+x), treemap) : paddingTop; - }; - - treemap.paddingRight = function(x) { - return arguments.length ? (paddingRight = typeof x === "function" ? x : constant$7(+x), treemap) : paddingRight; - }; - - treemap.paddingBottom = function(x) { - return arguments.length ? (paddingBottom = typeof x === "function" ? x : constant$7(+x), treemap) : paddingBottom; - }; - - treemap.paddingLeft = function(x) { - return arguments.length ? (paddingLeft = typeof x === "function" ? x : constant$7(+x), treemap) : paddingLeft; - }; - - return treemap; -} - -function treemapBinary(parent, x0, y0, x1, y1) { - var nodes = parent.children, - i, n = nodes.length, - sum, sums = new Array(n + 1); - - for (sums[0] = sum = i = 0; i < n; ++i) { - sums[i + 1] = sum += nodes[i].value; - } - - partition(0, n, parent.value, x0, y0, x1, y1); - - function partition(i, j, value, x0, y0, x1, y1) { - if (i >= j - 1) { - var node = nodes[i]; - node.x0 = x0, node.y0 = y0; - node.x1 = x1, node.y1 = y1; - return; - } - - var valueOffset = sums[i], - valueTarget = (value / 2) + valueOffset, - k = i + 1, - hi = j - 1; - - while (k < hi) { - var mid = k + hi >>> 1; - if (sums[mid] < valueTarget) k = mid + 1; - else hi = mid; - } - - if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k; - - var valueLeft = sums[k] - valueOffset, - valueRight = value - valueLeft; - - if ((x1 - x0) > (y1 - y0)) { - var xk = (x0 * valueRight + x1 * valueLeft) / value; - partition(i, k, valueLeft, x0, y0, xk, y1); - partition(k, j, valueRight, xk, y0, x1, y1); - } else { - var yk = (y0 * valueRight + y1 * valueLeft) / value; - partition(i, k, valueLeft, x0, y0, x1, yk); - partition(k, j, valueRight, x0, yk, x1, y1); - } - } -} - -function treemapSliceDice(parent, x0, y0, x1, y1) { - (parent.depth & 1 ? treemapSlice : treemapDice)(parent, x0, y0, x1, y1); -} - -var treemapResquarify = (function custom(ratio) { - - function resquarify(parent, x0, y0, x1, y1) { - if ((rows = parent._squarify) && (rows.ratio === ratio)) { - var rows, - row, - nodes, - i, - j = -1, - n, - m = rows.length, - value = parent.value; - - while (++j < m) { - row = rows[j], nodes = row.children; - for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value; - if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value); - else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1); - value -= row.value; - } - } else { - parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1); - rows.ratio = ratio; - } - } - - resquarify.ratio = function(x) { - return custom((x = +x) > 1 ? x : 1); - }; - - return resquarify; -})(phi); - -/** - * Nest tuples into a tree structure, grouped by key values. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {Array} params.keys - The key fields to nest by, in order. - * @param {boolean} [params.generate=false] - A boolean flag indicating if - * non-leaf nodes generated by this transform should be included in the - * output. The default (false) includes only the input data (leaf nodes) - * in the data stream. - */ -function Nest(params) { - Transform.call(this, null, params); -} - -Nest.Definition = { - "type": "Nest", - "metadata": {"treesource": true, "changes": true}, - "params": [ - { "name": "keys", "type": "field", "array": true }, - { "name": "generate", "type": "boolean" } - ] -}; - -var prototype$18 = inherits(Nest, Transform); - -function children(n) { - return n.values; -} - -prototype$18.transform = function(_, pulse) { - if (!pulse.source) { - error('Nest transform requires an upstream data source.'); - } - - var gen = _.generate, - mod = _.modified(), - out = pulse.clone(), - tree = this.value; - - if (!tree || mod || pulse.changed()) { - // collect nodes to remove - if (tree) { - tree.each(function(node) { - if (node.children && isTuple(node.data)) { - out.rem.push(node.data); - } - }); - } - - // generate new tree structure - this.value = tree = hierarchy({ - values: array(_.keys) - .reduce(function(n, k) { n.key(k); return n; }, nest()) - .entries(out.source) - }, children); - - // collect nodes to add - if (gen) { - tree.each(function(node) { - if (node.children) { - node = ingest(node.data); - out.add.push(node); - out.source.push(node); - } - }); - } - - // build lookup table - lookup$3(tree, tupleid, tupleid); - } - - out.source.root = tree; - return out; -}; - -function nest() { - var keys = [], - nest; - - function apply(array, depth) { - if (depth >= keys.length) { - return array; - } - - var i = -1, - n = array.length, - key = keys[depth++], - keyValue, - value, - valuesByKey = {}, - values, - result = {}; - - while (++i < n) { - keyValue = key(value = array[i]) + ''; - if (values = valuesByKey[keyValue]) { - values.push(value); - } else { - valuesByKey[keyValue] = [value]; - } - } - - for (keyValue in valuesByKey) { - result[keyValue] = apply(valuesByKey[keyValue], depth); - } - - return result; - } - - function entries(map, depth) { - if (++depth > keys.length) return map; - var array = [], k; - for (k in map) { - array.push({key: k, values: entries(map[k], depth)}); - } - return array; - } - - return nest = { - entries: function(array) { return entries(apply(array, 0), 0); }, - key: function(d) { keys.push(d); return nest; } - }; -} - -/** - * Abstract class for tree layout. - * @constructor - * @param {object} params - The parameters for this operator. - */ -function HierarchyLayout(params) { - Transform.call(this, null, params); -} - -var prototype$19 = inherits(HierarchyLayout, Transform); - -prototype$19.transform = function(_, pulse) { - if (!pulse.source || !pulse.source.root) { - error(this.constructor.name - + ' transform requires a backing tree data source.'); - } - - var layout = this.layout(_.method), - fields = this.fields, - root = pulse.source.root, - as = _.as || fields; - - if (_.field) root.sum(_.field); - if (_.sort) root.sort(_.sort); - - setParams(layout, this.params, _); - if (layout.separation) { - layout.separation(_.separation !== false ? defaultSeparation$2 : one); - } - - try { - this.value = layout(root); - } catch (err) { - error(err); - } - root.each(function(node) { setFields(node, fields, as); }); - - return pulse.reflow(_.modified()).modifies(as).modifies('leaf'); -}; - -function setParams(layout, params, _) { - for (var p, i=0, n=params.length; i 0) return; - r /= dx; - if (dx < 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } else if (dx > 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } - - r = x1 - ax; - if (!dx && r < 0) return; - r /= dx; - if (dx < 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } else if (dx > 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } - - r = y0 - ay; - if (!dy && r > 0) return; - r /= dy; - if (dy < 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } else if (dy > 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } - - r = y1 - ay; - if (!dy && r < 0) return; - r /= dy; - if (dy < 0) { - if (r > t1) return; - if (r > t0) t0 = r; - } else if (dy > 0) { - if (r < t0) return; - if (r < t1) t1 = r; - } - - if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check? - - if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy]; - if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy]; - return true; -} - -function connectEdge(edge, x0, y0, x1, y1) { - var v1 = edge[1]; - if (v1) return true; - - var v0 = edge[0], - left = edge.left, - right = edge.right, - lx = left[0], - ly = left[1], - rx = right[0], - ry = right[1], - fx = (lx + rx) / 2, - fy = (ly + ry) / 2, - fm, - fb; - - if (ry === ly) { - if (fx < x0 || fx >= x1) return; - if (lx > rx) { - if (!v0) v0 = [fx, y0]; - else if (v0[1] >= y1) return; - v1 = [fx, y1]; - } else { - if (!v0) v0 = [fx, y1]; - else if (v0[1] < y0) return; - v1 = [fx, y0]; - } - } else { - fm = (lx - rx) / (ry - ly); - fb = fy - fm * fx; - if (fm < -1 || fm > 1) { - if (lx > rx) { - if (!v0) v0 = [(y0 - fb) / fm, y0]; - else if (v0[1] >= y1) return; - v1 = [(y1 - fb) / fm, y1]; - } else { - if (!v0) v0 = [(y1 - fb) / fm, y1]; - else if (v0[1] < y0) return; - v1 = [(y0 - fb) / fm, y0]; - } - } else { - if (ly < ry) { - if (!v0) v0 = [x0, fm * x0 + fb]; - else if (v0[0] >= x1) return; - v1 = [x1, fm * x1 + fb]; - } else { - if (!v0) v0 = [x1, fm * x1 + fb]; - else if (v0[0] < x0) return; - v1 = [x0, fm * x0 + fb]; - } - } - } - - edge[0] = v0; - edge[1] = v1; - return true; -} - -function clipEdges(x0, y0, x1, y1) { - var i = edges.length, - edge; - - while (i--) { - if (!connectEdge(edge = edges[i], x0, y0, x1, y1) - || !clipEdge(edge, x0, y0, x1, y1) - || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon$3 - || Math.abs(edge[0][1] - edge[1][1]) > epsilon$3)) { - delete edges[i]; - } - } -} - -function createCell(site) { - return cells[site.index] = { - site: site, - halfedges: [] - }; -} - -function cellHalfedgeAngle(cell, edge) { - var site = cell.site, - va = edge.left, - vb = edge.right; - if (site === vb) vb = va, va = site; - if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]); - if (site === va) va = edge[1], vb = edge[0]; - else va = edge[0], vb = edge[1]; - return Math.atan2(va[0] - vb[0], vb[1] - va[1]); -} - -function cellHalfedgeStart(cell, edge) { - return edge[+(edge.left !== cell.site)]; -} - -function cellHalfedgeEnd(cell, edge) { - return edge[+(edge.left === cell.site)]; -} - -function sortCellHalfedges() { - for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) { - if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) { - var index = new Array(m), - array = new Array(m); - for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]); - index.sort(function(i, j) { return array[j] - array[i]; }); - for (j = 0; j < m; ++j) array[j] = halfedges[index[j]]; - for (j = 0; j < m; ++j) halfedges[j] = array[j]; - } - } -} - -function clipCells(x0, y0, x1, y1) { - var nCells = cells.length, - iCell, - cell, - site, - iHalfedge, - halfedges, - nHalfedges, - start, - startX, - startY, - end, - endX, - endY, - cover = true; - - for (iCell = 0; iCell < nCells; ++iCell) { - if (cell = cells[iCell]) { - site = cell.site; - halfedges = cell.halfedges; - iHalfedge = halfedges.length; - - // Remove any dangling clipped edges. - while (iHalfedge--) { - if (!edges[halfedges[iHalfedge]]) { - halfedges.splice(iHalfedge, 1); - } - } - - // Insert any border edges as necessary. - iHalfedge = 0, nHalfedges = halfedges.length; - while (iHalfedge < nHalfedges) { - end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1]; - start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1]; - if (Math.abs(endX - startX) > epsilon$3 || Math.abs(endY - startY) > epsilon$3) { - halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end, - Math.abs(endX - x0) < epsilon$3 && y1 - endY > epsilon$3 ? [x0, Math.abs(startX - x0) < epsilon$3 ? startY : y1] - : Math.abs(endY - y1) < epsilon$3 && x1 - endX > epsilon$3 ? [Math.abs(startY - y1) < epsilon$3 ? startX : x1, y1] - : Math.abs(endX - x1) < epsilon$3 && endY - y0 > epsilon$3 ? [x1, Math.abs(startX - x1) < epsilon$3 ? startY : y0] - : Math.abs(endY - y0) < epsilon$3 && endX - x0 > epsilon$3 ? [Math.abs(startY - y0) < epsilon$3 ? startX : x0, y0] - : null)) - 1); - ++nHalfedges; - } - } - - if (nHalfedges) cover = false; - } - } - - // If there weren’t any edges, have the closest site cover the extent. - // It doesn’t matter which corner of the extent we measure! - if (cover) { - var dx, dy, d2, dc = Infinity; - - for (iCell = 0, cover = null; iCell < nCells; ++iCell) { - if (cell = cells[iCell]) { - site = cell.site; - dx = site[0] - x0; - dy = site[1] - y0; - d2 = dx * dx + dy * dy; - if (d2 < dc) dc = d2, cover = cell; - } - } - - if (cover) { - var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0]; - cover.halfedges.push( - edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1, - edges.push(createBorderEdge(site, v01, v11)) - 1, - edges.push(createBorderEdge(site, v11, v10)) - 1, - edges.push(createBorderEdge(site, v10, v00)) - 1 - ); - } - } - - // Lastly delete any cells with no edges; these were entirely clipped. - for (iCell = 0; iCell < nCells; ++iCell) { - if (cell = cells[iCell]) { - if (!cell.halfedges.length) { - delete cells[iCell]; - } - } - } -} - -var circlePool = []; - -var firstCircle; - -function Circle() { - RedBlackNode(this); - this.x = - this.y = - this.arc = - this.site = - this.cy = null; -} - -function attachCircle(arc) { - var lArc = arc.P, - rArc = arc.N; - - if (!lArc || !rArc) return; - - var lSite = lArc.site, - cSite = arc.site, - rSite = rArc.site; - - if (lSite === rSite) return; - - var bx = cSite[0], - by = cSite[1], - ax = lSite[0] - bx, - ay = lSite[1] - by, - cx = rSite[0] - bx, - cy = rSite[1] - by; - - var d = 2 * (ax * cy - ay * cx); - if (d >= -epsilon2$2) return; - - var ha = ax * ax + ay * ay, - hc = cx * cx + cy * cy, - x = (cy * ha - ay * hc) / d, - y = (ax * hc - cx * ha) / d; - - var circle = circlePool.pop() || new Circle; - circle.arc = arc; - circle.site = cSite; - circle.x = x + bx; - circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom - - arc.circle = circle; - - var before = null, - node = circles._; - - while (node) { - if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) { - if (node.L) node = node.L; - else { before = node.P; break; } - } else { - if (node.R) node = node.R; - else { before = node; break; } - } - } - - circles.insert(before, circle); - if (!before) firstCircle = circle; -} - -function detachCircle(arc) { - var circle = arc.circle; - if (circle) { - if (!circle.P) firstCircle = circle.N; - circles.remove(circle); - circlePool.push(circle); - RedBlackNode(circle); - arc.circle = null; - } -} - -var beachPool = []; - -function Beach() { - RedBlackNode(this); - this.edge = - this.site = - this.circle = null; -} - -function createBeach(site) { - var beach = beachPool.pop() || new Beach; - beach.site = site; - return beach; -} - -function detachBeach(beach) { - detachCircle(beach); - beaches.remove(beach); - beachPool.push(beach); - RedBlackNode(beach); -} - -function removeBeach(beach) { - var circle = beach.circle, - x = circle.x, - y = circle.cy, - vertex = [x, y], - previous = beach.P, - next = beach.N, - disappearing = [beach]; - - detachBeach(beach); - - var lArc = previous; - while (lArc.circle - && Math.abs(x - lArc.circle.x) < epsilon$3 - && Math.abs(y - lArc.circle.cy) < epsilon$3) { - previous = lArc.P; - disappearing.unshift(lArc); - detachBeach(lArc); - lArc = previous; - } - - disappearing.unshift(lArc); - detachCircle(lArc); - - var rArc = next; - while (rArc.circle - && Math.abs(x - rArc.circle.x) < epsilon$3 - && Math.abs(y - rArc.circle.cy) < epsilon$3) { - next = rArc.N; - disappearing.push(rArc); - detachBeach(rArc); - rArc = next; - } - - disappearing.push(rArc); - detachCircle(rArc); - - var nArcs = disappearing.length, - iArc; - for (iArc = 1; iArc < nArcs; ++iArc) { - rArc = disappearing[iArc]; - lArc = disappearing[iArc - 1]; - setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex); - } - - lArc = disappearing[0]; - rArc = disappearing[nArcs - 1]; - rArc.edge = createEdge(lArc.site, rArc.site, null, vertex); - - attachCircle(lArc); - attachCircle(rArc); -} - -function addBeach(site) { - var x = site[0], - directrix = site[1], - lArc, - rArc, - dxl, - dxr, - node = beaches._; - - while (node) { - dxl = leftBreakPoint(node, directrix) - x; - if (dxl > epsilon$3) node = node.L; else { - dxr = x - rightBreakPoint(node, directrix); - if (dxr > epsilon$3) { - if (!node.R) { - lArc = node; - break; - } - node = node.R; - } else { - if (dxl > -epsilon$3) { - lArc = node.P; - rArc = node; - } else if (dxr > -epsilon$3) { - lArc = node; - rArc = node.N; - } else { - lArc = rArc = node; - } - break; - } - } - } - - createCell(site); - var newArc = createBeach(site); - beaches.insert(lArc, newArc); - - if (!lArc && !rArc) return; - - if (lArc === rArc) { - detachCircle(lArc); - rArc = createBeach(lArc.site); - beaches.insert(newArc, rArc); - newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site); - attachCircle(lArc); - attachCircle(rArc); - return; - } - - if (!rArc) { // && lArc - newArc.edge = createEdge(lArc.site, newArc.site); - return; - } - - // else lArc !== rArc - detachCircle(lArc); - detachCircle(rArc); - - var lSite = lArc.site, - ax = lSite[0], - ay = lSite[1], - bx = site[0] - ax, - by = site[1] - ay, - rSite = rArc.site, - cx = rSite[0] - ax, - cy = rSite[1] - ay, - d = 2 * (bx * cy - by * cx), - hb = bx * bx + by * by, - hc = cx * cx + cy * cy, - vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay]; - - setEdgeEnd(rArc.edge, lSite, rSite, vertex); - newArc.edge = createEdge(lSite, site, null, vertex); - rArc.edge = createEdge(site, rSite, null, vertex); - attachCircle(lArc); - attachCircle(rArc); -} - -function leftBreakPoint(arc, directrix) { - var site = arc.site, - rfocx = site[0], - rfocy = site[1], - pby2 = rfocy - directrix; - - if (!pby2) return rfocx; - - var lArc = arc.P; - if (!lArc) return -Infinity; - - site = lArc.site; - var lfocx = site[0], - lfocy = site[1], - plby2 = lfocy - directrix; - - if (!plby2) return lfocx; - - var hl = lfocx - rfocx, - aby2 = 1 / pby2 - 1 / plby2, - b = hl / plby2; - - if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx; - - return (rfocx + lfocx) / 2; -} - -function rightBreakPoint(arc, directrix) { - var rArc = arc.N; - if (rArc) return leftBreakPoint(rArc, directrix); - var site = arc.site; - return site[1] === directrix ? site[0] : Infinity; -} - -var epsilon$3 = 1e-6; -var epsilon2$2 = 1e-12; -var beaches; -var cells; -var circles; -var edges; - -function triangleArea(a, b, c) { - return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]); -} - -function lexicographic(a, b) { - return b[1] - a[1] - || b[0] - a[0]; -} - -function Diagram(sites, extent) { - var site = sites.sort(lexicographic).pop(), - x, - y, - circle; - - edges = []; - cells = new Array(sites.length); - beaches = new RedBlackTree; - circles = new RedBlackTree; - - while (true) { - circle = firstCircle; - if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) { - if (site[0] !== x || site[1] !== y) { - addBeach(site); - x = site[0], y = site[1]; - } - site = sites.pop(); - } else if (circle) { - removeBeach(circle.arc); - } else { - break; - } - } - - sortCellHalfedges(); - - if (extent) { - var x0 = +extent[0][0], - y0 = +extent[0][1], - x1 = +extent[1][0], - y1 = +extent[1][1]; - clipEdges(x0, y0, x1, y1); - clipCells(x0, y0, x1, y1); - } - - this.edges = edges; - this.cells = cells; - - beaches = - circles = - edges = - cells = null; -} - -Diagram.prototype = { - constructor: Diagram, - - polygons: function() { - var edges = this.edges; - - return this.cells.map(function(cell) { - var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); }); - polygon.data = cell.site.data; - return polygon; - }); - }, - - triangles: function() { - var triangles = [], - edges = this.edges; - - this.cells.forEach(function(cell, i) { - if (!(m = (halfedges = cell.halfedges).length)) return; - var site = cell.site, - halfedges, - j = -1, - m, - s0, - e1 = edges[halfedges[m - 1]], - s1 = e1.left === site ? e1.right : e1.left; - - while (++j < m) { - s0 = s1; - e1 = edges[halfedges[j]]; - s1 = e1.left === site ? e1.right : e1.left; - if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) { - triangles.push([site.data, s0.data, s1.data]); - } - } - }); - - return triangles; - }, - - links: function() { - return this.edges.filter(function(edge) { - return edge.right; - }).map(function(edge) { - return { - source: edge.left.data, - target: edge.right.data - }; - }); - }, - - find: function(x, y, radius) { - var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell; - - // Use the previously-found cell, or start with an arbitrary one. - while (!(cell = that.cells[i1])) if (++i1 >= n) return null; - var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy; - - // Traverse the half-edges to find a closer cell, if any. - do { - cell = that.cells[i0 = i1], i1 = null; - cell.halfedges.forEach(function(e) { - var edge = that.edges[e], v = edge.left; - if ((v === cell.site || !v) && !(v = edge.right)) return; - var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy; - if (v2 < d2) d2 = v2, i1 = v.index; - }); - } while (i1 !== null); - - that._found = i0; - - return radius == null || d2 <= radius * radius ? cell.site : null; - } -}; - -function voronoi() { - var x = x$4, - y = y$4, - extent = null; - - function voronoi(data) { - return new Diagram(data.map(function(d, i) { - var s = [Math.round(x(d, i, data) / epsilon$3) * epsilon$3, Math.round(y(d, i, data) / epsilon$3) * epsilon$3]; - s.index = i; - s.data = d; - return s; - }), extent); - } - - voronoi.polygons = function(data) { - return voronoi(data).polygons(); - }; - - voronoi.links = function(data) { - return voronoi(data).links(); - }; - - voronoi.triangles = function(data) { - return voronoi(data).triangles(); - }; - - voronoi.x = function(_) { - return arguments.length ? (x = typeof _ === "function" ? _ : constant$8(+_), voronoi) : x; - }; - - voronoi.y = function(_) { - return arguments.length ? (y = typeof _ === "function" ? _ : constant$8(+_), voronoi) : y; - }; - - voronoi.extent = function(_) { - return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]]; - }; - - voronoi.size = function(_) { - return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]]; - }; - - return voronoi; -} - -function Voronoi(params) { - Transform.call(this, null, params); -} - -Voronoi.Definition = { - "type": "Voronoi", - "metadata": {"modifies": true}, - "params": [ - { "name": "x", "type": "field", "required": true }, - { "name": "y", "type": "field", "required": true }, - { "name": "size", "type": "number", "array": true, "length": 2 }, - { "name": "extent", "type": "array", "array": true, "length": 2, - "default": [[-1e5, -1e5], [1e5, 1e5]], - "content": {"type": "number", "array": true, "length": 2} }, - { "name": "as", "type": "string", "default": "path" } - ] -}; - -var prototype$1g = inherits(Voronoi, Transform); - -var defaultExtent = [[-1e5, -1e5], [1e5, 1e5]]; - -prototype$1g.transform = function(_, pulse) { - var as = _.as || 'path', - data = pulse.source, - diagram, polygons, i, n; - - // configure and construct voronoi diagram - diagram = voronoi().x(_.x).y(_.y); - if (_.size) diagram.size(_.size); - else diagram.extent(_.extent || defaultExtent); - - this.value = (diagram = diagram(data)); - - // map polygons to paths - polygons = diagram.polygons(); - for (i=0, n=data.length; i> 5, - ch = 1 << 11; - -function cloud() { - var size = [256, 256], - text, - font, - fontSize, - fontStyle, - fontWeight, - rotate, - padding, - spiral = archimedeanSpiral, - words = [], - random = Math.random, - cloud = {}; - - cloud.layout = function() { - var contextAndRatio = getContext(canvas()), - board = zeroArray((size[0] >> 5) * size[1]), - bounds = null, - n = words.length, - i = -1, - tags = [], - data = words.map(function(d) { - return { - text: text(d), - font: font(d), - style: fontStyle(d), - weight: fontWeight(d), - rotate: rotate(d), - size: ~~fontSize(d), - padding: padding(d), - xoff: 0, - yoff: 0, - x1: 0, - y1: 0, - x0: 0, - y0: 0, - hasText: false, - sprite: null, - datum: d - }; - }).sort(function(a, b) { return b.size - a.size; }); - - while (++i < n) { - var d = data[i]; - d.x = (size[0] * (random() + .5)) >> 1; - d.y = (size[1] * (random() + .5)) >> 1; - cloudSprite(contextAndRatio, d, data, i); - if (d.hasText && place(board, d, bounds)) { - tags.push(d); - if (bounds) cloudBounds(bounds, d); - else bounds = [{x: d.x + d.x0, y: d.y + d.y0}, {x: d.x + d.x1, y: d.y + d.y1}]; - // Temporary hack - d.x -= size[0] >> 1; - d.y -= size[1] >> 1; - } - } - - return tags; - }; - - function getContext(canvas) { - canvas.width = canvas.height = 1; - var ratio = Math.sqrt(canvas.getContext("2d").getImageData(0, 0, 1, 1).data.length >> 2); - canvas.width = (cw << 5) / ratio; - canvas.height = ch / ratio; - - var context = canvas.getContext("2d"); - context.fillStyle = context.strokeStyle = "red"; - context.textAlign = "center"; - - return {context: context, ratio: ratio}; - } - - function place(board, tag, bounds) { - var startX = tag.x, - startY = tag.y, - maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]), - s = spiral(size), - dt = random() < .5 ? 1 : -1, - t = -dt, - dxdy, - dx, - dy; - - while (dxdy = s(t += dt)) { - dx = ~~dxdy[0]; - dy = ~~dxdy[1]; - - if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) break; - - tag.x = startX + dx; - tag.y = startY + dy; - - if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 || - tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue; - // TODO only check for collisions within current bounds. - if (!bounds || !cloudCollide(tag, board, size[0])) { - if (!bounds || collideRects(tag, bounds)) { - var sprite = tag.sprite, - w = tag.width >> 5, - sw = size[0] >> 5, - lx = tag.x - (w << 4), - sx = lx & 0x7f, - msx = 32 - sx, - h = tag.y1 - tag.y0, - x = (tag.y + tag.y0) * sw + (lx >> 5), - last; - for (var j = 0; j < h; j++) { - last = 0; - for (var i = 0; i <= w; i++) { - board[x + i] |= (last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0); - } - x += sw; - } - tag.sprite = null; - return true; - } - } - } - return false; - } - - cloud.words = function(_) { - if (arguments.length) { - words = _; - return cloud; - } else { - return words; - } - }; - - cloud.size = function(_) { - if (arguments.length) { - size = [+_[0], +_[1]]; - return cloud; - } else { - return size; - } - }; - - cloud.font = function(_) { - if (arguments.length) { - font = functor(_); - return cloud; - } else { - return font; - } - }; - - cloud.fontStyle = function(_) { - if (arguments.length) { - fontStyle = functor(_); - return cloud; - } else { - return fontStyle; - } - }; - - cloud.fontWeight = function(_) { - if (arguments.length) { - fontWeight = functor(_); - return cloud; - } else { - return fontWeight; - } - }; - - cloud.rotate = function(_) { - if (arguments.length) { - rotate = functor(_); - return cloud; - } else { - return rotate; - } - }; - - cloud.text = function(_) { - if (arguments.length) { - text = functor(_); - return cloud; - } else { - return text; - } - }; - - cloud.spiral = function(_) { - if (arguments.length) { - spiral = spirals[_] || _; - return cloud; - } else { - return spiral; - } - }; - - cloud.fontSize = function(_) { - if (arguments.length) { - fontSize = functor(_); - return cloud; - } else { - return fontSize; - } - }; - - cloud.padding = function(_) { - if (arguments.length) { - padding = functor(_); - return cloud; - } else { - return padding; - } - }; - - cloud.random = function(_) { - if (arguments.length) { - random = _; - return cloud; - } else { - return random; - } - }; - - return cloud; -} - -// Fetches a monochrome sprite bitmap for the specified text. -// Load in batches for speed. -function cloudSprite(contextAndRatio, d, data, di) { - if (d.sprite) return; - var c = contextAndRatio.context, - ratio = contextAndRatio.ratio; - - c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio); - var x = 0, - y = 0, - maxh = 0, - n = data.length, - w, w32, h, i, j; - --di; - while (++di < n) { - d = data[di]; - c.save(); - c.font = d.style + " " + d.weight + " " + ~~((d.size + 1) / ratio) + "px " + d.font; - w = c.measureText(d.text + "m").width * ratio; - h = d.size << 1; - if (d.rotate) { - var sr = Math.sin(d.rotate * cloudRadians), - cr = Math.cos(d.rotate * cloudRadians), - wcr = w * cr, - wsr = w * sr, - hcr = h * cr, - hsr = h * sr; - w = (Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f) >> 5 << 5; - h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr)); - } else { - w = (w + 0x1f) >> 5 << 5; - } - if (h > maxh) maxh = h; - if (x + w >= (cw << 5)) { - x = 0; - y += maxh; - maxh = 0; - } - if (y + h >= ch) break; - c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio); - if (d.rotate) c.rotate(d.rotate * cloudRadians); - c.fillText(d.text, 0, 0); - if (d.padding) { - c.lineWidth = 2 * d.padding; - c.strokeText(d.text, 0, 0); - } - c.restore(); - d.width = w; - d.height = h; - d.xoff = x; - d.yoff = y; - d.x1 = w >> 1; - d.y1 = h >> 1; - d.x0 = -d.x1; - d.y0 = -d.y1; - d.hasText = true; - x += w; - } - var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data, - sprite = []; - while (--di >= 0) { - d = data[di]; - if (!d.hasText) continue; - w = d.width; - w32 = w >> 5; - h = d.y1 - d.y0; - // Zero the buffer - for (i = 0; i < h * w32; i++) sprite[i] = 0; - x = d.xoff; - if (x == null) return; - y = d.yoff; - var seen = 0, - seenRow = -1; - for (j = 0; j < h; j++) { - for (i = 0; i < w; i++) { - var k = w32 * j + (i >> 5), - m = pixels[((y + j) * (cw << 5) + (x + i)) << 2] ? 1 << (31 - (i % 32)) : 0; - sprite[k] |= m; - seen |= m; - } - if (seen) seenRow = j; - else { - d.y0++; - h--; - j--; - y++; - } - } - d.y1 = d.y0 + seenRow; - d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32); - } -} - -// Use mask-based collision detection. -function cloudCollide(tag, board, sw) { - sw >>= 5; - var sprite = tag.sprite, - w = tag.width >> 5, - lx = tag.x - (w << 4), - sx = lx & 0x7f, - msx = 32 - sx, - h = tag.y1 - tag.y0, - x = (tag.y + tag.y0) * sw + (lx >> 5), - last; - for (var j = 0; j < h; j++) { - last = 0; - for (var i = 0; i <= w; i++) { - if (((last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0)) - & board[x + i]) return true; - } - x += sw; - } - return false; -} - -function cloudBounds(bounds, d) { - var b0 = bounds[0], - b1 = bounds[1]; - if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0; - if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0; - if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1; - if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1; -} - -function collideRects(a, b) { - return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y; -} - -function archimedeanSpiral(size) { - var e = size[0] / size[1]; - return function(t) { - return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)]; - }; -} - -function rectangularSpiral(size) { - var dy = 4, - dx = dy * size[0] / size[1], - x = 0, - y = 0; - return function(t) { - var sign = t < 0 ? -1 : 1; - // See triangular numbers: T_n = n * (n + 1) / 2. - switch ((Math.sqrt(1 + 4 * sign * t) - sign) & 3) { - case 0: x += dx; break; - case 1: y += dy; break; - case 2: x -= dx; break; - default: y -= dy; break; - } - return [x, y]; - }; -} - -// TODO reuse arrays? -function zeroArray(n) { - var a = [], - i = -1; - while (++i < n) a[i] = 0; - return a; -} - -function functor(d) { - return typeof d === "function" ? d : function() { return d; }; -} - -var spirals = { - archimedean: archimedeanSpiral, - rectangular: rectangularSpiral -}; - -var Output$4 = ['x', 'y', 'font', 'fontSize', 'fontStyle', 'fontWeight', 'angle']; - -var Params$1 = ['text', 'font', 'rotate', 'fontSize', 'fontStyle', 'fontWeight']; - -function Wordcloud(params) { - Transform.call(this, cloud(), params); -} - -Wordcloud.Definition = { - "type": "Wordcloud", - "metadata": {"modifies": true}, - "params": [ - { "name": "size", "type": "number", "array": true, "length": 2 }, - { "name": "font", "type": "string", "expr": true, "default": "sans-serif" }, - { "name": "fontStyle", "type": "string", "expr": true, "default": "normal" }, - { "name": "fontWeight", "type": "string", "expr": true, "default": "normal" }, - { "name": "fontSize", "type": "number", "expr": true, "default": 14 }, - { "name": "fontSizeRange", "type": "number", "array": "nullable", "default": [10, 50] }, - { "name": "rotate", "type": "number", "expr": true, "default": 0 }, - { "name": "text", "type": "field" }, - { "name": "spiral", "type": "string", "values": ["archimedean", "rectangular"] }, - { "name": "padding", "type": "number", "expr": true }, - { "name": "as", "type": "string", "array": true, "length": 7, "default": Output$4 } - ] -}; - -var prototype$1h = inherits(Wordcloud, Transform); - -prototype$1h.transform = function(_, pulse) { - if (_.size && !(_.size[0] && _.size[1])) { - error('Wordcloud size dimensions must be non-zero.'); - } - - function modp(param) { - var p = _[param]; - return isFunction(p) && pulse.modified(p.fields); - } - - var mod = _.modified(); - if (!(mod || pulse.changed(pulse.ADD_REM) || Params$1.some(modp))) return; - - var data = pulse.materialize(pulse.SOURCE).source, - layout = this.value, - as = _.as || Output$4, - fontSize = _.fontSize || 14, - range; - - isFunction(fontSize) - ? (range = _.fontSizeRange) - : (fontSize = constant(fontSize)); - - // create font size scaling function as needed - if (range) { - var fsize = fontSize, - sizeScale = scale$1('sqrt')() - .domain(extent$5(fsize, data)) - .range(range); - fontSize = function(x) { return sizeScale(fsize(x)); }; - } - - data.forEach(function(t) { - t[as[0]] = NaN; - t[as[1]] = NaN; - t[as[3]] = 0; - }); - - // configure layout - var words = layout - .words(data) - .text(_.text) - .size(_.size || [500, 500]) - .padding(_.padding || 1) - .spiral(_.spiral || 'archimedean') - .rotate(_.rotate || 0) - .font(_.font || 'sans-serif') - .fontStyle(_.fontStyle || 'normal') - .fontWeight(_.fontWeight || 'normal') - .fontSize(fontSize) - .random(random) - .layout(); - - var size = layout.size(), - dx = size[0] >> 1, - dy = size[1] >> 1, - i = 0, - n = words.length, - w, t; - - for (; i max) max = v; - } - - return [min, max]; -} - - - -var wordcloud = /*#__PURE__*/Object.freeze({ - wordcloud: Wordcloud -}); - -function array8(n) { return new Uint8Array(n); } - -function array16(n) { return new Uint16Array(n); } - -function array32(n) { return new Uint32Array(n); } - -/** - * Maintains CrossFilter state. - */ -function Bitmaps() { - - var width = 8, - data = [], - seen = array32(0), - curr = array$3(0, width), - prev = array$3(0, width); - - return { - - data: function() { return data; }, - - seen: function() { - return (seen = lengthen(seen, data.length)); - }, - - add: function(array) { - for (var i=0, j=data.length, n=array.length, t; i boolean (true => remove) - var n = data.length, - copy = Array(n - num), - reindex = data, // reuse old data array for index map - t, i, j; - - // seek forward to first removal - for (i=0; !map[i] && i k || m > width) { - width = Math.max(m, width); - curr = array$3(n, width, curr); - prev = array$3(n, width); - } - } - }; -} - -function lengthen(array, length, copy) { - if (array.length >= length) return array; - copy = copy || new array.constructor(length); - copy.set(array); - return copy; -} - -function array$3(n, m, array) { - var copy = (m < 0x101 ? array8 : m < 0x10001 ? array16 : array32)(n); - if (array) copy.set(array); - return copy; -} - -function Dimension(index, i, query) { - var bit = (1 << i); - - return { - one: bit, - zero: ~bit, - range: query.slice(), - bisect: index.bisect, - index: index.index, - size: index.size, - - onAdd: function(added, curr) { - var dim = this, - range = dim.bisect(dim.range, added.value), - idx = added.index, - lo = range[0], - hi = range[1], - n1 = idx.length, i; - - for (i=0; i b ? 1 : a >= b ? 0 : NaN; -} - -function bisector$9(compare) { - if (compare.length === 1) compare = ascendingComparator$9(compare); - return { - left: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) < 0) lo = mid + 1; - else hi = mid; - } - return lo; - }, - right: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) > 0) hi = mid; - else lo = mid + 1; - } - return lo; - } - }; -} - -function ascendingComparator$9(f) { - return function(d, x) { - return ascending$a(f(d), x); - }; -} - -var ascendingBisect$9 = bisector$9(ascending$a); -var bisectRight$2 = ascendingBisect$9.right; -var bisectLeft = ascendingBisect$9.left; - -function permute(source, keys) { - return Array.from(keys, key => source[key]); -} - -/** - * Maintains a list of values, sorted by key. - */ -function SortedIndex() { - var index = array32(0), - value = [], - size = 0; - - function insert(key, data, base) { - if (!data.length) return []; - - var n0 = size, - n1 = data.length, - addv = Array(n1), - addi = array32(n1), - oldv, oldi, i; - - for (i=0; i 0) for (i=0; i remove - var n = size, - idx, i, j; - - // seek forward to first removal - for (i=0; !map[index[i]] && i y ? 1 : 0; - }); - return permute(values, index); -} - -function merge$2(base, value0, index0, n0, value1, index1, n1, value, index) { - var i0 = 0, i1 = 0, i; - - for (i=0; i0 < n0 && i1 < n1; ++i) { - if (value0[i0] < value1[i1]) { - value[i] = value0[i0]; - index[i] = index0[i0++]; - } else { - value[i] = value1[i1]; - index[i] = index1[i1++] + base; - } - } - - for (; i0 < n0; ++i0, ++i) { - value[i] = value0[i0]; - index[i] = index0[i0]; - } - - for (; i1 < n1; ++i1, ++i) { - value[i] = value1[i1]; - index[i] = index1[i1] + base; - } -} - -/** - * An indexed multi-dimensional filter. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {Array} params.fields - An array of dimension accessors to filter. - * @param {Array} params.query - An array of per-dimension range queries. - */ -function CrossFilter(params) { - Transform.call(this, Bitmaps(), params); - this._indices = null; - this._dims = null; -} - -CrossFilter.Definition = { - "type": "CrossFilter", - "metadata": {}, - "params": [ - { "name": "fields", "type": "field", "array": true, "required": true }, - { "name": "query", "type": "array", "array": true, "required": true, - "content": {"type": "number", "array": true, "length": 2} } - ] -}; - -var prototype$1i = inherits(CrossFilter, Transform); - -prototype$1i.transform = function(_, pulse) { - if (!this._dims) { - return this.init(_, pulse); - } else { - var init = _.modified('fields') - || _.fields.some(function(f) { return pulse.modified(f.fields); }); - - return init - ? this.reinit(_, pulse) - : this.eval(_, pulse); - } -}; - -prototype$1i.init = function(_, pulse) { - var fields = _.fields, - query = _.query, - indices = this._indices = {}, - dims = this._dims = [], - m = query.length, - i = 0, key, index; - - // instantiate indices and dimensions - for (; i lo0) { - for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) { - k = index[i]; - if (seen[k] !== stamp) { - prev[k] = curr[k]; - seen[k] = stamp; - out.push(k); - } - curr[k] ^= one; - } - } - - // Fast incremental update based on previous hi index. - if (hi1 > hi0) { - for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) { - k = index[i]; - if (seen[k] !== stamp) { - prev[k] = curr[k]; - seen[k] = stamp; - out.push(k); - } - curr[k] ^= one; - } - } else if (hi1 < hi0) { - for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) { - k = index[i]; - if (seen[k] !== stamp) { - prev[k] = curr[k]; - seen[k] = stamp; - out.push(k); - } - curr[k] ^= one; - } - } - - dim.range = query.slice(); -}; - -prototype$1i.incrementOne = function(dim, query, add, rem) { - var bits = this.value, - curr = bits.curr(), - index = dim.index(), - old = dim.bisect(dim.range), - range = dim.bisect(query), - lo1 = range[0], - hi1 = range[1], - lo0 = old[0], - hi0 = old[1], - one = dim.one, - i, j, k; - - // Fast incremental update based on previous lo index. - if (lo1 < lo0) { - for (i = lo1, j = Math.min(lo0, hi1); i < j; ++i) { - k = index[i]; - curr[k] ^= one; - add.push(k); - } - } else if (lo1 > lo0) { - for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) { - k = index[i]; - curr[k] ^= one; - rem.push(k); - } - } - - // Fast incremental update based on previous hi index. - if (hi1 > hi0) { - for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) { - k = index[i]; - curr[k] ^= one; - add.push(k); - } - } else if (hi1 < hi0) { - for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) { - k = index[i]; - curr[k] ^= one; - rem.push(k); - } - } - - dim.range = query.slice(); -}; - -/** - * Selectively filters tuples by resolving against a filter bitmap. - * Useful for processing the output of a cross-filter transform. - * @constructor - * @param {object} params - The parameters for this operator. - * @param {object} params.ignore - A bit mask indicating which filters to ignore. - * @param {object} params.filter - The per-tuple filter bitmaps. Typically this - * parameter value is a reference to a {@link CrossFilter} transform. - */ -function ResolveFilter(params) { - Transform.call(this, null, params); -} - -ResolveFilter.Definition = { - "type": "ResolveFilter", - "metadata": {}, - "params": [ - { "name": "ignore", "type": "number", "required": true, - "description": "A bit mask indicating which filters to ignore." }, - { "name": "filter", "type": "object", "required": true, - "description": "Per-tuple filter bitmaps from a CrossFilter transform." } - ] -}; - -var prototype$1j = inherits(ResolveFilter, Transform); - -prototype$1j.transform = function(_, pulse) { - var ignore = ~(_.ignore || 0), // bit mask where zeros -> dims to ignore - bitmap = _.filter, - mask = bitmap.mask; - - // exit early if no relevant filter changes - if ((mask & ignore) === 0) return pulse.StopPropagation; - - var output = pulse.fork(pulse.ALL), - data = bitmap.data(), - curr = bitmap.curr(), - prev = bitmap.prev(), - pass = function(k) { - return !(curr[k] & ignore) ? data[k] : null; - }; - - // propagate all mod tuples that pass the filter - output.filter(output.MOD, pass); - - // determine add & rem tuples via filter functions - // for efficiency, we do *not* populate new arrays, - // instead we add filter functions applied downstream - - if (!(mask & (mask-1))) { // only one filter changed - output.filter(output.ADD, pass); - output.filter(output.REM, function(k) { - return (curr[k] & ignore) === mask ? data[k] : null; - }); - - } else { // multiple filters changed - output.filter(output.ADD, function(k) { - var c = curr[k] & ignore, - f = !c && (c ^ (prev[k] & ignore)); - return f ? data[k] : null; - }); - output.filter(output.REM, function(k) { - var c = curr[k] & ignore, - f = c && !(c ^ (c ^ (prev[k] & ignore))); - return f ? data[k] : null; - }); - } - - // add filter to source data in case of reflow... - return output.filter(output.SOURCE, function(t) { return pass(t._index); }); -}; - - - -var xf = /*#__PURE__*/Object.freeze({ - crossfilter: CrossFilter, - resolvefilter: ResolveFilter -}); - -var Default = 'default'; - -function cursor(view) { - var cursor = view._signals.cursor; - - // add cursor signal to dataflow, if needed - if (!cursor) { - view._signals.cursor = (cursor = view.add({user: Default, item: null})); - } - - // evaluate cursor on each mousemove event - view.on(view.events('view', 'mousemove'), cursor, - function(_, event) { - var value = cursor.value, - user = value ? (isString(value) ? value : value.user) : Default, - item = event.item && event.item.cursor || null; - - return (value && user === value.user && item == value.item) ? value - : {user: user, item: item}; - } - ); - - // when cursor signal updates, set visible cursor - view.add(null, function(_) { - var user = _.cursor, - item = this.value; - - if (!isString(user)) { - item = user.item; - user = user.user; - } - - setCursor(user && user !== Default ? user : (item || user)); - - return item; - }, {cursor: cursor}); -} - -function setCursor(cursor) { - // set cursor on document body - // this ensures cursor applies even if dragging out of view - if (typeof document !== 'undefined' && document.body) { - document.body.style.cursor = cursor; - } -} - -function dataref(view, name) { - var data = view._runtime.data; - if (!data.hasOwnProperty(name)) { - error('Unrecognized data set: ' + name); - } - return data[name]; -} - -function data(name) { - return dataref(this, name).values.value; -} - -function change(name, changes) { - if (!isChangeSet(changes)) { - error('Second argument to changes must be a changeset.'); - } - var dataset = dataref(this, name); - dataset.modified = true; - return this.pulse(dataset.input, changes); -} - -function insert(name, _) { - return change.call(this, name, changeset().insert(_)); -} - -function remove(name, _) { - return change.call(this, name, changeset().remove(_)); -} - -function width(view) { - var padding = view.padding(); - return Math.max(0, view._viewWidth + padding.left + padding.right); -} - -function height(view) { - var padding = view.padding(); - return Math.max(0, view._viewHeight + padding.top + padding.bottom); -} - -function offset$1(view) { - var padding = view.padding(), - origin = view._origin; - return [ - padding.left + origin[0], - padding.top + origin[1] - ]; -} - -function resizeRenderer(view) { - var origin = offset$1(view), - w = width(view), - h = height(view); - - view._renderer.background(view._background); - view._renderer.resize(w, h, origin); - view._handler.origin(origin); - - view._resizeListeners.forEach(function(handler) { - try { - handler(w, h); - } catch (error) { - view.error(error); - } - }); -} - -/** - * Extend an event with additional view-specific methods. - * Adds a new property ('vega') to an event that provides a number - * of methods for querying information about the current interaction. - * The vega object provides the following methods: - * view - Returns the backing View instance. - * item - Returns the currently active scenegraph item (if any). - * group - Returns the currently active scenegraph group (if any). - * This method accepts a single string-typed argument indicating the name - * of the desired parent group. The scenegraph will be traversed from - * the item up towards the root to search for a matching group. If no - * argument is provided the enclosing group for the active item is - * returned, unless the item it itself a group, in which case it is - * returned directly. - * xy - Returns a two-element array containing the x and y coordinates for - * mouse or touch events. For touch events, this is based on the first - * elements in the changedTouches array. This method accepts a single - * argument: either an item instance or mark name that should serve as - * the reference coordinate system. If no argument is provided the - * top-level view coordinate system is assumed. - * x - Returns the current x-coordinate, accepts the same arguments as xy. - * y - Returns the current y-coordinate, accepts the same arguments as xy. - * @param {Event} event - The input event to extend. - * @param {Item} item - The currently active scenegraph item (if any). - * @return {Event} - The extended input event. - */ -function eventExtend(view, event, item) { - var r = view._renderer, - el = r && r.canvas(), - p, e, translate; - - if (el) { - translate = offset$1(view); - e = event.changedTouches ? event.changedTouches[0] : event; - p = point$4(e, el); - p[0] -= translate[0]; - p[1] -= translate[1]; - } - - event.dataflow = view; - event.item = item; - event.vega = extension(view, item, p); - return event; -} - -function extension(view, item, point) { - var itemGroup = item - ? item.mark.marktype === 'group' ? item : item.mark.group - : null; - - function group(name) { - var g = itemGroup, i; - if (name) for (i = item; i; i = i.mark.group) { - if (i.mark.name === name) { g = i; break; } - } - return g && g.mark && g.mark.interactive ? g : {}; - } - - function xy(item) { - if (!item) return point; - if (isString(item)) item = group(item); - - var p = point.slice(); - while (item) { - p[0] -= item.x || 0; - p[1] -= item.y || 0; - item = item.mark && item.mark.group; - } - return p; - } - - return { - view: constant(view), - item: constant(item || {}), - group: group, - xy: xy, - x: function(item) { return xy(item)[0]; }, - y: function(item) { return xy(item)[1]; } - }; -} - -var VIEW = 'view', - TIMER = 'timer', - WINDOW = 'window', - NO_TRAP = {trap: false}; - -/** - * Initialize event handling configuration. - * @param {object} config - The configuration settings. - * @return {object} - */ -function initializeEventConfig(config) { - config = extend({}, config); - - var def = config.defaults; - if (def) { - if (isArray(def.prevent)) { - def.prevent = toSet(def.prevent); - } - if (isArray(def.allow)) { - def.allow = toSet(def.allow); - } - } - - return config; -} - -function prevent(view, type) { - var def = view._eventConfig.defaults, - prevent = def && def.prevent, - allow = def && def.allow; - - return prevent === false || allow === true ? false - : prevent === true || allow === false ? true - : prevent ? prevent[type] - : allow ? !allow[type] - : view.preventDefault(); -} - -/** - * Create a new event stream from an event source. - * @param {object} source - The event source to monitor. - * @param {string} type - The event type. - * @param {function(object): boolean} [filter] - Event filter function. - * @return {EventStream} - */ -function events$1(source, type, filter) { - var view = this, - s = new EventStream(filter), - send = function(e, item) { - view.runAsync(null, () => { - if (source === VIEW && prevent(view, type)) { - e.preventDefault(); - } - s.receive(eventExtend(view, e, item)); - }); - }, - sources; - - if (source === TIMER) { - view.timer(send, type); - } - - else if (source === VIEW) { - // send traps errors, so use {trap: false} option - view.addEventListener(type, send, NO_TRAP); - } - - else { - if (source === WINDOW) { - if (typeof window !== 'undefined') sources = [window]; - } else if (typeof document !== 'undefined') { - sources = document.querySelectorAll(source); - } - - if (!sources) { - view.warn('Can not resolve event source: ' + source); - } else { - for (var i=0, n=sources.length; i= 0) { - timers[n].stop(); - } - - n = listeners.length; - while (--n >= 0) { - e = listeners[n]; - m = e.sources.length; - while (--m >= 0) { - e.sources[m].removeEventListener(e.type, e.handler); - } - } - - if (tooltip) { - tooltip.call(this, this._handler, null, null, null); - } - - return this; -} - -function element$1(tag, attr, text) { - var el = document.createElement(tag); - for (var key in attr) el.setAttribute(key, attr[key]); - if (text != null) el.textContent = text; - return el; -} - -function ascending$b(a, b) { - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; -} - -function bisector$a(compare) { - if (compare.length === 1) compare = ascendingComparator$a(compare); - return { - left: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) < 0) lo = mid + 1; - else hi = mid; - } - return lo; - }, - right: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) > 0) hi = mid; - else lo = mid + 1; - } - return lo; - } - }; -} - -function ascendingComparator$a(f) { - return function(d, x) { - return ascending$b(f(d), x); - }; -} - -var ascendingBisect$a = bisector$a(ascending$b); - -var e10$2 = Math.sqrt(50), - e5$2 = Math.sqrt(10), - e2$2 = Math.sqrt(2); - -function tickStep$2(start, stop, count) { - var step0 = Math.abs(stop - start) / Math.max(0, count), - step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)), - error = step0 / step1; - if (error >= e10$2) step1 *= 10; - else if (error >= e5$2) step1 *= 5; - else if (error >= e2$2) step1 *= 2; - return stop < start ? -step1 : step1; -} - -var BindClass = 'vega-bind', - NameClass = 'vega-bind-name', - RadioClass = 'vega-bind-radio', - OptionClass = 'vega-option-'; - -/** - * Bind a signal to an external HTML input element. The resulting two-way - * binding will propagate input changes to signals, and propagate signal - * changes to the input element state. If this view instance has no parent - * element, we assume the view is headless and no bindings are created. - * @param {Element|string} el - The parent DOM element to which the input - * element should be appended as a child. If string-valued, this argument - * will be treated as a CSS selector. If null or undefined, the parent - * element of this view will be used as the element. - * @param {object} param - The binding parameters which specify the signal - * to bind to, the input element type, and type-specific configuration. - * @return {View} - This view instance. - */ -function bind$1(view, el, binding) { - if (!el) return; - - var param = binding.param, - bind = binding.state; - - if (!bind) { - bind = binding.state = { - elements: null, - active: false, - set: null, - update: function(value) { - if (value !== view.signal(param.signal)) { - view.runAsync(null, function() { - bind.source = true; - view.signal(param.signal, value); - }); - } - } - }; - if (param.debounce) { - bind.update = debounce(param.debounce, bind.update); - } - } - - generate(bind, el, param, view.signal(param.signal)); - - if (!bind.active) { - view.on(view._signals[param.signal], null, function() { - bind.source - ? (bind.source = false) - : bind.set(view.signal(param.signal)); - }); - bind.active = true; - } - - return bind; -} - -/** - * Generate an HTML input form element and bind it to a signal. - */ -function generate(bind, el, param, value) { - var div = element$1('div', {'class': BindClass}); - - div.appendChild(element$1('span', - {'class': NameClass}, - (param.name || param.signal) - )); - - el.appendChild(div); - - var input = form; - switch (param.input) { - case 'checkbox': input = checkbox; break; - case 'select': input = select; break; - case 'radio': input = radio; break; - case 'range': input = range$4; break; - } - - input(bind, div, param, value); -} - -/** - * Generates an arbitrary input form element. - * The input type is controlled via user-provided parameters. - */ -function form(bind, el, param, value) { - var node = element$1('input'); - - for (var key in param) { - if (key !== 'signal' && key !== 'element') { - node.setAttribute(key === 'input' ? 'type' : key, param[key]); - } - } - node.setAttribute('name', param.signal); - node.value = value; - - el.appendChild(node); - - node.addEventListener('input', function() { - bind.update(node.value); - }); - - bind.elements = [node]; - bind.set = function(value) { node.value = value; }; -} - -/** - * Generates a checkbox input element. - */ -function checkbox(bind, el, param, value) { - var attr = {type: 'checkbox', name: param.signal}; - if (value) attr.checked = true; - var node = element$1('input', attr); - - el.appendChild(node); - - node.addEventListener('change', function() { - bind.update(node.checked); - }); - - bind.elements = [node]; - bind.set = function(value) { node.checked = !!value || null; }; -} - -/** - * Generates a selection list input element. - */ -function select(bind, el, param, value) { - var node = element$1('select', {name: param.signal}); - - param.options.forEach(function(option) { - var attr = {value: option}; - if (valuesEqual(option, value)) attr.selected = true; - node.appendChild(element$1('option', attr, option+'')); - }); - - el.appendChild(node); - - node.addEventListener('change', function() { - bind.update(param.options[node.selectedIndex]); - }); - - bind.elements = [node]; - bind.set = function(value) { - for (var i=0, n=param.options.length; i - Copyright (C) 2013 Thaddee Tyl - Copyright (C) 2013 Mathias Bynens - Copyright (C) 2012 Ariya Hidayat - Copyright (C) 2012 Mathias Bynens - Copyright (C) 2012 Joost-Wim Boekesteijn - Copyright (C) 2012 Kris Kowal - Copyright (C) 2012 Yusuke Suzuki - Copyright (C) 2012 Arpad Borsos - Copyright (C) 2011 Ariya Hidayat - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY - DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; - LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND - ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF - THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -var TokenName, - source$1, - index$1, - length, - lookahead; - -var TokenBooleanLiteral = 1, - TokenEOF = 2, - TokenIdentifier = 3, - TokenKeyword = 4, - TokenNullLiteral = 5, - TokenNumericLiteral = 6, - TokenPunctuator = 7, - TokenStringLiteral = 8, - TokenRegularExpression = 9; - -TokenName = {}; -TokenName[TokenBooleanLiteral] = 'Boolean'; -TokenName[TokenEOF] = ''; -TokenName[TokenIdentifier] = 'Identifier'; -TokenName[TokenKeyword] = 'Keyword'; -TokenName[TokenNullLiteral] = 'Null'; -TokenName[TokenNumericLiteral] = 'Numeric'; -TokenName[TokenPunctuator] = 'Punctuator'; -TokenName[TokenStringLiteral] = 'String'; -TokenName[TokenRegularExpression] = 'RegularExpression'; - -var SyntaxArrayExpression = 'ArrayExpression', - SyntaxBinaryExpression = 'BinaryExpression', - SyntaxCallExpression = 'CallExpression', - SyntaxConditionalExpression = 'ConditionalExpression', - SyntaxIdentifier = 'Identifier', - SyntaxLiteral = 'Literal', - SyntaxLogicalExpression = 'LogicalExpression', - SyntaxMemberExpression = 'MemberExpression', - SyntaxObjectExpression = 'ObjectExpression', - SyntaxProperty = 'Property', - SyntaxUnaryExpression = 'UnaryExpression'; - -// Error messages should be identical to V8. -var MessageUnexpectedToken = 'Unexpected token %0', - MessageUnexpectedNumber = 'Unexpected number', - MessageUnexpectedString = 'Unexpected string', - MessageUnexpectedIdentifier = 'Unexpected identifier', - MessageUnexpectedReserved = 'Unexpected reserved word', - MessageUnexpectedEOS = 'Unexpected end of input', - MessageInvalidRegExp = 'Invalid regular expression', - MessageUnterminatedRegExp = 'Invalid regular expression: missing /', - MessageStrictOctalLiteral = 'Octal literals are not allowed in strict mode.', - MessageStrictDuplicateProperty = 'Duplicate data property in object literal not allowed in strict mode'; - -var ILLEGAL = 'ILLEGAL', - DISABLED = 'Disabled.'; - -// See also tools/generate-unicode-regex.py. - var RegexNonAsciiIdentifierStart = new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u08A0-\\u08B2\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58\\u0C59\\u0C60\\u0C61\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D60\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1877\\u1880-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19C1-\\u19C7\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4B\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1CE9-\\u1CEC\\u1CEE-\\u1CF1\\u1CF5\\u1CF6\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"), - RegexNonAsciiIdentifierPart = new RegExp("[\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0300-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u0483-\\u0487\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05F0-\\u05F2\\u0610-\\u061A\\u0620-\\u0669\\u066E-\\u06D3\\u06D5-\\u06DC\\u06DF-\\u06E8\\u06EA-\\u06FC\\u06FF\\u0710-\\u074A\\u074D-\\u07B1\\u07C0-\\u07F5\\u07FA\\u0800-\\u082D\\u0840-\\u085B\\u08A0-\\u08B2\\u08E4-\\u0963\\u0966-\\u096F\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09F1\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AEF\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B6F\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BEF\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58\\u0C59\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C81-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D01-\\u0D03\\u0D05-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4E\\u0D57\\u0D60-\\u0D63\\u0D66-\\u0D6F\\u0D7A-\\u0D7F\\u0D82\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E4E\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E87\\u0E88\\u0E8A\\u0E8D\\u0E94-\\u0E97\\u0E99-\\u0E9F\\u0EA1-\\u0EA3\\u0EA5\\u0EA7\\u0EAA\\u0EAB\\u0EAD-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F18\\u0F19\\u0F20-\\u0F29\\u0F35\\u0F37\\u0F39\\u0F3E-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F84\\u0F86-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u1000-\\u1049\\u1050-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u135F\\u1380-\\u138F\\u13A0-\\u13F4\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u170C\\u170E-\\u1714\\u1720-\\u1734\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17D3\\u17D7\\u17DC\\u17DD\\u17E0-\\u17E9\\u180B-\\u180D\\u1810-\\u1819\\u1820-\\u1877\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19D9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1AB0-\\u1ABD\\u1B00-\\u1B4B\\u1B50-\\u1B59\\u1B6B-\\u1B73\\u1B80-\\u1BF3\\u1C00-\\u1C37\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1CD0-\\u1CD2\\u1CD4-\\u1CF6\\u1CF8\\u1CF9\\u1D00-\\u1DF5\\u1DFC-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u200C\\u200D\\u203F\\u2040\\u2054\\u2071\\u207F\\u2090-\\u209C\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u2C00-\\u2C2E\\u2C30-\\u2C5E\\u2C60-\\u2CE4\\u2CEB-\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D7F-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u302F\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u3099\\u309A\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312D\\u3131-\\u318E\\u31A0-\\u31BA\\u31F0-\\u31FF\\u3400-\\u4DB5\\u4E00-\\u9FCC\\uA000-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66F\\uA674-\\uA67D\\uA67F-\\uA69D\\uA69F-\\uA6F1\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA78E\\uA790-\\uA7AD\\uA7B0\\uA7B1\\uA7F7-\\uA827\\uA840-\\uA873\\uA880-\\uA8C4\\uA8D0-\\uA8D9\\uA8E0-\\uA8F7\\uA8FB\\uA900-\\uA92D\\uA930-\\uA953\\uA960-\\uA97C\\uA980-\\uA9C0\\uA9CF-\\uA9D9\\uA9E0-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A-\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF6\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB5F\\uAB64\\uAB65\\uABC0-\\uABEA\\uABEC\\uABED\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE00-\\uFE0F\\uFE20-\\uFE2D\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF3F\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]"); - -// Ensure the condition is true, otherwise throw an error. -// This is only to have a better contract semantic, i.e. another safety net -// to catch a logic error. The condition shall be fulfilled in normal case. -// Do NOT use this to enforce a certain condition on any user input. - -function assert(condition, message) { - /* istanbul ignore next */ - if (!condition) { - throw new Error('ASSERT: ' + message); - } -} - -function isDecimalDigit(ch) { - return (ch >= 0x30 && ch <= 0x39); // 0..9 -} - -function isHexDigit(ch) { - return '0123456789abcdefABCDEF'.indexOf(ch) >= 0; -} - -function isOctalDigit(ch) { - return '01234567'.indexOf(ch) >= 0; -} - -// 7.2 White Space - -function isWhiteSpace(ch) { - return (ch === 0x20) || (ch === 0x09) || (ch === 0x0B) || (ch === 0x0C) || (ch === 0xA0) || - (ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0); -} - -// 7.3 Line Terminators - -function isLineTerminator(ch) { - return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029); -} - -// 7.6 Identifier Names and Identifiers - -function isIdentifierStart(ch) { - return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore) - (ch >= 0x41 && ch <= 0x5A) || // A..Z - (ch >= 0x61 && ch <= 0x7A) || // a..z - (ch === 0x5C) || // \ (backslash) - ((ch >= 0x80) && RegexNonAsciiIdentifierStart.test(String.fromCharCode(ch))); -} - -function isIdentifierPart(ch) { - return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore) - (ch >= 0x41 && ch <= 0x5A) || // A..Z - (ch >= 0x61 && ch <= 0x7A) || // a..z - (ch >= 0x30 && ch <= 0x39) || // 0..9 - (ch === 0x5C) || // \ (backslash) - ((ch >= 0x80) && RegexNonAsciiIdentifierPart.test(String.fromCharCode(ch))); -} - -// 7.6.1.1 Keywords - -var keywords = { - 'if':1, 'in':1, 'do':1, - 'var':1, 'for':1, 'new':1, 'try':1, 'let':1, - 'this':1, 'else':1, 'case':1, 'void':1, 'with':1, 'enum':1, - 'while':1, 'break':1, 'catch':1, 'throw':1, 'const':1, 'yield':1, 'class':1, 'super':1, - 'return':1, 'typeof':1, 'delete':1, 'switch':1, 'export':1, 'import':1, 'public':1, 'static':1, - 'default':1, 'finally':1, 'extends':1, 'package':1, 'private':1, - 'function':1, 'continue':1, 'debugger':1, - 'interface':1, 'protected':1, - 'instanceof':1, 'implements':1 -}; - -function skipComment() { - var ch; - - while (index$1 < length) { - ch = source$1.charCodeAt(index$1); - - if (isWhiteSpace(ch) || isLineTerminator(ch)) { - ++index$1; - } else { - break; - } - } -} - -function scanHexEscape(prefix) { - var i, len, ch, code = 0; - - len = (prefix === 'u') ? 4 : 2; - for (i = 0; i < len; ++i) { - if (index$1 < length && isHexDigit(source$1[index$1])) { - ch = source$1[index$1++]; - code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase()); - } else { - throwError({}, MessageUnexpectedToken, ILLEGAL); - } - } - return String.fromCharCode(code); -} - -function scanUnicodeCodePointEscape() { - var ch, code, cu1, cu2; - - ch = source$1[index$1]; - code = 0; - - // At least, one hex digit is required. - if (ch === '}') { - throwError({}, MessageUnexpectedToken, ILLEGAL); - } - - while (index$1 < length) { - ch = source$1[index$1++]; - if (!isHexDigit(ch)) { - break; - } - code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase()); - } - - if (code > 0x10FFFF || ch !== '}') { - throwError({}, MessageUnexpectedToken, ILLEGAL); - } - - // UTF-16 Encoding - if (code <= 0xFFFF) { - return String.fromCharCode(code); - } - cu1 = ((code - 0x10000) >> 10) + 0xD800; - cu2 = ((code - 0x10000) & 1023) + 0xDC00; - return String.fromCharCode(cu1, cu2); -} - -function getEscapedIdentifier() { - var ch, id; - - ch = source$1.charCodeAt(index$1++); - id = String.fromCharCode(ch); - - // '\u' (U+005C, U+0075) denotes an escaped character. - if (ch === 0x5C) { - if (source$1.charCodeAt(index$1) !== 0x75) { - throwError({}, MessageUnexpectedToken, ILLEGAL); - } - ++index$1; - ch = scanHexEscape('u'); - if (!ch || ch === '\\' || !isIdentifierStart(ch.charCodeAt(0))) { - throwError({}, MessageUnexpectedToken, ILLEGAL); - } - id = ch; - } - - while (index$1 < length) { - ch = source$1.charCodeAt(index$1); - if (!isIdentifierPart(ch)) { - break; - } - ++index$1; - id += String.fromCharCode(ch); - - // '\u' (U+005C, U+0075) denotes an escaped character. - if (ch === 0x5C) { - id = id.substr(0, id.length - 1); - if (source$1.charCodeAt(index$1) !== 0x75) { - throwError({}, MessageUnexpectedToken, ILLEGAL); - } - ++index$1; - ch = scanHexEscape('u'); - if (!ch || ch === '\\' || !isIdentifierPart(ch.charCodeAt(0))) { - throwError({}, MessageUnexpectedToken, ILLEGAL); - } - id += ch; - } - } - - return id; -} - -function getIdentifier() { - var start, ch; - - start = index$1++; - while (index$1 < length) { - ch = source$1.charCodeAt(index$1); - if (ch === 0x5C) { - // Blackslash (U+005C) marks Unicode escape sequence. - index$1 = start; - return getEscapedIdentifier(); - } - if (isIdentifierPart(ch)) { - ++index$1; - } else { - break; - } - } - - return source$1.slice(start, index$1); -} - -function scanIdentifier() { - var start, id, type; - - start = index$1; - - // Backslash (U+005C) starts an escaped character. - id = (source$1.charCodeAt(index$1) === 0x5C) ? getEscapedIdentifier() : getIdentifier(); - - // There is no keyword or literal with only one character. - // Thus, it must be an identifier. - if (id.length === 1) { - type = TokenIdentifier; - } else if (keywords.hasOwnProperty(id)) { - type = TokenKeyword; - } else if (id === 'null') { - type = TokenNullLiteral; - } else if (id === 'true' || id === 'false') { - type = TokenBooleanLiteral; - } else { - type = TokenIdentifier; - } - - return { - type: type, - value: id, - start: start, - end: index$1 - }; -} - -// 7.7 Punctuators - -function scanPunctuator() { - var start = index$1, - code = source$1.charCodeAt(index$1), - code2, - ch1 = source$1[index$1], - ch2, - ch3, - ch4; - - switch (code) { - - // Check for most common single-character punctuators. - case 0x2E: // . dot - case 0x28: // ( open bracket - case 0x29: // ) close bracket - case 0x3B: // ; semicolon - case 0x2C: // , comma - case 0x7B: // { open curly brace - case 0x7D: // } close curly brace - case 0x5B: // [ - case 0x5D: // ] - case 0x3A: // : - case 0x3F: // ? - case 0x7E: // ~ - ++index$1; - return { - type: TokenPunctuator, - value: String.fromCharCode(code), - start: start, - end: index$1 - }; - - default: - code2 = source$1.charCodeAt(index$1 + 1); - - // '=' (U+003D) marks an assignment or comparison operator. - if (code2 === 0x3D) { - switch (code) { - case 0x2B: // + - case 0x2D: // - - case 0x2F: // / - case 0x3C: // < - case 0x3E: // > - case 0x5E: // ^ - case 0x7C: // | - case 0x25: // % - case 0x26: // & - case 0x2A: // * - index$1 += 2; - return { - type: TokenPunctuator, - value: String.fromCharCode(code) + String.fromCharCode(code2), - start: start, - end: index$1 - }; - - case 0x21: // ! - case 0x3D: // = - index$1 += 2; - - // !== and === - if (source$1.charCodeAt(index$1) === 0x3D) { - ++index$1; - } - return { - type: TokenPunctuator, - value: source$1.slice(start, index$1), - start: start, - end: index$1 - }; - } - } - } - - // 4-character punctuator: >>>= - - ch4 = source$1.substr(index$1, 4); - - if (ch4 === '>>>=') { - index$1 += 4; - return { - type: TokenPunctuator, - value: ch4, - start: start, - end: index$1 - }; - } - - // 3-character punctuators: === !== >>> <<= >>= - - ch3 = ch4.substr(0, 3); - - if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') { - index$1 += 3; - return { - type: TokenPunctuator, - value: ch3, - start: start, - end: index$1 - }; - } - - // Other 2-character punctuators: ++ -- << >> && || - ch2 = ch3.substr(0, 2); - - if ((ch1 === ch2[1] && ('+-<>&|'.indexOf(ch1) >= 0)) || ch2 === '=>') { - index$1 += 2; - return { - type: TokenPunctuator, - value: ch2, - start: start, - end: index$1 - }; - } - - // 1-character punctuators: < > = ! + - * % & | ^ / - - if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) { - ++index$1; - return { - type: TokenPunctuator, - value: ch1, - start: start, - end: index$1 - }; - } - - throwError({}, MessageUnexpectedToken, ILLEGAL); -} - -// 7.8.3 Numeric Literals - -function scanHexLiteral(start) { - var number = ''; - - while (index$1 < length) { - if (!isHexDigit(source$1[index$1])) { - break; - } - number += source$1[index$1++]; - } - - if (number.length === 0) { - throwError({}, MessageUnexpectedToken, ILLEGAL); - } - - if (isIdentifierStart(source$1.charCodeAt(index$1))) { - throwError({}, MessageUnexpectedToken, ILLEGAL); - } - - return { - type: TokenNumericLiteral, - value: parseInt('0x' + number, 16), - start: start, - end: index$1 - }; -} - -function scanOctalLiteral(start) { - var number = '0' + source$1[index$1++]; - while (index$1 < length) { - if (!isOctalDigit(source$1[index$1])) { - break; - } - number += source$1[index$1++]; - } - - if (isIdentifierStart(source$1.charCodeAt(index$1)) || isDecimalDigit(source$1.charCodeAt(index$1))) { - throwError({}, MessageUnexpectedToken, ILLEGAL); - } - - return { - type: TokenNumericLiteral, - value: parseInt(number, 8), - octal: true, - start: start, - end: index$1 - }; -} - -function scanNumericLiteral() { - var number, start, ch; - - ch = source$1[index$1]; - assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'), - 'Numeric literal must start with a decimal digit or a decimal point'); - - start = index$1; - number = ''; - if (ch !== '.') { - number = source$1[index$1++]; - ch = source$1[index$1]; - - // Hex number starts with '0x'. - // Octal number starts with '0'. - if (number === '0') { - if (ch === 'x' || ch === 'X') { - ++index$1; - return scanHexLiteral(start); - } - if (isOctalDigit(ch)) { - return scanOctalLiteral(start); - } - - // decimal number starts with '0' such as '09' is illegal. - if (ch && isDecimalDigit(ch.charCodeAt(0))) { - throwError({}, MessageUnexpectedToken, ILLEGAL); - } - } - - while (isDecimalDigit(source$1.charCodeAt(index$1))) { - number += source$1[index$1++]; - } - ch = source$1[index$1]; - } - - if (ch === '.') { - number += source$1[index$1++]; - while (isDecimalDigit(source$1.charCodeAt(index$1))) { - number += source$1[index$1++]; - } - ch = source$1[index$1]; - } - - if (ch === 'e' || ch === 'E') { - number += source$1[index$1++]; - - ch = source$1[index$1]; - if (ch === '+' || ch === '-') { - number += source$1[index$1++]; - } - if (isDecimalDigit(source$1.charCodeAt(index$1))) { - while (isDecimalDigit(source$1.charCodeAt(index$1))) { - number += source$1[index$1++]; - } - } else { - throwError({}, MessageUnexpectedToken, ILLEGAL); - } - } - - if (isIdentifierStart(source$1.charCodeAt(index$1))) { - throwError({}, MessageUnexpectedToken, ILLEGAL); - } - - return { - type: TokenNumericLiteral, - value: parseFloat(number), - start: start, - end: index$1 - }; -} - -// 7.8.4 String Literals - -function scanStringLiteral() { - var str = '', - quote, start, ch, code, octal = false; - - quote = source$1[index$1]; - assert((quote === '\'' || quote === '"'), - 'String literal must starts with a quote'); - - start = index$1; - ++index$1; - - while (index$1 < length) { - ch = source$1[index$1++]; - - if (ch === quote) { - quote = ''; - break; - } else if (ch === '\\') { - ch = source$1[index$1++]; - if (!ch || !isLineTerminator(ch.charCodeAt(0))) { - switch (ch) { - case 'u': - case 'x': - if (source$1[index$1] === '{') { - ++index$1; - str += scanUnicodeCodePointEscape(); - } else { - str += scanHexEscape(ch); - } - break; - case 'n': - str += '\n'; - break; - case 'r': - str += '\r'; - break; - case 't': - str += '\t'; - break; - case 'b': - str += '\b'; - break; - case 'f': - str += '\f'; - break; - case 'v': - str += '\x0B'; - break; - - default: - if (isOctalDigit(ch)) { - code = '01234567'.indexOf(ch); - - // \0 is not octal escape sequence - if (code !== 0) { - octal = true; - } - - if (index$1 < length && isOctalDigit(source$1[index$1])) { - octal = true; - code = code * 8 + '01234567'.indexOf(source$1[index$1++]); - - // 3 digits are only allowed when string starts - // with 0, 1, 2, 3 - if ('0123'.indexOf(ch) >= 0 && - index$1 < length && - isOctalDigit(source$1[index$1])) { - code = code * 8 + '01234567'.indexOf(source$1[index$1++]); - } - } - str += String.fromCharCode(code); - } else { - str += ch; - } - break; - } - } else { - if (ch === '\r' && source$1[index$1] === '\n') { - ++index$1; - } - } - } else if (isLineTerminator(ch.charCodeAt(0))) { - break; - } else { - str += ch; - } - } - - if (quote !== '') { - throwError({}, MessageUnexpectedToken, ILLEGAL); - } - - return { - type: TokenStringLiteral, - value: str, - octal: octal, - start: start, - end: index$1 - }; -} - -function testRegExp(pattern, flags) { - var tmp = pattern; - - if (flags.indexOf('u') >= 0) { - // Replace each astral symbol and every Unicode code point - // escape sequence with a single ASCII symbol to avoid throwing on - // regular expressions that are only valid in combination with the - // `/u` flag. - // Note: replacing with the ASCII symbol `x` might cause false - // negatives in unlikely scenarios. For example, `[\u{61}-b]` is a - // perfectly valid pattern that is equivalent to `[a-b]`, but it - // would be replaced by `[x-b]` which throws an error. - tmp = tmp - .replace(/\\u\{([0-9a-fA-F]+)\}/g, function($0, $1) { - if (parseInt($1, 16) <= 0x10FFFF) { - return 'x'; - } - throwError({}, MessageInvalidRegExp); - }) - .replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, 'x'); - } - - // First, detect invalid regular expressions. - try { - } catch (e) { - throwError({}, MessageInvalidRegExp); - } - - // Return a regular expression object for this pattern-flag pair, or - // `null` in case the current environment doesn't support the flags it - // uses. - try { - return new RegExp(pattern, flags); - } catch (exception) { - return null; - } -} - -function scanRegExpBody() { - var ch, str, classMarker, terminated, body; - - ch = source$1[index$1]; - assert(ch === '/', 'Regular expression literal must start with a slash'); - str = source$1[index$1++]; - - classMarker = false; - terminated = false; - while (index$1 < length) { - ch = source$1[index$1++]; - str += ch; - if (ch === '\\') { - ch = source$1[index$1++]; - // ECMA-262 7.8.5 - if (isLineTerminator(ch.charCodeAt(0))) { - throwError({}, MessageUnterminatedRegExp); - } - str += ch; - } else if (isLineTerminator(ch.charCodeAt(0))) { - throwError({}, MessageUnterminatedRegExp); - } else if (classMarker) { - if (ch === ']') { - classMarker = false; - } - } else { - if (ch === '/') { - terminated = true; - break; - } else if (ch === '[') { - classMarker = true; - } - } - } - - if (!terminated) { - throwError({}, MessageUnterminatedRegExp); - } - - // Exclude leading and trailing slash. - body = str.substr(1, str.length - 2); - return { - value: body, - literal: str - }; -} - -function scanRegExpFlags() { - var ch, str, flags; - - str = ''; - flags = ''; - while (index$1 < length) { - ch = source$1[index$1]; - if (!isIdentifierPart(ch.charCodeAt(0))) { - break; - } - - ++index$1; - if (ch === '\\' && index$1 < length) { - throwError({}, MessageUnexpectedToken, ILLEGAL); - } else { - flags += ch; - str += ch; - } - } - - if (flags.search(/[^gimuy]/g) >= 0) { - throwError({}, MessageInvalidRegExp, flags); - } - - return { - value: flags, - literal: str - }; -} - -function scanRegExp() { - var start, body, flags, value; - - lookahead = null; - skipComment(); - start = index$1; - - body = scanRegExpBody(); - flags = scanRegExpFlags(); - value = testRegExp(body.value, flags.value); - - return { - literal: body.literal + flags.literal, - value: value, - regex: { - pattern: body.value, - flags: flags.value - }, - start: start, - end: index$1 - }; -} - -function isIdentifierName(token) { - return token.type === TokenIdentifier || - token.type === TokenKeyword || - token.type === TokenBooleanLiteral || - token.type === TokenNullLiteral; -} - -function advance() { - var ch; - - skipComment(); - - if (index$1 >= length) { - return { - type: TokenEOF, - start: index$1, - end: index$1 - }; - } - - ch = source$1.charCodeAt(index$1); - - if (isIdentifierStart(ch)) { - return scanIdentifier(); - } - - // Very common: ( and ) and ; - if (ch === 0x28 || ch === 0x29 || ch === 0x3B) { - return scanPunctuator(); - } - - // String literal starts with single quote (U+0027) or double quote (U+0022). - if (ch === 0x27 || ch === 0x22) { - return scanStringLiteral(); - } - - - // Dot (.) U+002E can also start a floating-point number, hence the need - // to check the next character. - if (ch === 0x2E) { - if (isDecimalDigit(source$1.charCodeAt(index$1 + 1))) { - return scanNumericLiteral(); - } - return scanPunctuator(); - } - - if (isDecimalDigit(ch)) { - return scanNumericLiteral(); - } - - return scanPunctuator(); -} - -function lex() { - var token; - - token = lookahead; - index$1 = token.end; - - lookahead = advance(); - - index$1 = token.end; - - return token; -} - -function peek$1() { - var pos; - - pos = index$1; - - lookahead = advance(); - index$1 = pos; -} - -function finishArrayExpression(elements) { - var node = new ASTNode(SyntaxArrayExpression); - node.elements = elements; - return node; -} - -function finishBinaryExpression(operator, left, right) { - var node = new ASTNode((operator === '||' || operator === '&&') ? SyntaxLogicalExpression : SyntaxBinaryExpression); - node.operator = operator; - node.left = left; - node.right = right; - return node; -} - -function finishCallExpression(callee, args) { - var node = new ASTNode(SyntaxCallExpression); - node.callee = callee; - node.arguments = args; - return node; -} - -function finishConditionalExpression(test, consequent, alternate) { - var node = new ASTNode(SyntaxConditionalExpression); - node.test = test; - node.consequent = consequent; - node.alternate = alternate; - return node; -} - -function finishIdentifier(name) { - var node = new ASTNode(SyntaxIdentifier); - node.name = name; - return node; -} - -function finishLiteral(token) { - var node = new ASTNode(SyntaxLiteral); - node.value = token.value; - node.raw = source$1.slice(token.start, token.end); - if (token.regex) { - if (node.raw === '//') { - node.raw = '/(?:)/'; - } - node.regex = token.regex; - } - return node; -} - -function finishMemberExpression(accessor, object, property) { - var node = new ASTNode(SyntaxMemberExpression); - node.computed = accessor === '['; - node.object = object; - node.property = property; - if (!node.computed) property.member = true; - return node; -} - -function finishObjectExpression(properties) { - var node = new ASTNode(SyntaxObjectExpression); - node.properties = properties; - return node; -} - -function finishProperty(kind, key, value) { - var node = new ASTNode(SyntaxProperty); - node.key = key; - node.value = value; - node.kind = kind; - return node; -} - -function finishUnaryExpression(operator, argument) { - var node = new ASTNode(SyntaxUnaryExpression); - node.operator = operator; - node.argument = argument; - node.prefix = true; - return node; -} - -// Throw an exception - -function throwError(token, messageFormat) { - var error, - args = Array.prototype.slice.call(arguments, 2), - msg = messageFormat.replace( - /%(\d)/g, - function(whole, index) { - assert(index < args.length, 'Message reference must be in range'); - return args[index]; - } - ); - - - error = new Error(msg); - error.index = index$1; - error.description = msg; - throw error; -} - -// Throw an exception because of the token. - -function throwUnexpected(token) { - if (token.type === TokenEOF) { - throwError(token, MessageUnexpectedEOS); - } - - if (token.type === TokenNumericLiteral) { - throwError(token, MessageUnexpectedNumber); - } - - if (token.type === TokenStringLiteral) { - throwError(token, MessageUnexpectedString); - } - - if (token.type === TokenIdentifier) { - throwError(token, MessageUnexpectedIdentifier); - } - - if (token.type === TokenKeyword) { - throwError(token, MessageUnexpectedReserved); - } - - // BooleanLiteral, NullLiteral, or Punctuator. - throwError(token, MessageUnexpectedToken, token.value); -} - -// Expect the next token to match the specified punctuator. -// If not, an exception will be thrown. - -function expect(value) { - var token = lex(); - if (token.type !== TokenPunctuator || token.value !== value) { - throwUnexpected(token); - } -} - -// Return true if the next token matches the specified punctuator. - -function match(value) { - return lookahead.type === TokenPunctuator && lookahead.value === value; -} - -// Return true if the next token matches the specified keyword - -function matchKeyword(keyword) { - return lookahead.type === TokenKeyword && lookahead.value === keyword; -} - -// 11.1.4 Array Initialiser - -function parseArrayInitialiser() { - var elements = []; - - index$1 = lookahead.start; - expect('['); - - while (!match(']')) { - if (match(',')) { - lex(); - elements.push(null); - } else { - elements.push(parseConditionalExpression()); - - if (!match(']')) { - expect(','); - } - } - } - - lex(); - - return finishArrayExpression(elements); -} - -// 11.1.5 Object Initialiser - -function parseObjectPropertyKey() { - var token; - - index$1 = lookahead.start; - token = lex(); - - // Note: This function is called only from parseObjectProperty(), where - // EOF and Punctuator tokens are already filtered out. - - if (token.type === TokenStringLiteral || token.type === TokenNumericLiteral) { - if (token.octal) { - throwError(token, MessageStrictOctalLiteral); - } - return finishLiteral(token); - } - - return finishIdentifier(token.value); -} - -function parseObjectProperty() { - var token, key, id, value; - - index$1 = lookahead.start; - token = lookahead; - - if (token.type === TokenIdentifier) { - id = parseObjectPropertyKey(); - expect(':'); - value = parseConditionalExpression(); - return finishProperty('init', id, value); - } - if (token.type === TokenEOF || token.type === TokenPunctuator) { - throwUnexpected(token); - } else { - key = parseObjectPropertyKey(); - expect(':'); - value = parseConditionalExpression(); - return finishProperty('init', key, value); - } -} - -function parseObjectInitialiser() { - var properties = [], - property, name, key, map = {}, - toString = String; - - index$1 = lookahead.start; - expect('{'); - - while (!match('}')) { - property = parseObjectProperty(); - - if (property.key.type === SyntaxIdentifier) { - name = property.key.name; - } else { - name = toString(property.key.value); - } - - key = '$' + name; - if (Object.prototype.hasOwnProperty.call(map, key)) { - throwError({}, MessageStrictDuplicateProperty); - } else { - map[key] = true; - } - - properties.push(property); - - if (!match('}')) { - expect(','); - } - } - - expect('}'); - - return finishObjectExpression(properties); -} - -// 11.1.6 The Grouping Operator - -function parseGroupExpression() { - var expr; - - expect('('); - - expr = parseExpression(); - - expect(')'); - - return expr; -} - - -// 11.1 Primary Expressions - -var legalKeywords = { - "if": 1, - "this": 1 -}; - -function parsePrimaryExpression() { - var type, token, expr; - - if (match('(')) { - return parseGroupExpression(); - } - - if (match('[')) { - return parseArrayInitialiser(); - } - - if (match('{')) { - return parseObjectInitialiser(); - } - - type = lookahead.type; - index$1 = lookahead.start; - - - if (type === TokenIdentifier || legalKeywords[lookahead.value]) { - expr = finishIdentifier(lex().value); - } else if (type === TokenStringLiteral || type === TokenNumericLiteral) { - if (lookahead.octal) { - throwError(lookahead, MessageStrictOctalLiteral); - } - expr = finishLiteral(lex()); - } else if (type === TokenKeyword) { - throw new Error(DISABLED); - } else if (type === TokenBooleanLiteral) { - token = lex(); - token.value = (token.value === 'true'); - expr = finishLiteral(token); - } else if (type === TokenNullLiteral) { - token = lex(); - token.value = null; - expr = finishLiteral(token); - } else if (match('/') || match('/=')) { - expr = finishLiteral(scanRegExp()); - peek$1(); - } else { - throwUnexpected(lex()); - } - - return expr; -} - -// 11.2 Left-Hand-Side Expressions - -function parseArguments() { - var args = []; - - expect('('); - - if (!match(')')) { - while (index$1 < length) { - args.push(parseConditionalExpression()); - if (match(')')) { - break; - } - expect(','); - } - } - - expect(')'); - - return args; -} - -function parseNonComputedProperty() { - var token; - index$1 = lookahead.start; - token = lex(); - - if (!isIdentifierName(token)) { - throwUnexpected(token); - } - - return finishIdentifier(token.value); -} - -function parseNonComputedMember() { - expect('.'); - - return parseNonComputedProperty(); -} - -function parseComputedMember() { - var expr; - - expect('['); - - expr = parseExpression(); - - expect(']'); - - return expr; -} - -function parseLeftHandSideExpressionAllowCall() { - var expr, args, property; - - expr = parsePrimaryExpression(); - - for (;;) { - if (match('.')) { - property = parseNonComputedMember(); - expr = finishMemberExpression('.', expr, property); - } else if (match('(')) { - args = parseArguments(); - expr = finishCallExpression(expr, args); - } else if (match('[')) { - property = parseComputedMember(); - expr = finishMemberExpression('[', expr, property); - } else { - break; - } - } - - return expr; -} - -// 11.3 Postfix Expressions - -function parsePostfixExpression() { - var expr = parseLeftHandSideExpressionAllowCall(); - - if (lookahead.type === TokenPunctuator) { - if ((match('++') || match('--'))) { - throw new Error(DISABLED); - } - } - - return expr; -} - -// 11.4 Unary Operators - -function parseUnaryExpression() { - var token, expr; - - if (lookahead.type !== TokenPunctuator && lookahead.type !== TokenKeyword) { - expr = parsePostfixExpression(); - } else if (match('++') || match('--')) { - throw new Error(DISABLED); - } else if (match('+') || match('-') || match('~') || match('!')) { - token = lex(); - expr = parseUnaryExpression(); - expr = finishUnaryExpression(token.value, expr); - } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) { - throw new Error(DISABLED); - } else { - expr = parsePostfixExpression(); - } - - return expr; -} - -function binaryPrecedence(token) { - var prec = 0; - - if (token.type !== TokenPunctuator && token.type !== TokenKeyword) { - return 0; - } - - switch (token.value) { - case '||': - prec = 1; - break; - - case '&&': - prec = 2; - break; - - case '|': - prec = 3; - break; - - case '^': - prec = 4; - break; - - case '&': - prec = 5; - break; - - case '==': - case '!=': - case '===': - case '!==': - prec = 6; - break; - - case '<': - case '>': - case '<=': - case '>=': - case 'instanceof': - case 'in': - prec = 7; - break; - - case '<<': - case '>>': - case '>>>': - prec = 8; - break; - - case '+': - case '-': - prec = 9; - break; - - case '*': - case '/': - case '%': - prec = 11; - break; - - default: - break; - } - - return prec; -} - -// 11.5 Multiplicative Operators -// 11.6 Additive Operators -// 11.7 Bitwise Shift Operators -// 11.8 Relational Operators -// 11.9 Equality Operators -// 11.10 Binary Bitwise Operators -// 11.11 Binary Logical Operators - -function parseBinaryExpression() { - var marker, markers, expr, token, prec, stack, right, operator, left, i; - - marker = lookahead; - left = parseUnaryExpression(); - - token = lookahead; - prec = binaryPrecedence(token); - if (prec === 0) { - return left; - } - token.prec = prec; - lex(); - - markers = [marker, lookahead]; - right = parseUnaryExpression(); - - stack = [left, token, right]; - - while ((prec = binaryPrecedence(lookahead)) > 0) { - - // Reduce: make a binary expression from the three topmost entries. - while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) { - right = stack.pop(); - operator = stack.pop().value; - left = stack.pop(); - markers.pop(); - expr = finishBinaryExpression(operator, left, right); - stack.push(expr); - } - - // Shift. - token = lex(); - token.prec = prec; - stack.push(token); - markers.push(lookahead); - expr = parseUnaryExpression(); - stack.push(expr); - } - - // Final reduce to clean-up the stack. - i = stack.length - 1; - expr = stack[i]; - markers.pop(); - while (i > 1) { - markers.pop(); - expr = finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr); - i -= 2; - } - - return expr; -} - -// 11.12 Conditional Operator - -function parseConditionalExpression() { - var expr, consequent, alternate; - - expr = parseBinaryExpression(); - - if (match('?')) { - lex(); - consequent = parseConditionalExpression(); - expect(':'); - alternate = parseConditionalExpression(); - - expr = finishConditionalExpression(expr, consequent, alternate); - } - - return expr; -} - -// 11.14 Comma Operator - -function parseExpression() { - var expr = parseConditionalExpression(); - - if (match(',')) { - throw new Error(DISABLED); // no sequence expressions - } - - return expr; -} - -function parse$3(code) { - source$1 = code; - index$1 = 0; - length = source$1.length; - lookahead = null; - - peek$1(); - - var expr = parseExpression(); - - if (lookahead.type !== TokenEOF) { - throw new Error("Unexpect token after expression."); - } - return expr; -} - -var constants = { - NaN: 'NaN', - E: 'Math.E', - LN2: 'Math.LN2', - LN10: 'Math.LN10', - LOG2E: 'Math.LOG2E', - LOG10E: 'Math.LOG10E', - PI: 'Math.PI', - SQRT1_2: 'Math.SQRT1_2', - SQRT2: 'Math.SQRT2', - MIN_VALUE: 'Number.MIN_VALUE', - MAX_VALUE: 'Number.MAX_VALUE' -}; - -function functions(codegen) { - - function fncall(name, args, cast, type) { - var obj = codegen(args[0]); - if (cast) { - obj = cast + '(' + obj + ')'; - if (cast.lastIndexOf('new ', 0) === 0) obj = '(' + obj + ')'; - } - return obj + '.' + name + (type < 0 ? '' : type === 0 ? - '()' : - '(' + args.slice(1).map(codegen).join(',') + ')'); - } - - function fn(name, cast, type) { - return function(args) { - return fncall(name, args, cast, type); - }; - } - - var DATE = 'new Date', - STRING = 'String', - REGEXP = 'RegExp'; - - return { - // MATH functions - isNaN: 'isNaN', - isFinite: 'isFinite', - abs: 'Math.abs', - acos: 'Math.acos', - asin: 'Math.asin', - atan: 'Math.atan', - atan2: 'Math.atan2', - ceil: 'Math.ceil', - cos: 'Math.cos', - exp: 'Math.exp', - floor: 'Math.floor', - log: 'Math.log', - max: 'Math.max', - min: 'Math.min', - pow: 'Math.pow', - random: 'Math.random', - round: 'Math.round', - sin: 'Math.sin', - sqrt: 'Math.sqrt', - tan: 'Math.tan', - - clamp: function(args) { - if (args.length < 3) error('Missing arguments to clamp function.'); - if (args.length > 3) error('Too many arguments to clamp function.'); - var a = args.map(codegen); - return 'Math.max('+a[1]+', Math.min('+a[2]+','+a[0]+'))'; - }, - - // DATE functions - now: 'Date.now', - utc: 'Date.UTC', - datetime: DATE, - date: fn('getDate', DATE, 0), - day: fn('getDay', DATE, 0), - year: fn('getFullYear', DATE, 0), - month: fn('getMonth', DATE, 0), - hours: fn('getHours', DATE, 0), - minutes: fn('getMinutes', DATE, 0), - seconds: fn('getSeconds', DATE, 0), - milliseconds: fn('getMilliseconds', DATE, 0), - time: fn('getTime', DATE, 0), - timezoneoffset: fn('getTimezoneOffset', DATE, 0), - utcdate: fn('getUTCDate', DATE, 0), - utcday: fn('getUTCDay', DATE, 0), - utcyear: fn('getUTCFullYear', DATE, 0), - utcmonth: fn('getUTCMonth', DATE, 0), - utchours: fn('getUTCHours', DATE, 0), - utcminutes: fn('getUTCMinutes', DATE, 0), - utcseconds: fn('getUTCSeconds', DATE, 0), - utcmilliseconds: fn('getUTCMilliseconds', DATE, 0), - - // sequence functions - length: fn('length', null, -1), - join: fn('join', null), - indexof: fn('indexOf', null), - lastindexof: fn('lastIndexOf', null), - slice: fn('slice', null), - - reverse: function(args) { - return '('+codegen(args[0])+').slice().reverse()'; - }, - - // STRING functions - parseFloat: 'parseFloat', - parseInt: 'parseInt', - upper: fn('toUpperCase', STRING, 0), - lower: fn('toLowerCase', STRING, 0), - substring: fn('substring', STRING), - split: fn('split', STRING), - replace: fn('replace', STRING), - trim: fn('trim', STRING, 0), - - // REGEXP functions - regexp: REGEXP, - test: fn('test', REGEXP), - - // Control Flow functions - if: function(args) { - if (args.length < 3) error('Missing arguments to if function.'); - if (args.length > 3) error('Too many arguments to if function.'); - var a = args.map(codegen); - return '('+a[0]+'?'+a[1]+':'+a[2]+')'; - } - }; -} - -function stripQuotes(s) { - var n = s && s.length - 1; - return n && ( - (s[0]==='"' && s[n]==='"') || - (s[0]==='\'' && s[n]==='\'') - ) ? s.slice(1, -1) : s; -} - -function codegen(opt) { - opt = opt || {}; - - var whitelist = opt.whitelist ? toSet(opt.whitelist) : {}, - blacklist = opt.blacklist ? toSet(opt.blacklist) : {}, - constants$1 = opt.constants || constants, - functions$1 = (opt.functions || functions)(visit), - globalvar = opt.globalvar, - fieldvar = opt.fieldvar, - globals = {}, - fields = {}, - memberDepth = 0; - - var outputGlobal = isFunction(globalvar) - ? globalvar - : function (id) { return globalvar + '["' + id + '"]'; }; - - function visit(ast) { - if (isString(ast)) return ast; - var generator = Generators[ast.type]; - if (generator == null) error('Unsupported type: ' + ast.type); - return generator(ast); - } - - var Generators = { - Literal: function(n) { - return n.raw; - }, - - Identifier: function(n) { - var id = n.name; - if (memberDepth > 0) { - return id; - } else if (blacklist.hasOwnProperty(id)) { - return error('Illegal identifier: ' + id); - } else if (constants$1.hasOwnProperty(id)) { - return constants$1[id]; - } else if (whitelist.hasOwnProperty(id)) { - return id; - } else { - globals[id] = 1; - return outputGlobal(id); - } - }, - - MemberExpression: function(n) { - var d = !n.computed; - var o = visit(n.object); - if (d) memberDepth += 1; - var p = visit(n.property); - if (o === fieldvar) { - // strip quotes to sanitize field name (#1653) - fields[stripQuotes(p)] = 1; - } - if (d) memberDepth -= 1; - return o + (d ? '.'+p : '['+p+']'); - }, - - CallExpression: function(n) { - if (n.callee.type !== 'Identifier') { - error('Illegal callee type: ' + n.callee.type); - } - var callee = n.callee.name; - var args = n.arguments; - var fn = functions$1.hasOwnProperty(callee) && functions$1[callee]; - if (!fn) error('Unrecognized function: ' + callee); - return isFunction(fn) - ? fn(args) - : fn + '(' + args.map(visit).join(',') + ')'; - }, - - ArrayExpression: function(n) { - return '[' + n.elements.map(visit).join(',') + ']'; - }, - - BinaryExpression: function(n) { - return '(' + visit(n.left) + n.operator + visit(n.right) + ')'; - }, - - UnaryExpression: function(n) { - return '(' + n.operator + visit(n.argument) + ')'; - }, - - ConditionalExpression: function(n) { - return '(' + visit(n.test) + - '?' + visit(n.consequent) + - ':' + visit(n.alternate) + - ')'; - }, - - LogicalExpression: function(n) { - return '(' + visit(n.left) + n.operator + visit(n.right) + ')'; - }, - - ObjectExpression: function(n) { - return '{' + n.properties.map(visit).join(',') + '}'; - }, - - Property: function(n) { - memberDepth += 1; - var k = visit(n.key); - memberDepth -= 1; - return k + ':' + visit(n.value); - } - }; - - function codegen(ast) { - var result = { - code: visit(ast), - globals: Object.keys(globals), - fields: Object.keys(fields) - }; - globals = {}; - fields = {}; - return result; - } - - codegen.functions = functions$1; - codegen.constants = constants$1; - - return codegen; -} - -const Intersect = 'intersect'; -const Union = 'union'; - -var TYPE_ENUM = 'E', - TYPE_RANGE_INC = 'R', - TYPE_RANGE_EXC = 'R-E', - TYPE_RANGE_LE = 'R-LE', - TYPE_RANGE_RE = 'R-RE', - UNIT_INDEX = 'index:unit'; - -// TODO: revisit date coercion? -function testPoint(datum, entry) { - var fields = entry.fields, - values = entry.values, - n = fields.length, - i = 0, dval, f; - - for (; i, values: array<*>}. - * Fielddef is of the form - * {field: string, channel: string, type: 'E' | 'R'} where - * 'type' identifies whether tuples in the dataset enumerate - * values for the field, or specify a continuous range. - * @param {object} datum - The tuple to test for inclusion. - * @param {string} op - The set operation for combining selections. - * One of 'intersect' or 'union' (default). - * @return {boolean} - True if the datum is in the selection, false otherwise. - */ -function selectionTest(name, datum, op) { - var data = this.context.data[name], - entries = data ? data.values.value : [], - unitIdx = data ? data[UNIT_INDEX] && data[UNIT_INDEX].value : undefined, - intersect = op === Intersect, - n = entries.length, - i = 0, - entry, miss, count, unit, b; - - for (; i= 0; }); - }, - - R_union: function(base, value) { - var lo = toNumber(value[0]), hi = toNumber(value[1]); - if (lo > hi) { - lo = value[1]; - hi = value[0]; - } - - if (!base.length) return [lo, hi]; - if (base[0] > lo) base[0] = lo; - if (base[1] < hi) base[1] = hi; - return base; - }, - - R_intersect: function(base, value) { - var lo = toNumber(value[0]), hi = toNumber(value[1]); - if (lo > hi) { - lo = value[1]; - hi = value[0]; - } - - if (!base.length) return [lo, hi]; - if (hi < base[0] || base[1] < lo) { - return []; - } else { - if (base[0] < lo) base[0] = lo; - if (base[1] > hi) base[1] = hi; - } - return base; - } -}; - -const DataPrefix = ':', - IndexPrefix = '@'; - -function selectionVisitor(name, args, scope, params) { - if (args[0].type !== Literal) error('First argument to selection functions must be a string literal.'); - - const data = args[0].value, - op = args.length >= 2 && peek(args).value, - field = 'unit', - indexName = IndexPrefix + field, - dataName = DataPrefix + data; - - if (op === Intersect && !params.hasOwnProperty(indexName)) { - params[indexName] = scope.getData(data).indataRef(scope, field); - } - - if (!params.hasOwnProperty(dataName)) { - params[dataName] = scope.getData(data).tuplesRef(); - } -} - -function ascending$c(a, b) { - return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN; -} - -function bisector$b(compare) { - if (compare.length === 1) compare = ascendingComparator$b(compare); - return { - left: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) < 0) lo = mid + 1; - else hi = mid; - } - return lo; - }, - right: function(a, x, lo, hi) { - if (lo == null) lo = 0; - if (hi == null) hi = a.length; - while (lo < hi) { - var mid = lo + hi >>> 1; - if (compare(a[mid], x) > 0) hi = mid; - else lo = mid + 1; - } - return lo; - } - }; -} - -function ascendingComparator$b(f) { - return function(d, x) { - return ascending$c(f(d), x); - }; -} - -var ascendingBisect$b = bisector$b(ascending$c); - -function sequence$2(start, stop, step) { - start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step; - - var i = -1, - n = Math.max(0, Math.ceil((stop - start) / step)) | 0, - range = new Array(n); - - while (++i < n) { - range[i] = start + i * step; - } - - return range; -} - -function data$1(name) { - const data = this.context.data[name]; - return data ? data.values.value : []; -} - -function indata(name, field, value) { - const index = this.context.data[name]['index:' + field], - entry = index ? index.value.get(value) : undefined; - return entry ? entry.count : entry; -} - -function setdata(name, tuples) { - const df = this.context.dataflow, - data = this.context.data[name], - input = data.input; - - df.pulse(input, df.changeset().remove(truthy).insert(tuples)); - return 1; -} - -function encode$1(item, name, retval) { - if (item) { - const df = this.context.dataflow, - target = item.mark.source; - df.pulse(target, df.changeset().encode(item, name)); - } - return retval !== undefined ? retval : item; -} - -const formatCache = {}; - -function formatter(type, method, specifier) { - let k = type + ':' + specifier, - e = formatCache[k]; - if (!e || e[0] !== method) { - formatCache[k] = (e = [method, method(specifier)]); - } - return e[1]; -} - -function format$2(_, specifier) { - return formatter('format', format$1, specifier)(_); -} - -function timeFormat$1(_, specifier) { - return formatter('timeFormat', timeFormat, specifier)(_); -} - -function utcFormat$1(_, specifier) { - return formatter('utcFormat', utcFormat, specifier)(_); -} - -function timeParse$1(_, specifier) { - return formatter('timeParse', timeParse, specifier)(_); -} - -function utcParse$1(_, specifier) { - return formatter('utcParse', utcParse, specifier)(_); -} - -var dateObj = new Date(2000, 0, 1); - -function time$2(month, day, specifier) { - dateObj.setMonth(month); - dateObj.setDate(day); - return timeFormat$1(dateObj, specifier); -} - -function monthFormat(month) { - return time$2(month, 1, '%B'); -} - -function monthAbbrevFormat(month) { - return time$2(month, 1, '%b'); -} - -function dayFormat(day) { - return time$2(0, 2 + day, '%A'); -} - -function dayAbbrevFormat(day) { - return time$2(0, 2 + day, '%a'); -} - -function getScale(name, ctx) { - let s; - return isFunction(name) ? name - : isString(name) ? (s = ctx.scales[name]) && s.value - : undefined; -} - -function range$5(name, group) { - const s = getScale(name, (group || this).context); - return s && s.range ? s.range() : []; -} - -function domain(name, group) { - const s = getScale(name, (group || this).context); - return s ? s.domain() : []; -} - -function bandwidth(name, group) { - const s = getScale(name, (group || this).context); - return s && s.bandwidth ? s.bandwidth() : 0; -} - -function bandspace(count, paddingInner, paddingOuter) { - return bandSpace(count || 0, paddingInner || 0, paddingOuter || 0); -} - -function copy$2(name, group) { - const s = getScale(name, (group || this).context); - return s ? s.copy() : undefined; -} - -function scale$2(name, value, group) { - const s = getScale(name, (group || this).context); - return s && value !== undefined ? s(value) : undefined; -} - -function invert(name, range, group) { - const s = getScale(name, (group || this).context); - return !s ? undefined - : isArray(range) ? (s.invertRange || s.invert)(range) - : (s.invert || s.invertExtent)(range); -} - -function geoMethod(methodName, globalMethod) { - return function(projection, geojson, group) { - if (projection) { - // projection defined, use it - const p = getScale(projection, (group || this).context); - return p && p.path[methodName](geojson); - } else { - // projection undefined, use global method - return globalMethod(geojson); - } - }; -} - -const geoArea = geoMethod('area', area$3); -const geoBounds = geoMethod('bounds', bounds$1); -const geoCentroid = geoMethod('centroid', centroid); - -function inScope(item) { - let group = this.context.group, - value = false; - - if (group) while (item) { - if (item === group) { value = true; break; } - item = item.mark.group; - } - return value; -} - -function intersect$3(b, opt, group) { - if (!b) return []; - - const [u, v] = b, - box = new Bounds().set(u[0], u[1], v[0], v[1]), - scene = group || this.context.dataflow.scenegraph().root; - - return intersect$1(scene, box, filter$2(opt)); -} - -function filter$2(opt) { - let p = null; - - if (opt) { - const types = array(opt.marktype), - names = array(opt.markname); - p = _ => (!types.length || types.some(t => _.marktype === t)) - && (!names.length || names.some(s => _.name === s)); - } - - return p; -} - -function log$4(df, method, args) { - try { - df[method].apply(df, ['EXPRESSION'].concat([].slice.call(args))); - } catch (err) { - df.warn(err); - } - return args[args.length-1]; -} - -function warn() { - return log$4(this.context.dataflow, 'warn', arguments); -} - -function info() { - return log$4(this.context.dataflow, 'info', arguments); -} - -function debug() { - return log$4(this.context.dataflow, 'debug', arguments); -} - -function merge$3() { - var args = [].slice.call(arguments); - args.unshift({}); - return extend.apply(null, args); -} - -function equal(a, b) { - return a === b || a !== a && b !== b ? true - : isArray(a) && isArray(b) && a.length === b.length ? equalArray(a, b) - : false; -} - -function equalArray(a, b) { - for (let i=0, n=a.length; i gradient.stop(fraction(_), scale(_))); - - return gradient; -} - -function geoShape(projection, geojson, group) { - const p = getScale(projection, (group || this).context); - return function(context) { - return p ? p.path.context(context)(geojson) : ''; - } -} - -function pathShape(path) { - let p = null; - return function(context) { - return context - ? pathRender(context, (p = p || pathParse(path))) - : path; - }; -} - -const EMPTY = {}; - -function datum(d) { return d.data; } - -function treeNodes(name, context) { - const tree = data$1.call(context, name); - return tree.root && tree.root.lookup || EMPTY; -} - -function treePath(name, source, target) { - const nodes = treeNodes(name, this), - s = nodes[source], - t = nodes[target]; - return s && t ? s.path(t).map(datum) : undefined; -} - -function treeAncestors(name, node) { - const n = treeNodes(name, this)[node]; - return n ? n.ancestors().map(datum) : undefined; -} - -const _window = (typeof window !== 'undefined' && window) || null; - -function screen() { - return _window ? _window.screen : {}; -} - -function windowSize() { - return _window - ? [_window.innerWidth, _window.innerHeight] - : [undefined, undefined]; -} - -function containerSize() { - const view = this.context.dataflow, - el = view.container && view.container(); - return el - ? [el.clientWidth, el.clientHeight] - : [undefined, undefined]; -} - -const DataPrefix$1 = ':'; -const IndexPrefix$1 = '@'; -const ScalePrefix = '%'; -const SignalPrefix = '$'; - -function dataVisitor(name, args, scope, params) { - if (args[0].type !== Literal) { - error('First argument to data functions must be a string literal.'); - } - - const data = args[0].value, - dataName = DataPrefix$1 + data; - - if (!params.hasOwnProperty(dataName)) { - params[dataName] = scope.getData(data).tuplesRef(); - } -} - -function indataVisitor(name, args, scope, params) { - if (args[0].type !== Literal) error('First argument to indata must be a string literal.'); - if (args[1].type !== Literal) error('Second argument to indata must be a string literal.'); - - const data = args[0].value, - field = args[1].value, - indexName = IndexPrefix$1 + field; - - if (!params.hasOwnProperty(indexName)) { - params[indexName] = scope.getData(data).indataRef(scope, field); - } -} - -function scaleVisitor(name, args, scope, params) { - if (args[0].type === Literal) { - // add scale dependency - addScaleDependency(scope, params, args[0].value); - } - else if (args[0].type === Identifier$1) { - // indirect scale lookup; add all scales as parameters - for (name in scope.scales) { - addScaleDependency(scope, params, name); - } - } -} - -function addScaleDependency(scope, params, name) { - const scaleName = ScalePrefix + name; - if (!params.hasOwnProperty(scaleName)) { - try { - params[scaleName] = scope.scaleRef(name); - } catch (err) { - // TODO: error handling? warning? - } - } -} - -// Expression function context object -const functionContext = { - random: function() { return random(); }, // override default - isArray, - isBoolean, - isDate, - isDefined: function(_) { return _ !== undefined; }, - isNumber, - isObject, - isRegExp, - isString, - isTuple, - isValid: function(_) { return _ != null && _ === _; }, - toBoolean, - toDate, - toNumber, - toString, - flush, - lerp, - merge: merge$3, - pad, - peek, - span, - inrange, - truncate, - rgb, - lab, - hcl, - hsl, - sequence: sequence$2, - format: format$2, - utcFormat: utcFormat$1, - utcParse: utcParse$1, - timeFormat: timeFormat$1, - timeParse: timeParse$1, - monthFormat, - monthAbbrevFormat, - dayFormat, - dayAbbrevFormat, - quarter, - utcquarter, - warn, - info, - debug, - extent: extent$1, - inScope, - intersect: intersect$3, - clampRange, - pinchDistance, - pinchAngle, - screen, - containerSize, - windowSize, - bandspace, - setdata, - pathShape, - panLinear, - panLog, - panPow, - panSymlog, - zoomLinear, - zoomLog, - zoomPow, - zoomSymlog, - encode: encode$1, - modify -}; - -const eventFunctions = ['view', 'item', 'group', 'xy', 'x', 'y'], // event functions - eventPrefix = 'event.vega.', // event function prefix - thisPrefix = 'this.', // function context prefix - astVisitors = {}; // AST visitors for dependency analysis - -// Build expression function registry -function buildFunctions(codegen) { - const fn = functions(codegen); - eventFunctions.forEach(name => fn[name] = eventPrefix + name); - for (let name in functionContext) { fn[name] = thisPrefix + name; } - return fn; -} - -// Register an expression function -function expressionFunction(name, fn, visitor) { - if (arguments.length === 1) { - return functionContext[name]; - } - - // register with the functionContext - functionContext[name] = fn; - - // if there is an astVisitor register that, too - if (visitor) astVisitors[name] = visitor; - - // if the code generator has already been initialized, - // we need to also register the function with it - if (codeGenerator) codeGenerator.functions[name] = thisPrefix + name; - return this; -} - -// register expression functions with ast visitors -expressionFunction('bandwidth', bandwidth, scaleVisitor); -expressionFunction('copy', copy$2, scaleVisitor); -expressionFunction('domain', domain, scaleVisitor); -expressionFunction('range', range$5, scaleVisitor); -expressionFunction('invert', invert, scaleVisitor); -expressionFunction('scale', scale$2, scaleVisitor); -expressionFunction('gradient', scaleGradient, scaleVisitor); -expressionFunction('geoArea', geoArea, scaleVisitor); -expressionFunction('geoBounds', geoBounds, scaleVisitor); -expressionFunction('geoCentroid', geoCentroid, scaleVisitor); -expressionFunction('geoShape', geoShape, scaleVisitor); -expressionFunction('indata', indata, indataVisitor); -expressionFunction('data', data$1, dataVisitor); -expressionFunction('treePath', treePath, dataVisitor); -expressionFunction('treeAncestors', treeAncestors, dataVisitor); - -// register Vega-Lite selection functions -expressionFunction('vlSelectionTest', selectionTest, selectionVisitor); -expressionFunction('vlSelectionResolve', selectionResolve, selectionVisitor); - -// Export code generator and parameters -const codegenParams = { - blacklist: ['_'], - whitelist: ['datum', 'event', 'item'], - fieldvar: 'datum', - globalvar: function(id) { return '_[' + $(SignalPrefix + id) + ']'; }, - functions: buildFunctions, - constants: constants, - visitors: astVisitors -}; - -var codeGenerator = codegen(codegenParams); - -/** - * Parse an expression given the argument signature and body code. - */ -function expression(args, code, ctx) { - // wrap code in return statement if expression does not terminate - if (code[code.length-1] !== ';') { - code = 'return(' + code + ');'; - } - var fn = Function.apply(null, args.concat(code)); - return ctx && ctx.functions ? fn.bind(ctx.functions) : fn; -} - -/** - * Parse an expression used to update an operator value. - */ -function operatorExpression(code, ctx) { - return expression(['_'], code, ctx); -} - -/** - * Parse an expression provided as an operator parameter value. - */ -function parameterExpression(code, ctx) { - return expression(['datum', '_'], code, ctx); -} - -/** - * Parse an expression applied to an event stream. - */ -function eventExpression(code, ctx) { - return expression(['event'], code, ctx); -} - -/** - * Parse an expression used to handle an event-driven operator update. - */ -function handlerExpression(code, ctx) { - return expression(['_', 'event'], code, ctx); -} - -/** - * Parse an expression that performs visual encoding. - */ -function encodeExpression(code, ctx) { - return expression(['item', '_'], code, ctx); -} - -/** - * Parse a set of operator parameters. - */ -function parseParameters(spec, ctx, params) { - params = params || {}; - var key, value; - - for (key in spec) { - value = spec[key]; - - params[key] = isArray(value) - ? value.map(function(v) { return parseParameter(v, ctx, params); }) - : parseParameter(value, ctx, params); - } - return params; -} - -/** - * Parse a single parameter. - */ -function parseParameter(spec, ctx, params) { - if (!spec || !isObject(spec)) return spec; - - for (var i=0, n=PARSERS.length, p; i v.resize()); - }, false, 1); -} - -/** - * Get the current view state, consisting of signal values and/or data sets. - * @param {object} [options] - Options flags indicating which state to export. - * If unspecified, all signals and data sets will be exported. - * @param {function(string, Operator):boolean} [options.signals] - Optional - * predicate function for testing if a signal should be included in the - * exported state. If unspecified, all signals will be included, except for - * those named 'parent' or those which refer to a Transform value. - * @param {function(string, object):boolean} [options.data] - Optional - * predicate function for testing if a data set's input should be included - * in the exported state. If unspecified, all data sets that have been - * explicitly modified will be included. - * @param {boolean} [options.recurse=true] - Flag indicating if the exported - * state should recursively include state from group mark sub-contexts. - * @return {object} - An object containing the exported state values. - */ -function getState$1(options) { - return this._runtime.getState(options || { - data: dataTest, - signals: signalTest, - recurse: true - }); -} - -function dataTest(name, data) { - return data.modified - && isArray(data.input.value) - && name.indexOf('_:vega:_'); -} - -function signalTest(name, op) { - return !(name === 'parent' || op instanceof transforms.proxy); -} - -/** - * Sets the current view state and updates the view by invoking run. - * @param {object} state - A state object containing signal and/or - * data set values, following the format used by the getState method. - * @return {View} - This view instance. - */ -function setState$1(state) { - this.runAsync(null, - v => { v._trigger = false; v._runtime.setState(state); }, - v => { v._trigger = true; } - ); - return this; -} - -function timer$1(callback, delay) { - function tick(elapsed) { - callback({timestamp: Date.now(), elapsed: elapsed}); - } - this._timers.push(interval$1(tick, delay)); -} - -function defaultTooltip$1(handler, event, item, value) { - var el = handler.element(); - if (el) el.setAttribute('title', formatTooltip(value)); -} - -function formatTooltip(value) { - return value == null ? '' - : isArray(value) ? formatArray(value) - : isObject(value) && !isDate(value) ? formatObject(value) - : value + ''; -} - -function formatObject(obj) { - return Object.keys(obj).map(function(key) { - var v = obj[key]; - return key + ': ' + (isArray(v) ? formatArray(v) : formatValue$1(v)); - }).join('\n'); -} - -function formatArray(value) { - return '[' + value.map(formatValue$1).join(', ') + ']'; -} - -function formatValue$1(value) { - return isArray(value) ? '[\u2026]' - : isObject(value) && !isDate(value) ? '{\u2026}' - : value; -} - -/** - * Create a new View instance from a Vega dataflow runtime specification. - * The generated View will not immediately be ready for display. Callers - * should also invoke the initialize method (e.g., to set the parent - * DOM element in browser-based deployment) and then invoke the run - * method to evaluate the dataflow graph. Rendering will automatically - * be peformed upon dataflow runs. - * @constructor - * @param {object} spec - The Vega dataflow runtime specification. - */ -function View(spec, options) { - var view = this; - options = options || {}; - - Dataflow.call(view); - if (options.loader) view.loader(options.loader); - if (options.logger) view.logger(options.logger); - if (options.logLevel != null) view.logLevel(options.logLevel); - - view._el = null; - view._elBind = null; - view._renderType = options.renderer || RenderType.Canvas; - view._scenegraph = new Scenegraph(); - var root = view._scenegraph.root; - - // initialize renderer, handler and event management - view._renderer = null; - view._tooltip = options.tooltip || defaultTooltip$1, - view._redraw = true; - view._handler = new CanvasHandler().scene(root); - view._preventDefault = false; - view._timers = []; - view._eventListeners = []; - view._resizeListeners = []; - - // initialize dataflow graph - var ctx = runtime(view, spec, options.functions); - view._runtime = ctx; - view._signals = ctx.signals; - view._bind = (spec.bindings || []).map(function(_) { - return { - state: null, - param: extend({}, _) - }; - }); - - // initialize scenegraph - if (ctx.root) ctx.root.set(root); - root.source = ctx.data.root.input; - view.pulse( - ctx.data.root.input, - view.changeset().insert(root.items) - ); - - // initialize background color - view._background = options.background || ctx.background || null; - - // initialize event configuration - view._eventConfig = initializeEventConfig(ctx.eventConfig); - - // initialize view size - view._width = view.width(); - view._height = view.height(); - view._viewWidth = viewWidth(view, view._width); - view._viewHeight = viewHeight(view, view._height); - view._origin = [0, 0]; - view._resize = 0; - view._autosize = 1; - initializeResize(view); - - // initialize cursor - cursor(view); - - // initialize hover proessing, if requested - if (options.hover) view.hover(); - - // initialize DOM container(s) and renderer - if (options.container) view.initialize(options.container, options.bind); -} - -var prototype$1k = inherits(View, Dataflow); - -// -- DATAFLOW / RENDERING ---- - -prototype$1k.evaluate = async function(encode, prerun, postrun) { - // evaluate dataflow and prerun - await Dataflow.prototype.evaluate.call(this, encode, prerun); - - // render as needed - if (this._redraw || this._resize) { - try { - if (this._renderer) { - if (this._resize) { - this._resize = 0; - resizeRenderer(this); - } - await this._renderer.renderAsync(this._scenegraph.root); - } - this._redraw = false; - } catch (e) { - this.error(e); - } - } - - // evaluate postrun - if (postrun) asyncCallback(this, postrun); - - return this; -}; - -prototype$1k.dirty = function(item) { - this._redraw = true; - this._renderer && this._renderer.dirty(item); -}; - -// -- GET / SET ---- - -prototype$1k.container = function() { - return this._el; -}; - -prototype$1k.scenegraph = function() { - return this._scenegraph; -}; - -prototype$1k.origin = function() { - return this._origin.slice(); -}; - -function lookupSignal(view, name) { - return view._signals.hasOwnProperty(name) - ? view._signals[name] - : error('Unrecognized signal name: ' + $(name)); -} - -prototype$1k.signal = function(name, value, options) { - var op = lookupSignal(this, name); - return arguments.length === 1 - ? op.value - : this.update(op, value, options); -}; - -prototype$1k.background = function(_) { - if (arguments.length) { - this._background = _; - this._resize = 1; - return this; - } else { - return this._background; - } -}; - -prototype$1k.width = function(_) { - return arguments.length ? this.signal('width', _) : this.signal('width'); -}; - -prototype$1k.height = function(_) { - return arguments.length ? this.signal('height', _) : this.signal('height'); -}; - -prototype$1k.padding = function(_) { - return arguments.length ? this.signal('padding', _) : this.signal('padding'); -}; - -prototype$1k.autosize = function(_) { - return arguments.length ? this.signal('autosize', _) : this.signal('autosize'); -}; - -prototype$1k.renderer = function(type) { - if (!arguments.length) return this._renderType; - if (!renderModule(type)) error('Unrecognized renderer type: ' + type); - if (type !== this._renderType) { - this._renderType = type; - this._resetRenderer(); - } - return this; -}; - -prototype$1k.tooltip = function(handler) { - if (!arguments.length) return this._tooltip; - if (handler !== this._tooltip) { - this._tooltip = handler; - this._resetRenderer(); - } - return this; -}; - -prototype$1k.loader = function(loader) { - if (!arguments.length) return this._loader; - if (loader !== this._loader) { - Dataflow.prototype.loader.call(this, loader); - this._resetRenderer(); - } - return this; -}; - -prototype$1k.resize = function() { - // set flag to perform autosize - this._autosize = 1; - // touch autosize signal to ensure top-level ViewLayout runs - return this.touch(lookupSignal(this, 'autosize')); -}; - -prototype$1k._resetRenderer = function() { - if (this._renderer) { - this._renderer = null; - this.initialize(this._el, this._elBind); - } -}; - -// -- SIZING ---- -prototype$1k._resizeView = resizeView; - -// -- EVENT HANDLING ---- - -prototype$1k.addEventListener = function(type, handler, options) { - var callback = handler; - if (!(options && options.trap === false)) { - // wrap callback in error handler - callback = trap(this, handler); - callback.raw = handler; - } - this._handler.on(type, callback); - return this; -}; - -prototype$1k.removeEventListener = function(type, handler) { - var handlers = this._handler.handlers(type), - i = handlers.length, h, t; - - // search registered handlers, remove if match found - while (--i >= 0) { - t = handlers[i].type; - h = handlers[i].handler; - if (type === t && (handler === h || handler === h.raw)) { - this._handler.off(t, h); - break; - } - } - return this; -}; - -prototype$1k.addResizeListener = function(handler) { - var l = this._resizeListeners; - if (l.indexOf(handler) < 0) { - // add handler if it isn't already registered - // note: error trapping handled elsewhere, so - // no need to wrap handlers here - l.push(handler); - } - return this; -}; - -prototype$1k.removeResizeListener = function(handler) { - var l = this._resizeListeners, - i = l.indexOf(handler); - if (i >= 0) { - l.splice(i, 1); - } - return this; -}; - -function findOperatorHandler(op, handler) { - var t = op._targets || [], - h = t.filter(function(op) { - var u = op._update; - return u && u.handler === handler; - }); - return h.length ? h[0] : null; -} - -function addOperatorListener(view, name, op, handler) { - var h = findOperatorHandler(op, handler); - if (!h) { - h = trap(this, function() { handler(name, op.value); }); - h.handler = handler; - view.on(op, null, h); - } - return view; -} - -function removeOperatorListener(view, op, handler) { - var h = findOperatorHandler(op, handler); - if (h) op._targets.remove(h); - return view; -} - -prototype$1k.addSignalListener = function(name, handler) { - return addOperatorListener(this, name, lookupSignal(this, name), handler); -}; - -prototype$1k.removeSignalListener = function(name, handler) { - return removeOperatorListener(this, lookupSignal(this, name), handler); -}; - -prototype$1k.addDataListener = function(name, handler) { - return addOperatorListener(this, name, dataref(this, name).values, handler); -}; - -prototype$1k.removeDataListener = function(name, handler) { - return removeOperatorListener(this, dataref(this, name).values, handler); -}; - -prototype$1k.preventDefault = function(_) { - if (arguments.length) { - this._preventDefault = _; - return this; - } else { - return this._preventDefault; - } -}; - -prototype$1k.timer = timer$1; -prototype$1k.events = events$1; -prototype$1k.finalize = finalize; -prototype$1k.hover = hover; - -// -- DATA ---- -prototype$1k.data = data; -prototype$1k.change = change; -prototype$1k.insert = insert; -prototype$1k.remove = remove; - -// -- SCALES -- -prototype$1k.scale = scale$3; - -// -- INITIALIZATION ---- -prototype$1k.initialize = initialize$1; - -// -- HEADLESS RENDERING ---- -prototype$1k.toImageURL = renderToImageURL; -prototype$1k.toCanvas = renderToCanvas; -prototype$1k.toSVG = renderToSVG; - -// -- SAVE / RESTORE STATE ---- -prototype$1k.getState = getState$1; -prototype$1k.setState = setState$1; - -function parseExpression$1(expr, scope, preamble) { - var params = {}, ast, gen; - - // parse the expression to an abstract syntax tree (ast) - try { - expr = isString(expr) ? expr : ($(expr) + ''); - ast = parse$3(expr); - } catch (err) { - error('Expression parse error: ' + expr); - } - - // analyze ast function calls for dependencies - ast.visit(function visitor(node) { - if (node.type !== CallExpression) return; - var name = node.callee.name, - visit = codegenParams.visitors[name]; - if (visit) visit(name, node.arguments, scope, params); - }); - - // perform code generation - gen = codeGenerator(ast); - - // collect signal dependencies - gen.globals.forEach(function(name) { - var signalName = SignalPrefix + name; - if (!params.hasOwnProperty(signalName) && scope.getSignal(name)) { - params[signalName] = scope.signalRef(name); - } - }); - - // return generated expression code and dependencies - return { - $expr: preamble ? preamble + 'return(' + gen.code + ');' : gen.code, - $fields: gen.fields, - $params: params - }; -} - -function Entry(type, value, params, parent) { - this.id = -1; - this.type = type; - this.value = value; - this.params = params; - if (parent) this.parent = parent; -} - -function entry(type, value, params, parent) { - return new Entry(type, value, params, parent); -} - -function operator(value, params) { - return entry('operator', value, params); -} - -// ----- - -function ref(op) { - var ref = {$ref: op.id}; - // if operator not yet registered, cache ref to resolve later - if (op.id < 0) (op.refs = op.refs || []).push(ref); - return ref; -} - -var tupleidRef = { - $tupleid: 1, - toString: function() { return ':_tupleid_:'; } -}; - -function fieldRef(field, name) { - return name ? {$field: field, $name: name} : {$field: field}; -} - -var keyFieldRef = fieldRef('key'); - -function compareRef(fields, orders) { - return {$compare: fields, $order: orders}; -} - -function keyRef(fields, flat) { - var ref = {$key: fields}; - if (flat) ref.$flat = true; - return ref; -} - -// ----- - -var Ascending = 'ascending'; - -var Descending = 'descending'; - -function sortKey(sort) { - return !isObject(sort) ? '' - : (sort.order === Descending ? '-' : '+') - + aggrField(sort.op, sort.field); -} - -function aggrField(op, field) { - return (op && op.signal ? '$' + op.signal : op || '') - + (op && field ? '_' : '') - + (field && field.signal ? '$' + field.signal : field || ''); -} - -function isSignal(_) { - return _ && _.signal; -} - -function isExpr(_) { - return _ && _.expr; -} - -/** - * Parse an event selector string. - * Returns an array of event stream definitions. - */ - -function transform$1(name) { - return function(params, value, parent) { - return entry(name, value, params || undefined, parent); - }; -} - -var Aggregate$1 = transform$1('aggregate'); -var Collect$1 = transform$1('collect'); -var Compare$1 = transform$1('compare'); -var Expression$1 = transform$1('expression'); -var Field$1 = transform$1('field'); -var Key$1 = transform$1('key'); -var Projection$1 = transform$1('projection'); -var Proxy$1 = transform$1('proxy'); -var Scale$1 = transform$1('scale'); -var Sieve$1 = transform$1('sieve'); - -const Left$1 = 'left'; -const Right$1 = 'right'; -const Center$1 = 'center'; - -const Start$1 = 'start'; -const End$1 = 'end'; - -var Skip$1 = toSet(['rule']), - Swap = toSet(['group', 'image', 'rect']); - -function anchorExpr(s, e, m) { - return `item.anchor === "${Start$1}" ? ${s} : item.anchor === "${End$1}" ? ${e} : ${m}`; -} - -const alignExpr = anchorExpr( - $(Left$1), - $(Right$1), - $(Center$1) -); - -function DataScope(scope, input, output, values, aggr) { - this.scope = scope; // parent scope object - this.input = input; // first operator in pipeline (tuple input) - this.output = output; // last operator in pipeline (tuple output) - this.values = values; // operator for accessing tuples (but not tuple flow) - - // last aggregate in transform pipeline - this.aggregate = aggr; - - // lookup table of field indices - this.index = {}; -} - -DataScope.fromEntries = function(scope, entries) { - var n = entries.length, - i = 1, - input = entries[0], - values = entries[n-1], - output = entries[n-2], - aggr = null; - - if (input && input.type === 'load') { - input = entries[1]; - } - - // add operator entries to this scope, wire up pulse chain - scope.add(entries[0]); - for (; i 0; -}; - -prototype$1m.toRuntime = function() { - this.finish(); - return { - background: this.background, - operators: this.operators, - streams: this.streams, - updates: this.updates, - bindings: this.bindings, - eventConfig: this.eventConfig - }; -}; - -prototype$1m.id = function() { - return (this._subid ? this._subid + ':' : 0) + this._id++; -}; - -prototype$1m.add = function(op) { - this.operators.push(op); - op.id = this.id(); - // if pre-registration references exist, resolve them now - if (op.refs) { - op.refs.forEach(function(ref) { ref.$ref = op.id; }); - op.refs = null; - } - return op; -}; - -prototype$1m.proxy = function(op) { - var vref = op instanceof Entry ? ref(op) : op; - return this.add(Proxy$1({value: vref})); -}; - -prototype$1m.addStream = function(stream) { - this.streams.push(stream); - stream.id = this.id(); - return stream; -}; - -prototype$1m.addUpdate = function(update) { - this.updates.push(update); - return update; -}; - -// Apply metadata -prototype$1m.finish = function() { - var name, ds; - - // annotate root - if (this.root) this.root.root = true; - - // annotate signals - for (name in this.signals) { - this.signals[name].signal = name; - } - - // annotate scales - for (name in this.scales) { - this.scales[name].scale = name; - } - - // annotate data sets - function annotate(op, name, type) { - var data, list; - if (op) { - data = op.data || (op.data = {}); - list = data[name] || (data[name] = []); - list.push(type); - } - } - for (name in this.data) { - ds = this.data[name]; - annotate(ds.input, name, 'input'); - annotate(ds.output, name, 'output'); - annotate(ds.values, name, 'values'); - for (var field in ds.index) { - annotate(ds.index[field], name, 'index:' + field); - } - } - - return this; -}; - -// ---- - -prototype$1m.pushState = function(encode, parent, lookup) { - this._encode.push(ref(this.add(Sieve$1({pulse: encode})))); - this._parent.push(parent); - this._lookup.push(lookup ? ref(this.proxy(lookup)) : null); - this._markpath.push(-1); -}; - -prototype$1m.popState = function() { - this._encode.pop(); - this._parent.pop(); - this._lookup.pop(); - this._markpath.pop(); -}; - -prototype$1m.parent = function() { - return peek(this._parent); -}; - -prototype$1m.encode = function() { - return peek(this._encode); -}; - -prototype$1m.lookup = function() { - return peek(this._lookup); -}; - -prototype$1m.markpath = function() { - var p = this._markpath; - return ++p[p.length-1]; -}; - -// ---- - -prototype$1m.fieldRef = function(field, name) { - if (isString(field)) return fieldRef(field, name); - if (!field.signal) { - error('Unsupported field reference: ' + $(field)); - } - - var s = field.signal, - f = this.field[s], - params; - - if (!f) { - params = {name: this.signalRef(s)}; - if (name) params.as = name; - this.field[s] = f = ref(this.add(Field$1(params))); - } - return f; -}; - -prototype$1m.compareRef = function(cmp, stable) { - function check(_) { - if (isSignal(_)) { - signal = true; - return scope.signalRef(_.signal); - } else if (isExpr(_)) { - signal = true; - return scope.exprRef(_.expr); - } else { - return _; - } - } - - var scope = this, - signal = false, - fields = array(cmp.field).map(check), - orders = array(cmp.order).map(check); - - if (stable) { - fields.push(tupleidRef); - } - - return signal - ? ref(this.add(Compare$1({fields: fields, orders: orders}))) - : compareRef(fields, orders); -}; - -prototype$1m.keyRef = function(fields, flat) { - function check(_) { - if (isSignal(_)) { - signal = true; - return ref(sig[_.signal]); - } else { - return _; - } - } - - var sig = this.signals, - signal = false; - fields = array(fields).map(check); - - return signal - ? ref(this.add(Key$1({fields: fields, flat: flat}))) - : keyRef(fields, flat); -}; - -prototype$1m.sortRef = function(sort) { - if (!sort) return sort; - - // including id ensures stable sorting - var a = [aggrField(sort.op, sort.field), tupleidRef], - o = sort.order || Ascending; - - return o.signal - ? ref(this.add(Compare$1({ - fields: a, - orders: [o = this.signalRef(o.signal), o] - }))) - : compareRef(a, [o, o]); -}; - -// ---- - -prototype$1m.event = function(source, type) { - var key = source + ':' + type; - if (!this.events[key]) { - var id = this.id(); - this.streams.push({ - id: id, - source: source, - type: type - }); - this.events[key] = id; - } - return this.events[key]; -}; - -// ---- - -prototype$1m.addSignal = function(name, value) { - if (this.signals.hasOwnProperty(name)) { - error('Duplicate signal name: ' + $(name)); - } - var op = value instanceof Entry ? value : this.add(operator(value)); - return this.signals[name] = op; -}; - -prototype$1m.getSignal = function(name) { - if (!this.signals[name]) { - error('Unrecognized signal name: ' + $(name)); - } - return this.signals[name]; -}; - -prototype$1m.signalRef = function(s) { - if (this.signals[s]) { - return ref(this.signals[s]); - } else if (!this.lambdas.hasOwnProperty(s)) { - this.lambdas[s] = this.add(operator(null)); - } - return ref(this.lambdas[s]); -}; - -prototype$1m.parseLambdas = function() { - var code = Object.keys(this.lambdas); - for (var i=0, n=code.length; i 0 ? ',' : '') - + (isObject(value) - ? (value.signal || propertyLambda(value)) - : $(value)); - } - return code + ']'; -} - -function objectLambda(obj) { - var code = '{', - i = 0, - key, value; - - for (key in obj) { - value = obj[key]; - code += (++i > 1 ? ',' : '') - + $(key) + ':' - + (isObject(value) - ? (value.signal || propertyLambda(value)) - : $(value)); - } - return code + '}'; -} - -prototype$1m.exprRef = function(code, name) { - var params = {expr: parseExpression$1(code, this)}; - if (name) params.expr.$name = name; - return ref(this.add(Expression$1(params))); -}; - -prototype$1m.addBinding = function(name, bind) { - if (!this.bindings) { - error('Nested signals do not support binding: ' + $(name)); - } - this.bindings.push(extend({signal: name}, bind)); -}; - -// ---- - -prototype$1m.addScaleProj = function(name, transform) { - if (this.scales.hasOwnProperty(name)) { - error('Duplicate scale or projection name: ' + $(name)); - } - this.scales[name] = this.add(transform); -}; - -prototype$1m.addScale = function(name, params) { - this.addScaleProj(name, Scale$1(params)); -}; - -prototype$1m.addProjection = function(name, params) { - this.addScaleProj(name, Projection$1(params)); -}; - -prototype$1m.getScale = function(name) { - if (!this.scales[name]) { - error('Unrecognized scale name: ' + $(name)); - } - return this.scales[name]; -}; - -prototype$1m.projectionRef = -prototype$1m.scaleRef = function(name) { - return ref(this.getScale(name)); -}; - -prototype$1m.projectionType = -prototype$1m.scaleType = function(name) { - return this.getScale(name).params.type; -}; - -// ---- - -prototype$1m.addData = function(name, dataScope) { - if (this.data.hasOwnProperty(name)) { - error('Duplicate data set name: ' + $(name)); - } - return (this.data[name] = dataScope); -}; - -prototype$1m.getData = function(name) { - if (!this.data[name]) { - error('Undefined data set name: ' + $(name)); - } - return this.data[name]; -}; - -prototype$1m.addDataPipeline = function(name, entries) { - if (this.data.hasOwnProperty(name)) { - error('Duplicate data set name: ' + $(name)); - } - return this.addData(name, DataScope.fromEntries(this, entries)); -}; - -// -- Transforms ----- -extend(transforms, tx, vtx, encode, geo, force, tree$1, voronoi$1, wordcloud, xf); - -class Data { - static fromArray(arr) { - const fields = getFieldsFromArr(arr); - const inferredTypes = inferTypes(arr, fields); - const schema = fields.reduce((schema, f) => { - const descriptor = { - type: inferredTypes[f], - cardinality: getCardinalityFromArr(arr, f) - }; - if (descriptor.type !== FieldType.STRING && - descriptor.type !== FieldType.BOOLEAN) { - descriptor["extent"] = extent(arr, d => d[f]); - } - schema[f] = descriptor; - return schema; - }, {}); - const numRows = arr.length; - let asp = [Data.getNumRowsDeclaration(numRows)]; - asp = fields.reduce((asp, f) => { - asp.push(Data.getFieldDeclaration(f, schema[f].type)); - asp.push(Data.getCardinalityDeclaration(f, schema[f].cardinality)); - // TODO: figure out how to handle non ints - if (schema[f].extent && schema[f].type === FieldType.INTEGER) { - asp.push(Data.getExtentDeclaration(f, schema[f].extent[0], schema[f].extent[1])); - } - return asp; - }, asp); - return { - fields, - schema, - numRows, - asp: asp.join("\n"), - data: arr - }; - } - static getNumRowsDeclaration(numRows) { - return `num_rows(${numRows}).`; - } - static getFieldDeclaration(fieldName, fieldType) { - return `fieldtype(${cleanFieldName(fieldName)},${fieldType}).`; - } - static getCardinalityDeclaration(fieldName, cardinality) { - return `cardinality(${cleanFieldName(fieldName)},${cardinality}).`; - } - static getExtentDeclaration(fieldName, min, max) { - if (!Number.isInteger(min) || !Number.isInteger(max)) { - throw new Error(`Extent is yet supported for floats: ${min} ${max}`); - } - return `extent(${cleanFieldName(fieldName)},${min},${max}).`; - } -} -function cleanFieldName(fieldName) { - return `"${fieldName}"`; -} -function getFieldsFromArr(arr) { - if (!arr) { - return []; - } - return Object.keys(arr[0]); -} -function getCardinalityFromArr(arr, field) { - const unique = arr.reduce((set, d) => { - set.add(d[field]); - return set; - }, new Set()); - return unique.size; -} -class FieldType { -} -FieldType.STRING = "string"; -FieldType.BOOLEAN = "boolean"; -FieldType.INTEGER = "integer"; -FieldType.NUMBER = "number"; -FieldType.DATE = "date"; - -function doesMatchRegex(s, regex) { - const match = s.match(regex); - return !!match; -} - -class Constraint { - static isHardConstraint(constraint) { - return constraint.type === Constraint.HARD_TYPE; - } - static isSoftConstraint(constraint) { - return constraint.type === Constraint.SOFT_TYPE; - } - static getUniqueName(constraint) { - return `${constraint.type}-${constraint.subtype}-${constraint.name}`; - } - static fromPrefAsp(asp) { - const matches = doesMatchRegex(asp, PREF_ASP_REGEX); - if (!matches) { - throw new Error(`ASP (${asp}) does not match constraint regex.`); - } - const [fullMatch, description, code, type, subtype, name, view, parameters,] = PREF_ASP_REGEX.exec(asp); - const definitions = code - .trim() - .split('\n') - .map(line => { - const [fullMatch, definition] = PREF_DEFINITION_REGEX.exec(line); - return definition; - }); - return { - subtype, - name, - view, - parameters, - description, - definitions, - type: type, - }; - } - static toPrefAsp(c) { - const description = `% @constraint ${c.description}`; - const head = `${c.type}(${c.subtype},${c.name},${c.view},${c.parameters})`; - const code = c.definitions - .map(def => { - return `${head} :- ${def}`; - }) - .join('\n') - .trim(); - return `${description}\n${code}`; - } -} -Constraint.HARD_TYPE = 'hard'; -Constraint.SOFT_TYPE = 'soft'; -const PREF_ASP_REGEX = /%\s*@constraint (.*)\n((?:(hard|soft)\((\w+),(\w+),(\w+),(\w+)\).*\n?)+)/; -const PREF_DEFINITION_REGEX = /:-\s*(.*)/; - -class ConstraintDictionary { - static isSoftConstraintDictionary(dict) { - if (Object.entries(dict).length === 0) { - return false; - } - const [firstName, firstConstraint] = Object.entries(dict)[0]; - return Constraint.isSoftConstraint(firstConstraint); - } - static isHardConstraintDictionary(dict) { - if (Object.entries(dict).length === 0) { - return false; - } - const [firstName, firstConstraint] = Object.entries(dict)[0]; - return Constraint.isHardConstraint(firstConstraint); - } - static fromAsp(prefAsp, weightAsp) { - const prefMatches = doesMatchRegex(prefAsp, PREF_REGEX); - let weightDictionary; - if (!!weightAsp) { - const weightMatches = doesMatchRegex(weightAsp, WEIGHT_REGEX); - if (!weightMatches) { - throw new Error(`Weight ASP: ${weightAsp} does not match weight regex.`); - } - const singleWeightAsps = weightAsp.match(WEIGHT_REGEX); - weightDictionary = singleWeightAsps.reduce((dict, asp) => { - const [fullMatch, subtype, name, weight] = WEIGHT_REGEX.exec(asp); - WEIGHT_REGEX.lastIndex = 0; - const uniqueName = `soft-${subtype}-${name}`; - dict[uniqueName] = +weight; - return dict; - }, {}); - } - if (!prefMatches) { - throw new Error(`Pref ASP: ${prefMatches} does not match pref regex.`); - } - const singlePrefAsps = prefAsp.match(PREF_REGEX); - const result = singlePrefAsps.reduce((dict, asp) => { - const constraint = Constraint.fromPrefAsp(asp); - const uniqueName = Constraint.getUniqueName(constraint); - if (!!weightDictionary) { - constraint.weight = weightDictionary[uniqueName]; - } - dict[uniqueName] = constraint; - return dict; - }, {}); - return result; - } -} -const PREF_REGEX = /%\s*@constraint(?:(?:.+)\n?)+/g; -const WEIGHT_REGEX = /soft_weight\((\w+),(\w+),(\d+)\).*/g; - -class Facts { - static toVegaLiteSpecDictionary(facts) { - const cleanedFacts = facts.map(fact => { - const cleaned = fact.replace(/\"/g, ""); - return cleaned; - }); - return facts2vl(cleanedFacts); - } - static toViews(facts) { - return facts2views(facts); - } - static getHardViolations(facts) { - return facts.filter(f => doesMatchRegex(f, /hard\(.*/)); - } - static getSoftViolations(facts) { - return facts.filter(f => doesMatchRegex(f, /soft\(.*/)); - } - static getViewFacts(facts) { - return facts.filter(f => doesMatchRegex(f, /view_fact\(.*/)); - } -} -const VIEW_REGEX_CAPTURE = /view\((.*)\)/; -const FACT_REGEX = /(\w+)\(([\w\.\/]+)(,([\w\.]+))?(,([\w\.]+))?\)/; -function facts2vl(facts) { - const views = facts2views(facts); - const result = views.reduce((dict, v) => { - dict[v] = facts2vl_single(facts, v); - return dict; - }, {}); - return result; -} -function facts2views(facts) { - const views = facts - .filter(fact => { - return doesMatchRegex(fact, VIEW_REGEX_CAPTURE); - }) - .map(fact => { - const extract = VIEW_REGEX_CAPTURE.exec(fact); - if (extract) { - const [_, name] = extract; - return name; - } - throw new Error(`Invalid view statement: ${fact}.`); - }); - return views; -} -function facts2vl_single(facts, view) { - let mark; - const encodings = {}; - for (const value of facts) { - const extract = FACT_REGEX.exec(value); - if (!extract) { - continue; - } - const [_, predicate, viz, __, first, ___, second] = extract; - if (viz !== view) { - continue; - } - if (predicate === "view") { - continue; - } - switch (predicate) { - case "mark": - mark = first; - break; - case "field": - case "type": - case "channel": - case "scale": - case "bin": - case "aggregate": - case "stack": - if (!encodings[first]) { - encodings[first] = {}; - } - encodings[first][predicate] = second; - } - } - const encoding = {}; - for (const e of Object.keys(encodings)) { - const enc = encodings[e]; - const scale = { - ...(enc.scale === "log" ? { type: "log" } : {}), - ...(enc.scale === "zero" ? { zero: true } : {}) - }; - const insert = { - type: enc.type, - ...(enc.aggregate ? { aggregate: enc.aggregate } : {}), - ...(enc.field ? { field: enc.field } : {}), - ...(enc.stack ? { stack: enc.stack } : {}), - ...(enc.bin ? { bin: JSON.parse(enc.bin) } : {}), - ...(enc.scale ? { scale } : {}) - }; - if (enc.aggregate) ; - encoding[enc.channel] = insert; - } - const spec = { - mark, - encoding - }; - return spec; -} - -class Witness { - static toVegaLiteSpecDictionary(witness) { - return Facts.toVegaLiteSpecDictionary(witness.facts); - } -} - -class Result { - static toWitnesses(result) { - return (result.Call || []).reduce((arr, el) => { - el.Witnesses.forEach((d, i) => { - const facts = d.Value; // add line terminator period. - let costs; - if (result.Models.Costs) { - costs = result.Models.Costs[i]; - } - arr.push({ - costs, - facts - }); - }); - return arr; - }, []); - } - static getBestVegaLiteSpecDictionary(result) { - const witnesses = Result.toWitnesses(result); - return Witness.toVegaLiteSpecDictionary(witnesses[0]); - } - static isSat(result) { - return result.Result === "OPTIMUM FOUND" || result.Result === "SATISFIABLE"; - } -} - -const tmp = require("tmp"); -const fs = require("fs"); -const path$4 = require("path"); -const { spawnSync } = require("child_process"); -tmp.setGracefulCleanup(); -const DEFAULT_OPTIONS = { - strictHard: true, - generate: true, - generateExtraEncodings: true, - optimize: true, - generateData: false -}; -class Draco { - static run(program, options, files) { - let resolvedFiles = files ? files : []; - resolvedFiles = resolvedFiles.concat(getFilesFromOptions(options)); - const tmpObj = tmp.fileSync({ postfix: ".lp" }); - if (program) { - fs.writeFileSync(tmpObj.name, program); - resolvedFiles = resolvedFiles.concat([tmpObj.name]); - } - const opt = []; - if (options) { - if (options.models !== undefined) { - opt.push(`--models=${options.models}`); - } - if (options.randomFreq !== undefined) { - // opt.push(`--sign-def=3`); - opt.push(`--rand-freq=${options.randomFreq}`); - } - if (options.randomSeed !== undefined) { - opt.push(`--seed=${options.randomSeed}`); - } - } - const out = runClingoSync(resolvedFiles, opt); - const result = JSON.parse(out.output[1]); - return result; - } - static runDebug(program, options, files) { - const result = Draco.run(program, { strictHard: false }, files); - if (!Result.isSat(result)) { - return []; - } - const witness = Result.toWitnesses(result)[0]; - return Facts.getHardViolations(witness.facts); - } - static getProgram(data, query) { - return `${data.asp} -${query}`; - } - static getSoftConstraints() { - const softDir = path$4.resolve(__dirname, "../model/view/soft"); - const subtypeDirs = fs - .readdirSync(softDir) - .filter(f => fs.statSync(path$4.join(softDir, f)).isDirectory()); - const result = subtypeDirs.reduce((dict, dir) => { - const prefFile = path$4.resolve(softDir, dir, "pref.lp"); - const prefContents = fs.readFileSync(prefFile, "utf8"); - const weightFile = path$4.resolve(softDir, dir, "weight.lp"); - const weightContents = fs.readFileSync(weightFile, "utf8"); - const constraints = ConstraintDictionary.fromAsp(prefContents, weightContents); - return { - ...dict, - ...constraints - }; - }, {}); - return result; - } -} -function runClingoSync(files, options) { - return spawnSync("clingo", ["--outf=2", "--quiet=1,2,2", ...options, ...files], { - encoding: "utf-8" - }); -} -function resolvePathToModelProgram(file) { - return path$4.resolve(__dirname, "../model/program", file); -} -function resolvePathToModelView(file) { - return path$4.resolve(__dirname, "../model/view", file); -} -function getFilesFromOptions(options) { - const result = []; - const resolvedOptions = options - ? Object.assign(Object.assign({}, DEFAULT_OPTIONS), options) - : DEFAULT_OPTIONS; - const { generate, generateExtraEncodings, strictHard, optimize, generateData } = resolvedOptions; - if (generate && generateExtraEncodings && strictHard && optimize) { - result.push(resolvePathToModelProgram("default.lp")); - } - else { - result.push(resolvePathToModelProgram("../data/index.lp")); - result.push(resolvePathToModelView("program/base.lp")); - if (generate) { - result.push(resolvePathToModelView("generate.lp")); - } - if (generateExtraEncodings) { - result.push(resolvePathToModelView("generate_extra_encodings.lp")); - } - if (strictHard) { - result.push(resolvePathToModelView("hard_integrity.lp")); - } - if (optimize) { - result.push(resolvePathToModelView("optimize.lp")); - } - } - if (generateData) { - result.push(resolvePathToModelProgram("../data/generate.lp")); - result.push(resolvePathToModelProgram("../data/grammar.lp")); - } - return result; -} - -exports.Constraint = Constraint; -exports.ConstraintDictionary = ConstraintDictionary; -exports.DEFAULT_OPTIONS = DEFAULT_OPTIONS; -exports.Data = Data; -exports.Draco = Draco; -exports.Facts = Facts; -exports.FieldType = FieldType; -exports.Result = Result; -exports.Witness = Witness; -//# sourceMappingURL=bundle.js.map diff --git a/build/bundle.js.map b/build/bundle.js.map deleted file mode 100644 index 10700e9..0000000 --- a/build/bundle.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"bundle.js","sources":["../node_modules/d3-array/src/ascending.js","../node_modules/d3-array/src/bisector.js","../node_modules/d3-array/src/bisect.js","../node_modules/d3-array/src/extent.js","../node_modules/vega-util/src/accessor.js","../node_modules/vega-util/src/error.js","../node_modules/vega-util/src/splitAccessPath.js","../node_modules/vega-util/src/isArray.js","../node_modules/vega-util/src/isObject.js","../node_modules/vega-util/src/isString.js","../node_modules/vega-util/src/stringValue.js","../node_modules/vega-util/src/field.js","../node_modules/vega-util/src/accessors.js","../node_modules/vega-util/src/logger.js","../node_modules/vega-util/src/peek.js","../node_modules/vega-util/src/toNumber.js","../node_modules/vega-util/src/transform.js","../node_modules/vega-util/src/quarter.js","../node_modules/vega-util/src/array.js","../node_modules/vega-util/src/clampRange.js","../node_modules/vega-util/src/isFunction.js","../node_modules/vega-util/src/compare.js","../node_modules/vega-util/src/constant.js","../node_modules/vega-util/src/debounce.js","../node_modules/vega-util/src/extend.js","../node_modules/vega-util/src/extent.js","../node_modules/vega-util/src/extentIndex.js","../node_modules/vega-util/src/fastmap.js","../node_modules/vega-util/src/flush.js","../node_modules/vega-util/src/inherits.js","../node_modules/vega-util/src/inrange.js","../node_modules/vega-util/src/isBoolean.js","../node_modules/vega-util/src/isDate.js","../node_modules/vega-util/src/isNumber.js","../node_modules/vega-util/src/isRegExp.js","../node_modules/vega-util/src/key.js","../node_modules/vega-util/src/lerp.js","../node_modules/vega-util/src/merge.js","../node_modules/vega-util/src/repeat.js","../node_modules/vega-util/src/pad.js","../node_modules/vega-util/src/span.js","../node_modules/vega-util/src/toBoolean.js","../node_modules/vega-util/src/toDate.js","../node_modules/vega-util/src/toString.js","../node_modules/vega-util/src/toSet.js","../node_modules/vega-util/src/truncate.js","../node_modules/vega-util/src/visitArray.js","../node_modules/vega-dataflow/src/util/UniqueList.js","../node_modules/vega-dataflow/src/util/asyncCallback.js","../node_modules/vega-dataflow/src/Tuple.js","../node_modules/vega-dataflow/src/ChangeSet.js","../node_modules/vega-dataflow/src/Parameters.js","../node_modules/vega-dataflow/src/Operator.js","../node_modules/vega-dataflow/src/dataflow/add.js","../node_modules/vega-dataflow/src/dataflow/connect.js","../node_modules/vega-dataflow/src/EventStream.js","../node_modules/vega-dataflow/src/dataflow/events.js","../node_modules/vega-loader/src/loader.js","../node_modules/vega-loader/src/type.js","../node_modules/d3-dsv/src/dsv.js","../node_modules/d3-dsv/src/csv.js","../node_modules/d3-dsv/src/tsv.js","../node_modules/vega-loader/src/formats/dsv.js","../node_modules/vega-loader/src/formats/json.js","../node_modules/topojson-client/src/identity.js","../node_modules/topojson-client/src/transform.js","../node_modules/topojson-client/src/reverse.js","../node_modules/topojson-client/src/feature.js","../node_modules/topojson-client/src/stitch.js","../node_modules/topojson-client/src/mesh.js","../node_modules/vega-loader/src/formats/topojson.js","../node_modules/vega-loader/src/formats/index.js","../node_modules/d3-time/src/interval.js","../node_modules/d3-time/src/millisecond.js","../node_modules/d3-time/src/duration.js","../node_modules/d3-time/src/second.js","../node_modules/d3-time/src/minute.js","../node_modules/d3-time/src/hour.js","../node_modules/d3-time/src/day.js","../node_modules/d3-time/src/week.js","../node_modules/d3-time/src/month.js","../node_modules/d3-time/src/year.js","../node_modules/d3-time/src/utcMinute.js","../node_modules/d3-time/src/utcHour.js","../node_modules/d3-time/src/utcDay.js","../node_modules/d3-time/src/utcWeek.js","../node_modules/d3-time/src/utcMonth.js","../node_modules/d3-time/src/utcYear.js","../node_modules/d3-time-format/src/locale.js","../node_modules/d3-time-format/src/defaultLocale.js","../node_modules/d3-time-format/src/isoFormat.js","../node_modules/d3-time-format/src/isoParse.js","../node_modules/vega-loader/src/read.js","../node_modules/vega-loader/index.js","../node_modules/vega-dataflow/src/dataflow/load.js","../node_modules/vega-dataflow/src/dataflow/on.js","../node_modules/vega-dataflow/src/dataflow/rank.js","../node_modules/vega-dataflow/src/Pulse.js","../node_modules/vega-dataflow/src/MultiPulse.js","../node_modules/vega-dataflow/src/dataflow/run.js","../node_modules/vega-dataflow/src/dataflow/update.js","../node_modules/vega-dataflow/src/util/Heap.js","../node_modules/vega-dataflow/src/dataflow/Dataflow.js","../node_modules/vega-dataflow/src/Transform.js","../node_modules/vega-dataflow/src/register.js","../node_modules/vega-dataflow/index.js","../node_modules/vega-transforms/src/util/AggregateKeys.js","../node_modules/vega-transforms/src/util/AggregateOps.js","../node_modules/vega-statistics/src/bin.js","../node_modules/vega-statistics/src/numbers.js","../node_modules/vega-statistics/src/random.js","../node_modules/vega-statistics/node_modules/d3-array/src/ascending.js","../node_modules/vega-statistics/node_modules/d3-array/src/bisector.js","../node_modules/vega-statistics/node_modules/d3-array/src/bisect.js","../node_modules/vega-statistics/node_modules/d3-array/src/variance.js","../node_modules/vega-statistics/node_modules/d3-array/src/number.js","../node_modules/vega-statistics/node_modules/d3-array/src/quantile.js","../node_modules/vega-statistics/src/bootstrapCI.js","../node_modules/vega-statistics/src/quartiles.js","../node_modules/vega-statistics/src/normal.js","../node_modules/vega-statistics/src/kde.js","../node_modules/vega-statistics/src/mixture.js","../node_modules/vega-statistics/src/uniform.js","../node_modules/vega-statistics/src/regression/ols.js","../node_modules/vega-statistics/src/sampleCurve.js","../node_modules/vega-transforms/src/util/TupleStore.js","../node_modules/vega-transforms/src/Aggregate.js","../node_modules/vega-transforms/src/Bin.js","../node_modules/vega-transforms/src/util/SortedList.js","../node_modules/vega-transforms/src/Collect.js","../node_modules/vega-transforms/src/Compare.js","../node_modules/vega-transforms/src/CountPattern.js","../node_modules/vega-transforms/src/Cross.js","../node_modules/vega-transforms/src/util/Distributions.js","../node_modules/vega-transforms/src/Density.js","../node_modules/vega-transforms/src/Expression.js","../node_modules/vega-transforms/src/Extent.js","../node_modules/vega-transforms/src/Subflow.js","../node_modules/vega-transforms/src/Facet.js","../node_modules/vega-transforms/src/Field.js","../node_modules/vega-transforms/src/Filter.js","../node_modules/vega-transforms/src/util/util.js","../node_modules/vega-transforms/src/Flatten.js","../node_modules/vega-transforms/src/Fold.js","../node_modules/vega-transforms/src/Formula.js","../node_modules/vega-transforms/src/Generate.js","../node_modules/vega-transforms/node_modules/d3-array/src/ascending.js","../node_modules/vega-transforms/node_modules/d3-array/src/bisector.js","../node_modules/vega-transforms/node_modules/d3-array/src/bisect.js","../node_modules/vega-transforms/node_modules/d3-array/src/extent.js","../node_modules/vega-transforms/node_modules/d3-array/src/range.js","../node_modules/vega-transforms/node_modules/d3-array/src/number.js","../node_modules/vega-transforms/node_modules/d3-array/src/quantile.js","../node_modules/vega-transforms/node_modules/d3-array/src/max.js","../node_modules/vega-transforms/node_modules/d3-array/src/mean.js","../node_modules/vega-transforms/node_modules/d3-array/src/quickselect.js","../node_modules/vega-transforms/node_modules/d3-array/src/median.js","../node_modules/vega-transforms/node_modules/d3-array/src/min.js","../node_modules/vega-transforms/src/Impute.js","../node_modules/vega-transforms/src/JoinAggregate.js","../node_modules/vega-transforms/src/KDE.js","../node_modules/vega-transforms/src/Key.js","../node_modules/vega-transforms/src/Load.js","../node_modules/vega-transforms/src/Lookup.js","../node_modules/vega-transforms/src/MultiExtent.js","../node_modules/vega-transforms/src/MultiValues.js","../node_modules/vega-transforms/src/Params.js","../node_modules/vega-transforms/src/Pivot.js","../node_modules/vega-transforms/src/PreFacet.js","../node_modules/vega-transforms/src/Project.js","../node_modules/vega-transforms/src/Proxy.js","../node_modules/vega-transforms/src/Relay.js","../node_modules/vega-transforms/src/Sample.js","../node_modules/vega-transforms/src/Sequence.js","../node_modules/vega-transforms/src/Sieve.js","../node_modules/vega-transforms/src/TupleIndex.js","../node_modules/vega-transforms/src/Values.js","../node_modules/vega-transforms/src/util/WindowOps.js","../node_modules/vega-transforms/src/util/WindowState.js","../node_modules/vega-transforms/src/Window.js","../node_modules/vega-view-transforms/src/constants.js","../node_modules/vega-scenegraph/src/Bounds.js","../node_modules/vega-scenegraph/src/Gradient.js","../node_modules/vega-scenegraph/src/Item.js","../node_modules/vega-scenegraph/src/GroupItem.js","../node_modules/vega-canvas/src/domCanvas.js","../node_modules/vega-canvas/src/nodeCanvas.js","../node_modules/vega-canvas/index.js","../node_modules/vega-scenegraph/src/ResourceLoader.js","../node_modules/d3-path/src/path.js","../node_modules/d3-shape/src/constant.js","../node_modules/d3-shape/src/math.js","../node_modules/d3-shape/src/arc.js","../node_modules/d3-shape/src/curve/linear.js","../node_modules/d3-shape/src/point.js","../node_modules/d3-shape/src/line.js","../node_modules/d3-shape/src/area.js","../node_modules/d3-shape/src/symbol/circle.js","../node_modules/d3-shape/src/symbol.js","../node_modules/d3-shape/src/noop.js","../node_modules/d3-shape/src/curve/basis.js","../node_modules/d3-shape/src/curve/basisClosed.js","../node_modules/d3-shape/src/curve/basisOpen.js","../node_modules/d3-shape/src/curve/bundle.js","../node_modules/d3-shape/src/curve/cardinal.js","../node_modules/d3-shape/src/curve/cardinalClosed.js","../node_modules/d3-shape/src/curve/cardinalOpen.js","../node_modules/d3-shape/src/curve/catmullRom.js","../node_modules/d3-shape/src/curve/catmullRomClosed.js","../node_modules/d3-shape/src/curve/catmullRomOpen.js","../node_modules/d3-shape/src/curve/linearClosed.js","../node_modules/d3-shape/src/curve/monotone.js","../node_modules/d3-shape/src/curve/natural.js","../node_modules/d3-shape/src/curve/step.js","../node_modules/vega-scenegraph/src/path/curves.js","../node_modules/vega-scenegraph/src/path/parse.js","../node_modules/vega-scenegraph/src/util/constants.js","../node_modules/vega-scenegraph/src/path/arc.js","../node_modules/vega-scenegraph/src/path/render.js","../node_modules/vega-scenegraph/src/path/symbols.js","../node_modules/vega-scenegraph/src/path/rectangle.js","../node_modules/vega-scenegraph/src/path/trail.js","../node_modules/vega-scenegraph/src/path/shapes.js","../node_modules/vega-scenegraph/src/bound/boundStroke.js","../node_modules/vega-scenegraph/src/bound/boundContext.js","../node_modules/vega-scenegraph/src/util/canvas/context.js","../node_modules/vega-scenegraph/src/util/intersect.js","../node_modules/vega-scenegraph/src/util/canvas/gradient.js","../node_modules/vega-scenegraph/src/util/canvas/color.js","../node_modules/vega-scenegraph/src/util/canvas/fill.js","../node_modules/vega-scenegraph/src/util/canvas/stroke.js","../node_modules/vega-scenegraph/src/util/visit.js","../node_modules/vega-scenegraph/src/util/canvas/draw.js","../node_modules/vega-scenegraph/src/util/canvas/pick.js","../node_modules/vega-scenegraph/src/util/svg/transform.js","../node_modules/vega-scenegraph/src/marks/markItemPath.js","../node_modules/vega-scenegraph/src/marks/arc.js","../node_modules/vega-scenegraph/src/util/pickPath.js","../node_modules/vega-scenegraph/src/marks/markMultiItemPath.js","../node_modules/vega-scenegraph/src/marks/area.js","../node_modules/vega-scenegraph/src/util/svg/clip.js","../node_modules/vega-scenegraph/src/marks/group.js","../node_modules/vega-scenegraph/src/marks/image.js","../node_modules/vega-scenegraph/src/marks/line.js","../node_modules/vega-scenegraph/src/marks/path.js","../node_modules/vega-scenegraph/src/marks/rect.js","../node_modules/vega-scenegraph/src/marks/rule.js","../node_modules/vega-scenegraph/src/marks/shape.js","../node_modules/vega-scenegraph/src/marks/symbol.js","../node_modules/vega-scenegraph/src/util/text.js","../node_modules/vega-scenegraph/src/marks/text.js","../node_modules/vega-scenegraph/src/marks/trail.js","../node_modules/vega-scenegraph/src/marks/index.js","../node_modules/vega-scenegraph/src/bound/boundItem.js","../node_modules/vega-scenegraph/src/bound/boundMark.js","../node_modules/vega-scenegraph/src/util/serialize.js","../node_modules/vega-scenegraph/src/Scenegraph.js","../node_modules/vega-scenegraph/src/util/dom.js","../node_modules/vega-scenegraph/src/util/point.js","../node_modules/vega-scenegraph/src/util/resolveItem.js","../node_modules/vega-scenegraph/src/Handler.js","../node_modules/vega-scenegraph/src/Renderer.js","../node_modules/vega-scenegraph/src/util/events.js","../node_modules/vega-scenegraph/src/CanvasHandler.js","../node_modules/vega-scenegraph/src/util/canvas/clip.js","../node_modules/vega-scenegraph/src/util/canvas/resize.js","../node_modules/vega-scenegraph/src/CanvasRenderer.js","../node_modules/vega-scenegraph/src/SVGHandler.js","../node_modules/vega-scenegraph/src/util/tags.js","../node_modules/vega-scenegraph/src/util/svg/metadata.js","../node_modules/vega-scenegraph/src/util/svg/styles.js","../node_modules/vega-scenegraph/src/SVGRenderer.js","../node_modules/vega-scenegraph/src/SVGStringRenderer.js","../node_modules/vega-scenegraph/src/modules.js","../node_modules/vega-scenegraph/src/intersect.js","../node_modules/vega-scenegraph/src/bound/boundClip.js","../node_modules/vega-view-transforms/src/Bound.js","../node_modules/vega-view-transforms/src/Identifier.js","../node_modules/vega-view-transforms/src/Mark.js","../node_modules/vega-view-transforms/src/Overlap.js","../node_modules/vega-view-transforms/src/Render.js","../node_modules/vega-view-transforms/src/layout/util.js","../node_modules/vega-view-transforms/src/layout/axis.js","../node_modules/vega-view-transforms/src/layout/grid.js","../node_modules/vega-view-transforms/src/layout/legend.js","../node_modules/vega-view-transforms/src/layout/title.js","../node_modules/vega-view-transforms/src/ViewLayout.js","../node_modules/vega-scale/src/scales/bandSpace.js","../node_modules/vega-scale/src/scales/types.js","../node_modules/vega-scale/src/scales/timeInterval.js","../node_modules/vega-scale/src/scales/invertRange.js","../node_modules/vega-scale/src/scales/invertRangeExtent.js","../node_modules/vega-scale/node_modules/d3-array/src/ascending.js","../node_modules/vega-scale/node_modules/d3-array/src/bisector.js","../node_modules/vega-scale/node_modules/d3-array/src/bisect.js","../node_modules/vega-scale/node_modules/d3-array/src/range.js","../node_modules/d3-scale/node_modules/d3-array/src/ascending.js","../node_modules/d3-scale/node_modules/d3-array/src/bisector.js","../node_modules/d3-scale/node_modules/d3-array/src/bisect.js","../node_modules/d3-scale/node_modules/d3-array/src/ticks.js","../node_modules/d3-scale/node_modules/d3-array/src/number.js","../node_modules/d3-scale/node_modules/d3-array/src/quantile.js","../node_modules/d3-scale/src/init.js","../node_modules/d3-scale/src/ordinal.js","../node_modules/d3-color/src/define.js","../node_modules/d3-color/src/color.js","../node_modules/d3-color/src/math.js","../node_modules/d3-color/src/lab.js","../node_modules/d3-color/src/cubehelix.js","../node_modules/d3-interpolate/src/basis.js","../node_modules/d3-interpolate/src/basisClosed.js","../node_modules/d3-interpolate/src/constant.js","../node_modules/d3-interpolate/src/color.js","../node_modules/d3-interpolate/src/rgb.js","../node_modules/d3-interpolate/src/array.js","../node_modules/d3-interpolate/src/date.js","../node_modules/d3-interpolate/src/number.js","../node_modules/d3-interpolate/src/object.js","../node_modules/d3-interpolate/src/string.js","../node_modules/d3-interpolate/src/value.js","../node_modules/d3-interpolate/src/discrete.js","../node_modules/d3-interpolate/src/hue.js","../node_modules/d3-interpolate/src/round.js","../node_modules/d3-interpolate/src/transform/decompose.js","../node_modules/d3-interpolate/src/transform/parse.js","../node_modules/d3-interpolate/src/transform/index.js","../node_modules/d3-interpolate/src/zoom.js","../node_modules/d3-interpolate/src/hsl.js","../node_modules/d3-interpolate/src/lab.js","../node_modules/d3-interpolate/src/hcl.js","../node_modules/d3-interpolate/src/cubehelix.js","../node_modules/d3-interpolate/src/piecewise.js","../node_modules/d3-interpolate/src/quantize.js","../node_modules/d3-scale/src/constant.js","../node_modules/d3-scale/src/number.js","../node_modules/d3-scale/src/continuous.js","../node_modules/d3-format/src/formatDecimal.js","../node_modules/d3-format/src/exponent.js","../node_modules/d3-format/src/formatGroup.js","../node_modules/d3-format/src/formatNumerals.js","../node_modules/d3-format/src/formatSpecifier.js","../node_modules/d3-format/src/formatTrim.js","../node_modules/d3-format/src/formatPrefixAuto.js","../node_modules/d3-format/src/formatRounded.js","../node_modules/d3-format/src/formatTypes.js","../node_modules/d3-format/src/identity.js","../node_modules/d3-format/src/locale.js","../node_modules/d3-format/src/defaultLocale.js","../node_modules/d3-format/src/precisionFixed.js","../node_modules/d3-format/src/precisionPrefix.js","../node_modules/d3-format/src/precisionRound.js","../node_modules/d3-scale/src/tickFormat.js","../node_modules/d3-scale/src/linear.js","../node_modules/d3-scale/src/identity.js","../node_modules/d3-scale/src/nice.js","../node_modules/d3-scale/src/log.js","../node_modules/d3-scale/src/symlog.js","../node_modules/d3-scale/src/pow.js","../node_modules/d3-scale/src/quantile.js","../node_modules/d3-scale/src/quantize.js","../node_modules/d3-scale/src/threshold.js","../node_modules/d3-scale/src/time.js","../node_modules/d3-scale/src/utcTime.js","../node_modules/d3-scale/src/sequential.js","../node_modules/d3-scale/src/diverging.js","../node_modules/vega-scale/src/scales/scaleBand.js","../node_modules/vega-scale/src/scales/numbers.js","../node_modules/vega-scale/src/scales/slice.js","../node_modules/vega-scale/src/scales/scaleBinOrdinal.js","../node_modules/vega-scale/src/scales.js","../node_modules/vega-scale/src/interpolate.js","../node_modules/vega-scale/src/palettes.js","../node_modules/vega-scale/src/schemes.js","../node_modules/vega-encode/src/ticks.js","../node_modules/vega-encode/src/AxisTicks.js","../node_modules/vega-encode/src/DataJoin.js","../node_modules/vega-encode/src/Encode.js","../node_modules/vega-encode/src/legend-types.js","../node_modules/vega-encode/src/labels.js","../node_modules/vega-encode/src/LegendEntries.js","../node_modules/vega-encode/src/LinkPath.js","../node_modules/vega-encode/node_modules/d3-array/src/ascending.js","../node_modules/vega-encode/node_modules/d3-array/src/bisector.js","../node_modules/vega-encode/node_modules/d3-array/src/bisect.js","../node_modules/vega-encode/node_modules/d3-array/src/range.js","../node_modules/vega-encode/node_modules/d3-array/src/sum.js","../node_modules/vega-encode/src/Pie.js","../node_modules/vega-encode/src/Scale.js","../node_modules/vega-encode/src/SortItems.js","../node_modules/vega-encode/src/Stack.js","../node_modules/vega-geo/node_modules/d3-array/src/ascending.js","../node_modules/vega-geo/node_modules/d3-array/src/bisector.js","../node_modules/vega-geo/node_modules/d3-array/src/bisect.js","../node_modules/vega-geo/node_modules/d3-array/src/extent.js","../node_modules/d3-contour/node_modules/d3-array/src/ascending.js","../node_modules/d3-contour/node_modules/d3-array/src/bisector.js","../node_modules/d3-contour/node_modules/d3-array/src/bisect.js","../node_modules/d3-contour/node_modules/d3-array/src/extent.js","../node_modules/d3-contour/node_modules/d3-array/src/range.js","../node_modules/d3-contour/node_modules/d3-array/src/ticks.js","../node_modules/d3-contour/node_modules/d3-array/src/threshold/sturges.js","../node_modules/d3-contour/node_modules/d3-array/src/max.js","../node_modules/d3-contour/src/array.js","../node_modules/d3-contour/src/ascending.js","../node_modules/d3-contour/src/area.js","../node_modules/d3-contour/src/constant.js","../node_modules/d3-contour/src/contains.js","../node_modules/d3-contour/src/noop.js","../node_modules/d3-contour/src/contours.js","../node_modules/d3-contour/src/blur.js","../node_modules/d3-contour/src/density.js","../node_modules/vega-geo/src/Contour.js","../node_modules/vega-geo/src/constants.js","../node_modules/vega-geo/src/GeoJSON.js","../node_modules/d3-geo/src/adder.js","../node_modules/d3-geo/src/math.js","../node_modules/d3-geo/src/noop.js","../node_modules/d3-geo/src/stream.js","../node_modules/d3-geo/src/area.js","../node_modules/d3-geo/src/cartesian.js","../node_modules/d3-geo/src/bounds.js","../node_modules/d3-geo/src/centroid.js","../node_modules/d3-geo/src/compose.js","../node_modules/d3-geo/src/rotation.js","../node_modules/d3-geo/src/circle.js","../node_modules/d3-geo/src/clip/buffer.js","../node_modules/d3-geo/src/pointEqual.js","../node_modules/d3-geo/src/clip/rejoin.js","../node_modules/d3-geo/src/polygonContains.js","../node_modules/d3-geo/node_modules/d3-array/src/ascending.js","../node_modules/d3-geo/node_modules/d3-array/src/bisector.js","../node_modules/d3-geo/node_modules/d3-array/src/bisect.js","../node_modules/d3-geo/node_modules/d3-array/src/range.js","../node_modules/d3-geo/node_modules/d3-array/src/merge.js","../node_modules/d3-geo/src/clip/index.js","../node_modules/d3-geo/src/clip/antimeridian.js","../node_modules/d3-geo/src/clip/circle.js","../node_modules/d3-geo/src/clip/line.js","../node_modules/d3-geo/src/clip/rectangle.js","../node_modules/d3-geo/src/length.js","../node_modules/d3-geo/src/graticule.js","../node_modules/d3-geo/src/identity.js","../node_modules/d3-geo/src/path/area.js","../node_modules/d3-geo/src/path/bounds.js","../node_modules/d3-geo/src/path/centroid.js","../node_modules/d3-geo/src/path/context.js","../node_modules/d3-geo/src/path/measure.js","../node_modules/d3-geo/src/path/string.js","../node_modules/d3-geo/src/path/index.js","../node_modules/d3-geo/src/transform.js","../node_modules/d3-geo/src/projection/fit.js","../node_modules/d3-geo/src/projection/resample.js","../node_modules/d3-geo/src/projection/index.js","../node_modules/d3-geo/src/projection/conic.js","../node_modules/d3-geo/src/projection/cylindricalEqualArea.js","../node_modules/d3-geo/src/projection/conicEqualArea.js","../node_modules/d3-geo/src/projection/albers.js","../node_modules/d3-geo/src/projection/albersUsa.js","../node_modules/d3-geo/src/projection/azimuthal.js","../node_modules/d3-geo/src/projection/azimuthalEqualArea.js","../node_modules/d3-geo/src/projection/azimuthalEquidistant.js","../node_modules/d3-geo/src/projection/mercator.js","../node_modules/d3-geo/src/projection/conicConformal.js","../node_modules/d3-geo/src/projection/equirectangular.js","../node_modules/d3-geo/src/projection/conicEquidistant.js","../node_modules/d3-geo/src/projection/gnomonic.js","../node_modules/d3-geo/src/projection/identity.js","../node_modules/d3-geo/src/projection/naturalEarth1.js","../node_modules/d3-geo/src/projection/orthographic.js","../node_modules/d3-geo/src/projection/stereographic.js","../node_modules/d3-geo/src/projection/transverseMercator.js","../node_modules/vega-projection/src/projections.js","../node_modules/vega-geo/src/GeoPath.js","../node_modules/vega-geo/src/GeoPoint.js","../node_modules/vega-geo/src/GeoShape.js","../node_modules/vega-geo/src/Graticule.js","../node_modules/vega-geo/src/Projection.js","../node_modules/d3-force/src/center.js","../node_modules/d3-quadtree/src/add.js","../node_modules/d3-quadtree/src/cover.js","../node_modules/d3-quadtree/src/data.js","../node_modules/d3-quadtree/src/extent.js","../node_modules/d3-quadtree/src/quad.js","../node_modules/d3-quadtree/src/find.js","../node_modules/d3-quadtree/src/remove.js","../node_modules/d3-quadtree/src/root.js","../node_modules/d3-quadtree/src/size.js","../node_modules/d3-quadtree/src/visit.js","../node_modules/d3-quadtree/src/visitAfter.js","../node_modules/d3-quadtree/src/x.js","../node_modules/d3-quadtree/src/y.js","../node_modules/d3-quadtree/src/quadtree.js","../node_modules/d3-force/src/constant.js","../node_modules/d3-force/src/jiggle.js","../node_modules/d3-force/src/collide.js","../node_modules/d3-force/src/link.js","../node_modules/d3-dispatch/src/dispatch.js","../node_modules/d3-timer/src/timer.js","../node_modules/d3-timer/src/interval.js","../node_modules/d3-force/src/simulation.js","../node_modules/d3-force/src/manyBody.js","../node_modules/d3-force/src/x.js","../node_modules/d3-force/src/y.js","../node_modules/vega-force/src/Force.js","../node_modules/vega-hierarchy/src/lookup.js","../node_modules/d3-hierarchy/src/cluster.js","../node_modules/d3-hierarchy/src/hierarchy/count.js","../node_modules/d3-hierarchy/src/hierarchy/each.js","../node_modules/d3-hierarchy/src/hierarchy/eachBefore.js","../node_modules/d3-hierarchy/src/hierarchy/eachAfter.js","../node_modules/d3-hierarchy/src/hierarchy/sum.js","../node_modules/d3-hierarchy/src/hierarchy/sort.js","../node_modules/d3-hierarchy/src/hierarchy/path.js","../node_modules/d3-hierarchy/src/hierarchy/ancestors.js","../node_modules/d3-hierarchy/src/hierarchy/descendants.js","../node_modules/d3-hierarchy/src/hierarchy/leaves.js","../node_modules/d3-hierarchy/src/hierarchy/links.js","../node_modules/d3-hierarchy/src/hierarchy/index.js","../node_modules/d3-hierarchy/src/array.js","../node_modules/d3-hierarchy/src/pack/enclose.js","../node_modules/d3-hierarchy/src/pack/siblings.js","../node_modules/d3-hierarchy/src/accessors.js","../node_modules/d3-hierarchy/src/constant.js","../node_modules/d3-hierarchy/src/pack/index.js","../node_modules/d3-hierarchy/src/treemap/round.js","../node_modules/d3-hierarchy/src/treemap/dice.js","../node_modules/d3-hierarchy/src/partition.js","../node_modules/d3-hierarchy/src/stratify.js","../node_modules/d3-hierarchy/src/tree.js","../node_modules/d3-hierarchy/src/treemap/slice.js","../node_modules/d3-hierarchy/src/treemap/squarify.js","../node_modules/d3-hierarchy/src/treemap/index.js","../node_modules/d3-hierarchy/src/treemap/binary.js","../node_modules/d3-hierarchy/src/treemap/sliceDice.js","../node_modules/d3-hierarchy/src/treemap/resquarify.js","../node_modules/vega-hierarchy/src/Nest.js","../node_modules/vega-hierarchy/src/HierarchyLayout.js","../node_modules/vega-hierarchy/src/Pack.js","../node_modules/vega-hierarchy/src/Partition.js","../node_modules/vega-hierarchy/src/Stratify.js","../node_modules/vega-hierarchy/src/Tree.js","../node_modules/vega-hierarchy/src/TreeLinks.js","../node_modules/vega-hierarchy/src/Treemap.js","../node_modules/d3-voronoi/src/constant.js","../node_modules/d3-voronoi/src/point.js","../node_modules/d3-voronoi/src/RedBlackTree.js","../node_modules/d3-voronoi/src/Edge.js","../node_modules/d3-voronoi/src/Cell.js","../node_modules/d3-voronoi/src/Circle.js","../node_modules/d3-voronoi/src/Beach.js","../node_modules/d3-voronoi/src/Diagram.js","../node_modules/d3-voronoi/src/voronoi.js","../node_modules/vega-voronoi/src/Voronoi.js","../node_modules/vega-wordcloud/src/CloudLayout.js","../node_modules/vega-wordcloud/src/Wordcloud.js","../node_modules/vega-crossfilter/src/arrays.js","../node_modules/vega-crossfilter/src/Bitmaps.js","../node_modules/vega-crossfilter/src/Dimension.js","../node_modules/vega-crossfilter/node_modules/d3-array/src/ascending.js","../node_modules/vega-crossfilter/node_modules/d3-array/src/bisector.js","../node_modules/vega-crossfilter/node_modules/d3-array/src/bisect.js","../node_modules/vega-crossfilter/node_modules/d3-array/src/permute.js","../node_modules/vega-crossfilter/src/SortedIndex.js","../node_modules/vega-crossfilter/src/CrossFilter.js","../node_modules/vega-crossfilter/src/ResolveFilter.js","../node_modules/vega-view/src/cursor.js","../node_modules/vega-view/src/data.js","../node_modules/vega-view/src/render-size.js","../node_modules/vega-view/src/events-extend.js","../node_modules/vega-view/src/events.js","../node_modules/vega-view/src/hover.js","../node_modules/vega-view/src/finalize.js","../node_modules/vega-view/src/element.js","../node_modules/vega-view/node_modules/d3-array/src/ascending.js","../node_modules/vega-view/node_modules/d3-array/src/bisector.js","../node_modules/vega-view/node_modules/d3-array/src/bisect.js","../node_modules/vega-view/node_modules/d3-array/src/ticks.js","../node_modules/vega-view/src/bind.js","../node_modules/vega-view/src/initialize-renderer.js","../node_modules/vega-view/src/trap.js","../node_modules/vega-view/src/initialize-handler.js","../node_modules/vega-view/src/initialize.js","../node_modules/vega-view/src/render-headless.js","../node_modules/vega-view/src/render-to-image-url.js","../node_modules/vega-view/src/render-to-canvas.js","../node_modules/vega-view/src/render-to-svg.js","../node_modules/vega-expression/src/ast.js","../node_modules/vega-expression/src/parser.js","../node_modules/vega-expression/src/constants.js","../node_modules/vega-expression/src/functions.js","../node_modules/vega-expression/src/codegen.js","../node_modules/vega-selections/src/constants.js","../node_modules/vega-selections/src/selectionTest.js","../node_modules/vega-selections/src/selectionResolve.js","../node_modules/vega-selections/src/selectionVisitor.js","../node_modules/vega-functions/node_modules/d3-array/src/ascending.js","../node_modules/vega-functions/node_modules/d3-array/src/bisector.js","../node_modules/vega-functions/node_modules/d3-array/src/bisect.js","../node_modules/vega-functions/node_modules/d3-array/src/range.js","../node_modules/vega-functions/src/data.js","../node_modules/vega-functions/src/encode.js","../node_modules/vega-functions/src/format.js","../node_modules/vega-functions/src/scale.js","../node_modules/vega-functions/src/geo.js","../node_modules/vega-functions/src/inscope.js","../node_modules/vega-functions/src/intersect.js","../node_modules/vega-functions/src/log.js","../node_modules/vega-functions/src/merge.js","../node_modules/vega-functions/src/modify.js","../node_modules/vega-functions/src/pinch.js","../node_modules/vega-functions/src/scale-gradient.js","../node_modules/vega-functions/src/shape.js","../node_modules/vega-functions/src/tree.js","../node_modules/vega-functions/src/window.js","../node_modules/vega-functions/src/prefix.js","../node_modules/vega-functions/src/visitors.js","../node_modules/vega-functions/src/codegen.js","../node_modules/vega-runtime/src/expression.js","../node_modules/vega-runtime/src/parameters.js","../node_modules/vega-runtime/src/util.js","../node_modules/vega-runtime/src/operator.js","../node_modules/vega-runtime/src/stream.js","../node_modules/vega-runtime/src/update.js","../node_modules/vega-runtime/src/dataflow.js","../node_modules/vega-runtime/src/state.js","../node_modules/vega-runtime/src/context.js","../node_modules/vega-view/src/runtime.js","../node_modules/vega-view/src/scale.js","../node_modules/vega-view/src/size.js","../node_modules/vega-view/src/state.js","../node_modules/vega-view/src/timer.js","../node_modules/vega-view/src/tooltip.js","../node_modules/vega-view/src/View.js","../node_modules/vega-parser/src/parsers/expression.js","../node_modules/vega-parser/src/util.js","../node_modules/vega-event-selector/src/event-selector.js","../node_modules/vega-parser/src/transforms.js","../node_modules/vega-parser/src/parsers/guides/constants.js","../node_modules/vega-parser/src/parsers/encode/adjust-spatial.js","../node_modules/vega-parser/src/parsers/guides/guide-util.js","../node_modules/vega-parser/src/DataScope.js","../node_modules/vega-parser/src/parsers/view.js","../node_modules/vega-parser/src/Scope.js","../node_modules/vega/index.js","data.js","model/util.js","model/constraint.js","model/constraint-dictionary.js","model/facts.js","model/witness.js","model/result.js","draco.js"],"sourcesContent":["export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","export default function(values, valueof) {\n let min;\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n return [min, max];\n}\n","export default function(fn, fields, name) {\n fn.fields = fields || [];\n fn.fname = name;\n return fn;\n}\n\nexport function accessorName(fn) {\n return fn == null ? null : fn.fname;\n}\n\nexport function accessorFields(fn) {\n return fn == null ? null : fn.fields;\n}\n","export default function(message) {\n throw Error(message);\n}\n","import error from './error';\n\nexport default function(p) {\n var path = [],\n q = null,\n b = 0,\n n = p.length,\n s = '',\n i, j, c;\n\n p = p + '';\n\n function push() {\n path.push(s + p.substring(i, j));\n s = '';\n i = j + 1;\n }\n\n for (i=j=0; j i) {\n push();\n } else {\n i = j + 1;\n }\n } else if (c === '[') {\n if (j > i) push();\n b = i = j + 1;\n } else if (c === ']') {\n if (!b) error('Access path missing open bracket: ' + p);\n if (b > 0) push();\n b = 0;\n i = j + 1;\n }\n }\n\n if (b) error('Access path missing closing bracket: ' + p);\n if (q) error('Access path missing closing quote: ' + p);\n\n if (j > i) {\n j++;\n push();\n }\n\n return path;\n}\n","export default Array.isArray;\n","export default function(_) {\n return _ === Object(_);\n}\n","export default function(_) {\n return typeof _ === 'string';\n}\n","import isArray from './isArray';\nimport isObject from './isObject';\nimport isString from './isString';\n\nexport default function $(x) {\n return isArray(x) ? '[' + x.map($) + ']'\n : isObject(x) || isString(x) ?\n // Output valid JSON and JS source strings.\n // See http://timelessrepo.com/json-isnt-a-javascript-subset\n JSON.stringify(x).replace('\\u2028','\\\\u2028').replace('\\u2029', '\\\\u2029')\n : x;\n}\n","import accessor from './accessor';\nimport splitAccessPath from './splitAccessPath';\nimport stringValue from './stringValue';\n\nexport default function(field, name) {\n var path = splitAccessPath(field),\n code = 'return _[' + path.map(stringValue).join('][') + '];';\n\n return accessor(\n Function('_', code),\n [(field = path.length===1 ? path[0] : field)],\n name || field\n );\n}\n","import accessor from './accessor';\nimport field from './field';\n\nvar empty = [];\n\nexport var id = field('id');\n\nexport var identity = accessor(function(_) { return _; }, empty, 'identity');\n\nexport var zero = accessor(function() { return 0; }, empty, 'zero');\n\nexport var one = accessor(function() { return 1; }, empty, 'one');\n\nexport var truthy = accessor(function() { return true; }, empty, 'true');\n\nexport var falsy = accessor(function() { return false; }, empty, 'false');\n","function log(method, level, input) {\n var msg = [level].concat([].slice.call(input));\n console[method](...msg); // eslint-disable-line no-console\n}\n\nexport var None = 0;\nexport var Error = 1;\nexport var Warn = 2;\nexport var Info = 3;\nexport var Debug = 4;\n\nexport default function(_, method) {\n var level = _ || None;\n return {\n level: function(_) {\n if (arguments.length) {\n level = +_;\n return this;\n } else {\n return level;\n }\n },\n error: function() {\n if (level >= Error) log(method || 'error', 'ERROR', arguments);\n return this;\n },\n warn: function() {\n if (level >= Warn) log(method || 'warn', 'WARN', arguments);\n return this;\n },\n info: function() {\n if (level >= Info) log(method || 'log', 'INFO', arguments);\n return this;\n },\n debug: function() {\n if (level >= Debug) log(method || 'log', 'DEBUG', arguments);\n return this;\n }\n }\n}\n","export default function(array) {\n return array[array.length - 1];\n}\n","export default function(_) {\n return _ == null || _ === '' ? null : +_;\n}\n","import {identity} from './accessors';\nimport peek from './peek';\nimport toNumber from './toNumber';\n\nfunction exp(sign) {\n return function(x) { return sign * Math.exp(x); };\n}\n\nfunction log(sign) {\n return function(x) { return Math.log(sign * x); };\n}\n\nfunction symlog(c) {\n return function(x) { return Math.sign(x) * Math.log1p(Math.abs(x / c)); };\n}\n\nfunction symexp(c) {\n return function(x) { return Math.sign(x) * Math.expm1(Math.abs(x)) * c; };\n}\n\nfunction pow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction pan(domain, delta, lift, ground) {\n var d0 = lift(domain[0]),\n d1 = lift(peek(domain)),\n dd = (d1 - d0) * delta;\n\n return [\n ground(d0 - dd),\n ground(d1 - dd)\n ];\n}\n\nexport function panLinear(domain, delta) {\n return pan(domain, delta, toNumber, identity);\n}\n\nexport function panLog(domain, delta) {\n var sign = Math.sign(domain[0]);\n return pan(domain, delta, log(sign), exp(sign));\n}\n\nexport function panPow(domain, delta, exponent) {\n return pan(domain, delta, pow(exponent), pow(1/exponent));\n}\n\nexport function panSymlog(domain, delta, constant) {\n return pan(domain, delta, symlog(constant), symexp(constant));\n}\n\nfunction zoom(domain, anchor, scale, lift, ground) {\n var d0 = lift(domain[0]),\n d1 = lift(peek(domain)),\n da = anchor != null ? lift(anchor) : (d0 + d1) / 2;\n\n return [\n ground(da + (d0 - da) * scale),\n ground(da + (d1 - da) * scale)\n ];\n}\n\nexport function zoomLinear(domain, anchor, scale) {\n return zoom(domain, anchor, scale, toNumber, identity);\n}\n\nexport function zoomLog(domain, anchor, scale) {\n var sign = Math.sign(domain[0]);\n return zoom(domain, anchor, scale, log(sign), exp(sign));\n}\n\nexport function zoomPow(domain, anchor, scale, exponent) {\n return zoom(domain, anchor, scale, pow(exponent), pow(1/exponent));\n}\n\nexport function zoomSymlog(domain, anchor, scale, constant) {\n return zoom(domain, anchor, scale, symlog(constant), symexp(constant));\n}\n","export function quarter(date) {\n return 1 + ~~(new Date(date).getMonth() / 3);\n}\n\nexport function utcquarter(date) {\n return 1 + ~~(new Date(date).getUTCMonth() / 3);\n}\n","import isArray from './isArray';\n\nexport default function(_) {\n return _ != null ? (isArray(_) ? _ : [_]) : [];\n}\n","/**\n * Span-preserving range clamp. If the span of the input range is less\n * than (max - min) and an endpoint exceeds either the min or max value,\n * the range is translated such that the span is preserved and one\n * endpoint touches the boundary of the min/max range.\n * If the span exceeds (max - min), the range [min, max] is returned.\n */\nexport default function(range, min, max) {\n var lo = range[0],\n hi = range[1],\n span;\n\n if (hi < lo) {\n span = hi;\n hi = lo;\n lo = span;\n }\n span = hi - lo;\n\n return span >= (max - min)\n ? [min, max]\n : [\n (lo = Math.min(Math.max(lo, min), max - span)),\n lo + span\n ];\n}\n","export default function(_) {\n return typeof _ === 'function';\n}\n","import {default as accessor, accessorFields} from './accessor';\nimport array from './array';\nimport isFunction from './isFunction';\nimport splitAccessPath from './splitAccessPath';\nimport stringValue from './stringValue';\n\nexport default function(fields, orders) {\n var idx = [],\n cmp = (fields = array(fields)).map(function(f, i) {\n if (f == null) {\n return null;\n } else {\n idx.push(i);\n return isFunction(f) ? f\n : splitAccessPath(f).map(stringValue).join('][');\n }\n }),\n n = idx.length - 1,\n ord = array(orders),\n code = 'var u,v;return ',\n i, j, f, u, v, d, t, lt, gt;\n\n if (n < 0) return null;\n\n for (j=0; j<=n; ++j) {\n i = idx[j];\n f = cmp[i];\n\n if (isFunction(f)) {\n d = 'f' + i;\n u = '(u=this.' + d + '(a))';\n v = '(v=this.' + d + '(b))';\n (t = t || {})[d] = f;\n } else {\n u = '(u=a['+f+'])';\n v = '(v=b['+f+'])';\n }\n\n d = '((v=v instanceof Date?+v:v),(u=u instanceof Date?+u:u))';\n\n if (ord[i] !== 'descending') {\n gt = 1;\n lt = -1;\n } else {\n gt = -1;\n lt = 1;\n }\n\n code += '(' + u+'<'+v+'||u==null)&&v!=null?' + lt\n + ':(u>v||v==null)&&u!=null?' + gt\n + ':'+d+'!==u&&v===v?' + lt\n + ':v!==v&&u===u?' + gt\n + (i < n ? ':' : ':0');\n }\n\n f = Function('a', 'b', code + ';');\n if (t) f = f.bind(t);\n\n fields = fields.reduce(function(map, field) {\n if (isFunction(field)) {\n (accessorFields(field) || []).forEach(function(_) { map[_] = 1; });\n } else if (field != null) {\n map[field + ''] = 1;\n }\n return map;\n }, {});\n\n return accessor(f, Object.keys(fields));\n}\n","import isFunction from './isFunction';\n\nexport default function(_) {\n return isFunction(_) ? _ : function() { return _; };\n}\n","export default function(delay, handler) {\n var tid, evt;\n\n function callback() {\n handler(evt);\n tid = evt = null;\n }\n\n return function(e) {\n evt = e;\n if (tid) clearTimeout(tid);\n tid = setTimeout(callback, delay);\n };\n}\n","export default function(_) {\n for (var x, k, i=1, len=arguments.length; i max) max = v;\n }\n }\n } else {\n // find first valid value\n for (v = f(array[i]); v == null || v !== v; v = f(array[++i]));\n min = max = v;\n\n // visit all other values\n for (; i max) max = v;\n }\n }\n }\n }\n\n return [min, max];\n}\n","export default function(array, f) {\n var i = -1,\n n = array.length,\n a, b, c, u, v;\n\n if (f == null) {\n while (++i < n) {\n b = array[i];\n if (b != null && b >= b) {\n a = c = b;\n break;\n }\n }\n u = v = i;\n while (++i < n) {\n b = array[i];\n if (b != null) {\n if (a > b) {\n a = b;\n u = i;\n }\n if (c < b) {\n c = b;\n v = i;\n }\n }\n }\n } else {\n while (++i < n) {\n b = f(array[i], i, array);\n if (b != null && b >= b) {\n a = c = b;\n break;\n }\n }\n u = v = i;\n while (++i < n) {\n b = f(array[i], i, array);\n if (b != null) {\n if (a > b) {\n a = b;\n u = i;\n }\n if (c < b) {\n c = b;\n v = i;\n }\n }\n }\n }\n\n return [u, v];\n}\n","var NULL = {};\n\nexport default function(input) {\n var obj = {},\n map,\n test;\n\n function has(key) {\n return obj.hasOwnProperty(key) && obj[key] !== NULL;\n }\n\n map = {\n size: 0,\n empty: 0,\n object: obj,\n has: has,\n get: function(key) {\n return has(key) ? obj[key] : undefined;\n },\n set: function(key, value) {\n if (!has(key)) {\n ++map.size;\n if (obj[key] === NULL) --map.empty;\n }\n obj[key] = value;\n return this;\n },\n delete: function(key) {\n if (has(key)) {\n --map.size;\n ++map.empty;\n obj[key] = NULL;\n }\n return this;\n },\n clear: function() {\n map.size = map.empty = 0;\n map.object = obj = {};\n },\n test: function(_) {\n if (arguments.length) {\n test = _;\n return map;\n } else {\n return test;\n }\n },\n clean: function() {\n var next = {},\n size = 0,\n key, value;\n for (key in obj) {\n value = obj[key];\n if (value !== NULL && (!test || !test(value))) {\n next[key] = value;\n ++size;\n }\n }\n map.size = size;\n map.empty = 0;\n map.object = (obj = next);\n }\n };\n\n if (input) Object.keys(input).forEach(function(key) {\n map.set(key, input[key]);\n });\n\n return map;\n}\n","import peek from './peek';\n\nexport default function(range, value, threshold, left, right, center) {\n if (!threshold && threshold !== 0) return center;\n\n var a = range[0],\n b = peek(range),\n t = +threshold,\n l, r;\n\n // swap endpoints if range is reversed\n if (b < a) {\n l = a; a = b; b = l;\n }\n\n // compare value to endpoints\n l = Math.abs(value - a);\n r = Math.abs(b - value);\n\n // adjust if value is within threshold distance of endpoint\n return l < r && l <= t ? left : r <= t ? right : center;\n}\n","export default function(child, parent) {\n var proto = (child.prototype = Object.create(parent.prototype));\n proto.constructor = child;\n return proto;\n}\n","/**\n * Predicate that returns true if the value lies within the span\n * of the given range. The left and right flags control the use\n * of inclusive (true) or exclusive (false) comparisons.\n */\nexport default function(value, range, left, right) {\n var r0 = range[0], r1 = range[range.length-1], t;\n if (r0 > r1) {\n t = r0;\n r0 = r1;\n r1 = t;\n }\n left = left === undefined || left;\n right = right === undefined || right;\n\n return (left ? r0 <= value : r0 < value) &&\n (right ? value <= r1 : value < r1);\n}\n","export default function(_) {\n return typeof _ === 'boolean';\n}\n","export default function(_) {\n return Object.prototype.toString.call(_) === '[object Date]';\n}\n","export default function(_) {\n return typeof _ === 'number';\n}\n","export default function(_) {\n return Object.prototype.toString.call(_) === '[object RegExp]';\n}\n","import accessor from './accessor';\nimport array from './array';\nimport splitAccessPath from './splitAccessPath';\nimport stringValue from './stringValue';\n\nexport default function(fields, flat) {\n if (fields) {\n fields = flat\n ? array(fields).map(function(f) { return f.replace(/\\\\(.)/g, '$1'); })\n : array(fields);\n }\n\n var fn = !(fields && fields.length)\n ? function() { return ''; }\n : Function('_', 'return \\'\\'+' +\n fields.map(function(f) {\n return '_[' + (flat\n ? stringValue(f)\n : splitAccessPath(f).map(stringValue).join('][')\n ) + ']';\n }).join('+\\'|\\'+') + ';');\n\n return accessor(fn, fields, 'key');\n}\n","import peek from './peek';\n\nexport default function(array, frac) {\n const lo = array[0],\n hi = peek(array),\n f = +frac;\n return !f ? lo : f === 1 ? hi : lo + f * (hi - lo);\n}\n","export default function(compare, array0, array1, output) {\n var n0 = array0.length,\n n1 = array1.length;\n\n if (!n1) return array0;\n if (!n0) return array1;\n\n var merged = output || new array0.constructor(n0 + n1),\n i0 = 0, i1 = 0, i = 0;\n\n for (; i0 0\n ? array1[i1++]\n : array0[i0++];\n }\n\n for (; i0= 0) s += str;\n return s;\n}\n","import repeat from './repeat';\n\nexport default function(str, length, padchar, align) {\n var c = padchar || ' ',\n s = str + '',\n n = length - s.length;\n\n return n <= 0 ? s\n : align === 'left' ? repeat(c, n) + s\n : align === 'center' ? repeat(c, ~~(n/2)) + s + repeat(c, Math.ceil(n/2))\n : s + repeat(c, n);\n}\n","import peek from './peek';\n\n/**\n * Return the numerical span of an array: the difference between\n * the last and first values.\n */\nexport default function(array) {\n return (peek(array) - array[0]) || 0;\n}\n","export default function(_) {\n return _ == null || _ === '' ? null : !_ || _ === 'false' || _ === '0' ? false : !!_;\n}\n","import isDate from './isDate';\nimport isNumber from './isNumber';\n\nfunction defaultParser(_) {\n return isNumber(_) ? _ : isDate(_) ? _ : Date.parse(_);\n}\n\nexport default function(_, parser) {\n parser = parser || defaultParser;\n return _ == null || _ === '' ? null : parser(_);\n}\n","export default function(_) {\n return _ == null || _ === '' ? null : _ + '';\n}\n","export default function(_) {\n for (var s={}, i=0, n=_.length; i= 0) {\n list.splice(idx, 1);\n }\n }\n return list;\n };\n\n return list;\n}\n","/**\n * Invoke and await a potentially async callback function. If\n * an error occurs, trap it and route to Dataflow.error.\n * @param {Dataflow} df - The dataflow instance\n * @param {function} callback - A callback function to invoke\n * and then await. The dataflow will be passed as the single\n * argument to the function.\n */\nexport default async function(df, callback) {\n try { await callback(df); } catch (err) { df.error(err); }\n}\n","var TUPLE_ID_KEY = Symbol('vega_id'),\n TUPLE_ID = 1;\n\n/**\n * Resets the internal tuple id counter to one.\n */\nexport function reset() {\n TUPLE_ID = 1;\n}\n\n/**\n * Checks if an input value is a registered tuple.\n * @param {*} t - The value to check.\n * @return {boolean} True if the input is a tuple, false otherwise.\n */\nexport function isTuple(t) {\n return !!(t && tupleid(t));\n}\n\n/**\n * Returns the id of a tuple.\n * @param {object} t - The input tuple.\n * @return {*} the tuple id.\n */\nexport function tupleid(t) {\n return t[TUPLE_ID_KEY];\n}\n\n/**\n * Sets the id of a tuple.\n * @param {object} t - The input tuple.\n * @param {*} id - The id value to set.\n * @return {object} the input tuple.\n */\nfunction setid(t, id) {\n t[TUPLE_ID_KEY] = id;\n return t;\n}\n\n/**\n * Ingest an object or value as a data tuple.\n * If the input value is an object, an id field will be added to it. For\n * efficiency, the input object is modified directly. A copy is not made.\n * If the input value is a literal, it will be wrapped in a new object\n * instance, with the value accessible as the 'data' property.\n * @param datum - The value to ingest.\n * @return {object} The ingested data tuple.\n */\nexport function ingest(datum) {\n var t = (datum === Object(datum)) ? datum : {data: datum};\n return tupleid(t) ? t : setid(t, TUPLE_ID++);\n}\n\n/**\n * Given a source tuple, return a derived copy.\n * @param {object} t - The source tuple.\n * @return {object} The derived tuple.\n */\nexport function derive(t) {\n return rederive(t, ingest({}));\n}\n\n/**\n * Rederive a derived tuple by copying values from the source tuple.\n * @param {object} t - The source tuple.\n * @param {object} d - The derived tuple.\n * @return {object} The derived tuple.\n */\nexport function rederive(t, d) {\n for (var k in t) d[k] = t[k];\n return d;\n}\n\n/**\n * Replace an existing tuple with a new tuple.\n * @param {object} t - The existing data tuple.\n * @param {object} d - The new tuple that replaces the old.\n * @return {object} The new tuple.\n */\nexport function replace(t, d) {\n return setid(d, tupleid(t));\n}\n","import {ingest, tupleid} from './Tuple';\nimport {array, constant, isFunction} from 'vega-util';\n\nexport function isChangeSet(v) {\n return v && v.constructor === changeset;\n}\n\nexport default function changeset() {\n var add = [], // insert tuples\n rem = [], // remove tuples\n mod = [], // modify tuples\n remp = [], // remove by predicate\n modp = [], // modify by predicate\n reflow = false;\n\n return {\n constructor: changeset,\n insert: function(t) {\n var d = array(t), i = 0, n = d.length;\n for (; i 0) {\n modify(t, f, m.value);\n pulse.modifies(f);\n }\n }\n\n // process predicate-based modifications\n for (i=0, n=modp.length; i 0) {\n modify(t, m.field, m.value);\n }\n });\n pulse.modifies(m.field);\n }\n\n // upon reflow request, populate mod with all non-removed tuples\n // otherwise, populate mod with modified tuples only\n if (reflow) {\n pulse.mod = rem.length || remp.length\n ? tuples.filter(function(t) { return cur[tupleid(t)] > 0; })\n : tuples.slice();\n } else {\n for (id in out) pulse.mod.push(out[id]);\n }\n\n return pulse;\n }\n };\n}\n","import {isArray} from 'vega-util';\n\nvar CACHE = '_:mod:_';\n\n/**\n * Hash that tracks modifications to assigned values.\n * Callers *must* use the set method to update values.\n */\nexport default function Parameters() {\n Object.defineProperty(this, CACHE, {writable: true, value: {}});\n}\n\nvar prototype = Parameters.prototype;\n\n/**\n * Set a parameter value. If the parameter value changes, the parameter\n * will be recorded as modified.\n * @param {string} name - The parameter name.\n * @param {number} index - The index into an array-value parameter. Ignored if\n * the argument is undefined, null or less than zero.\n * @param {*} value - The parameter value to set.\n * @param {boolean} [force=false] - If true, records the parameter as modified\n * even if the value is unchanged.\n * @return {Parameters} - This parameter object.\n */\nprototype.set = function(name, index, value, force) {\n var o = this,\n v = o[name],\n mod = o[CACHE];\n\n if (index != null && index >= 0) {\n if (v[index] !== value || force) {\n v[index] = value;\n mod[index + ':' + name] = -1;\n mod[name] = -1;\n }\n } else if (v !== value || force) {\n o[name] = value;\n mod[name] = isArray(value) ? 1 + value.length : -1;\n }\n\n return o;\n};\n\n/**\n * Tests if one or more parameters has been modified. If invoked with no\n * arguments, returns true if any parameter value has changed. If the first\n * argument is array, returns trues if any parameter name in the array has\n * changed. Otherwise, tests if the given name and optional array index has\n * changed.\n * @param {string} name - The parameter name to test.\n * @param {number} [index=undefined] - The parameter array index to test.\n * @return {boolean} - Returns true if a queried parameter was modified.\n */\nprototype.modified = function(name, index) {\n var mod = this[CACHE], k;\n if (!arguments.length) {\n for (k in mod) { if (mod[k]) return true; }\n return false;\n } else if (isArray(name)) {\n for (k=0; k= 0)\n ? (index + 1 < mod[name] || !!mod[index + ':' + name])\n : !!mod[name];\n};\n\n/**\n * Clears the modification records. After calling this method,\n * all parameters are considered unmodified.\n */\nprototype.clear = function() {\n this[CACHE] = {};\n return this;\n};\n","import Parameters from './Parameters';\nimport UniqueList from './util/UniqueList';\nimport {array, error, id, isArray} from 'vega-util';\n\nvar OP_ID = 0;\nvar PULSE = 'pulse';\nvar NO_PARAMS = new Parameters();\n\n// Boolean Flags\nvar SKIP = 1,\n MODIFIED = 2;\n\n/**\n * An Operator is a processing node in a dataflow graph.\n * Each operator stores a value and an optional value update function.\n * Operators can accept a hash of named parameters. Parameter values can\n * either be direct (JavaScript literals, arrays, objects) or indirect\n * (other operators whose values will be pulled dynamically). Operators\n * included as parameters will have this operator added as a dependency.\n * @constructor\n * @param {*} [init] - The initial value for this operator.\n * @param {function(object, Pulse)} [update] - An update function. Upon\n * evaluation of this operator, the update function will be invoked and the\n * return value will be used as the new value of this operator.\n * @param {object} [params] - The parameters for this operator.\n * @param {boolean} [react=true] - Flag indicating if this operator should\n * listen for changes to upstream operators included as parameters.\n * @see parameters\n */\nexport default function Operator(init, update, params, react) {\n this.id = ++OP_ID;\n this.value = init;\n this.stamp = -1;\n this.rank = -1;\n this.qrank = -1;\n this.flags = 0;\n\n if (update) {\n this._update = update;\n }\n if (params) this.parameters(params, react);\n}\n\nvar prototype = Operator.prototype;\n\n/**\n * Returns a list of target operators dependent on this operator.\n * If this list does not exist, it is created and then returned.\n * @return {UniqueList}\n */\nprototype.targets = function() {\n return this._targets || (this._targets = UniqueList(id));\n};\n\n/**\n * Sets the value of this operator.\n * @param {*} value - the value to set.\n * @return {Number} Returns 1 if the operator value has changed\n * according to strict equality, returns 0 otherwise.\n */\nprototype.set = function(value) {\n if (this.value !== value) {\n this.value = value;\n return 1;\n } else {\n return 0;\n }\n};\n\nfunction flag(bit) {\n return function(state) {\n var f = this.flags;\n if (arguments.length === 0) return !!(f & bit);\n this.flags = state ? (f | bit) : (f & ~bit);\n return this;\n };\n}\n\n/**\n * Indicates that operator evaluation should be skipped on the next pulse.\n * This operator will still propagate incoming pulses, but its update function\n * will not be invoked. The skip flag is reset after every pulse, so calling\n * this method will affect processing of the next pulse only.\n */\nprototype.skip = flag(SKIP);\n\n/**\n * Indicates that this operator's value has been modified on its most recent\n * pulse. Normally modification is checked via strict equality; however, in\n * some cases it is more efficient to update the internal state of an object.\n * In those cases, the modified flag can be used to trigger propagation. Once\n * set, the modification flag persists across pulses until unset. The flag can\n * be used with the last timestamp to test if a modification is recent.\n */\nprototype.modified = flag(MODIFIED);\n\n/**\n * Sets the parameters for this operator. The parameter values are analyzed for\n * operator instances. If found, this operator will be added as a dependency\n * of the parameterizing operator. Operator values are dynamically marshalled\n * from each operator parameter prior to evaluation. If a parameter value is\n * an array, the array will also be searched for Operator instances. However,\n * the search does not recurse into sub-arrays or object properties.\n * @param {object} params - A hash of operator parameters.\n * @param {boolean} [react=true] - A flag indicating if this operator should\n * automatically update (react) when parameter values change. In other words,\n * this flag determines if the operator registers itself as a listener on\n * any upstream operators included in the parameters.\n * @param {boolean} [initonly=false] - A flag indicating if this operator\n * should calculate an update only upon its initiatal evaluation, then\n * deregister dependencies and suppress all future update invocations.\n * @return {Operator[]} - An array of upstream dependencies.\n */\nprototype.parameters = function(params, react, initonly) {\n react = react !== false;\n var self = this,\n argval = (self._argval = self._argval || new Parameters()),\n argops = (self._argops = self._argops || []),\n deps = [],\n name, value, n, i;\n\n function add(name, index, value) {\n if (value instanceof Operator) {\n if (value !== self) {\n if (react) value.targets().add(self);\n deps.push(value);\n }\n argops.push({op:value, name:name, index:index});\n } else {\n argval.set(name, index, value);\n }\n }\n\n for (name in params) {\n value = params[name];\n\n if (name === PULSE) {\n array(value).forEach(function(op) {\n if (!(op instanceof Operator)) {\n error('Pulse parameters must be operator instances.');\n } else if (op !== self) {\n op.targets().add(self);\n deps.push(op);\n }\n });\n self.source = value;\n } else if (isArray(value)) {\n argval.set(name, -1, Array(n = value.length));\n for (i=0; i} - The source operators that should propagate\n * to the target operator.\n */\nexport default function(target, sources) {\n var targetRank = target.rank, i, n;\n\n for (i=0, n=sources.length; i pause) {\n t = now;\n return 1;\n } else {\n return 0;\n }\n });\n};\n\nprototype.debounce = function(delay) {\n var s = stream();\n\n this.targets().add(stream(null, null,\n debounce(delay, function(e) {\n var df = e.dataflow;\n s.receive(e);\n if (df && df.run) df.run();\n })\n ));\n\n return s;\n};\n\nprototype.between = function(a, b) {\n var active = false;\n a.targets().add(stream(null, null, function() { active = true; }));\n b.targets().add(stream(null, null, function() { active = false; }));\n return this.filter(function() { return active; });\n};\n","import {stream} from '../EventStream';\nimport {array} from 'vega-util';\n\n/**\n * Create a new event stream from an event source.\n * @param {object} source - The event source to monitor. The input must\n * support the addEventListener method.\n * @param {string} type - The event type.\n * @param {function(object): boolean} [filter] - Event filter function.\n * @param {function(object): *} [apply] - Event application function.\n * If provided, this function will be invoked and the result will be\n * used as the downstream event value.\n * @return {EventStream}\n */\nexport default function(source, type, filter, apply) {\n var df = this,\n s = stream(filter, apply),\n send = function(e) {\n e.dataflow = df;\n try {\n s.receive(e);\n } catch (error) {\n df.error(error);\n } finally {\n df.run();\n }\n },\n sources;\n\n if (typeof source === 'string' && typeof document !== 'undefined') {\n sources = document.querySelectorAll(source);\n } else {\n sources = array(source);\n }\n\n for (var i=0, n=sources.length; i 9999 ? \"+\" + pad(year, 6)\n : pad(year, 4);\n}\n\nfunction formatDate(date) {\n var hours = date.getUTCHours(),\n minutes = date.getUTCMinutes(),\n seconds = date.getUTCSeconds(),\n milliseconds = date.getUTCMilliseconds();\n return isNaN(date) ? \"Invalid Date\"\n : formatYear(date.getUTCFullYear(), 4) + \"-\" + pad(date.getUTCMonth() + 1, 2) + \"-\" + pad(date.getUTCDate(), 2)\n + (milliseconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \".\" + pad(milliseconds, 3) + \"Z\"\n : seconds ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \":\" + pad(seconds, 2) + \"Z\"\n : minutes || hours ? \"T\" + pad(hours, 2) + \":\" + pad(minutes, 2) + \"Z\"\n : \"\");\n}\n\nexport default function(delimiter) {\n var reFormat = new RegExp(\"[\\\"\" + delimiter + \"\\n\\r]\"),\n DELIMITER = delimiter.charCodeAt(0);\n\n function parse(text, f) {\n var convert, columns, rows = parseRows(text, function(row, i) {\n if (convert) return convert(row, i - 1);\n columns = row, convert = f ? customConverter(row, f) : objectConverter(row);\n });\n rows.columns = columns || [];\n return rows;\n }\n\n function parseRows(text, f) {\n var rows = [], // output rows\n N = text.length,\n I = 0, // current character index\n n = 0, // current line number\n t, // current token\n eof = N <= 0, // current token followed by EOF?\n eol = false; // current token followed by EOL?\n\n // Strip the trailing newline.\n if (text.charCodeAt(N - 1) === NEWLINE) --N;\n if (text.charCodeAt(N - 1) === RETURN) --N;\n\n function token() {\n if (eof) return EOF;\n if (eol) return eol = false, EOL;\n\n // Unescape quotes.\n var i, j = I, c;\n if (text.charCodeAt(j) === QUOTE) {\n while (I++ < N && text.charCodeAt(I) !== QUOTE || text.charCodeAt(++I) === QUOTE);\n if ((i = I) >= N) eof = true;\n else if ((c = text.charCodeAt(I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n return text.slice(j + 1, i - 1).replace(/\"\"/g, \"\\\"\");\n }\n\n // Find next delimiter or newline.\n while (I < N) {\n if ((c = text.charCodeAt(i = I++)) === NEWLINE) eol = true;\n else if (c === RETURN) { eol = true; if (text.charCodeAt(I) === NEWLINE) ++I; }\n else if (c !== DELIMITER) continue;\n return text.slice(j, i);\n }\n\n // Return last token before EOF.\n return eof = true, text.slice(j, N);\n }\n\n while ((t = token()) !== EOF) {\n var row = [];\n while (t !== EOL && t !== EOF) row.push(t), t = token();\n if (f && (row = f(row, n++)) == null) continue;\n rows.push(row);\n }\n\n return rows;\n }\n\n function preformatBody(rows, columns) {\n return rows.map(function(row) {\n return columns.map(function(column) {\n return formatValue(row[column]);\n }).join(delimiter);\n });\n }\n\n function format(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return [columns.map(formatValue).join(delimiter)].concat(preformatBody(rows, columns)).join(\"\\n\");\n }\n\n function formatBody(rows, columns) {\n if (columns == null) columns = inferColumns(rows);\n return preformatBody(rows, columns).join(\"\\n\");\n }\n\n function formatRows(rows) {\n return rows.map(formatRow).join(\"\\n\");\n }\n\n function formatRow(row) {\n return row.map(formatValue).join(delimiter);\n }\n\n function formatValue(value) {\n return value == null ? \"\"\n : value instanceof Date ? formatDate(value)\n : reFormat.test(value += \"\") ? \"\\\"\" + value.replace(/\"/g, \"\\\"\\\"\") + \"\\\"\"\n : value;\n }\n\n return {\n parse: parse,\n parseRows: parseRows,\n format: format,\n formatBody: formatBody,\n formatRows: formatRows\n };\n}\n","import dsv from \"./dsv\";\n\nvar csv = dsv(\",\");\n\nexport var csvParse = csv.parse;\nexport var csvParseRows = csv.parseRows;\nexport var csvFormat = csv.format;\nexport var csvFormatBody = csv.formatBody;\nexport var csvFormatRows = csv.formatRows;\n","import dsv from \"./dsv\";\n\nvar tsv = dsv(\"\\t\");\n\nexport var tsvParse = tsv.parse;\nexport var tsvParseRows = tsv.parseRows;\nexport var tsvFormat = tsv.format;\nexport var tsvFormatBody = tsv.formatBody;\nexport var tsvFormatRows = tsv.formatRows;\n","import {dsvFormat} from 'd3-dsv';\nimport {extend, stringValue} from 'vega-util';\n\nexport function delimitedFormat(delimiter) {\n const parse = function(data, format) {\n const delim = {delimiter: delimiter};\n return dsv(data, format ? extend(format, delim) : delim);\n };\n\n parse.responseType = 'text';\n\n return parse;\n}\n\nexport default function dsv(data, format) {\n if (format.header) {\n data = format.header\n .map(stringValue)\n .join(format.delimiter) + '\\n' + data;\n }\n return dsvFormat(format.delimiter).parse(data + '');\n}\n\ndsv.responseType = 'text';\n","import {field, identity, isFunction, isObject} from 'vega-util';\n\nfunction isBuffer(_) {\n return (typeof Buffer === 'function' && isFunction(Buffer.isBuffer))\n ? Buffer.isBuffer(_) : false;\n}\n\nexport default function json(data, format) {\n const prop = (format && format.property) ? field(format.property) : identity;\n return isObject(data) && !isBuffer(data)\n ? parseJSON(prop(data))\n : prop(JSON.parse(data));\n}\n\njson.responseType = 'json';\n\nfunction parseJSON(data, format) {\n return (format && format.copy)\n ? JSON.parse(JSON.stringify(data))\n : data;\n}\n","export default function(x) {\n return x;\n}\n","import identity from \"./identity\";\n\nexport default function(transform) {\n if (transform == null) return identity;\n var x0,\n y0,\n kx = transform.scale[0],\n ky = transform.scale[1],\n dx = transform.translate[0],\n dy = transform.translate[1];\n return function(input, i) {\n if (!i) x0 = y0 = 0;\n var j = 2, n = input.length, output = new Array(n);\n output[0] = (x0 += input[0]) * kx + dx;\n output[1] = (y0 += input[1]) * ky + dy;\n while (j < n) output[j] = input[j], ++j;\n return output;\n };\n}\n","export default function(array, n) {\n var t, j = array.length, i = j - n;\n while (i < --j) t = array[i], array[i++] = array[j], array[j] = t;\n}\n","import reverse from \"./reverse\";\nimport transform from \"./transform\";\n\nexport default function(topology, o) {\n return o.type === \"GeometryCollection\"\n ? {type: \"FeatureCollection\", features: o.geometries.map(function(o) { return feature(topology, o); })}\n : feature(topology, o);\n}\n\nexport function feature(topology, o) {\n var id = o.id,\n bbox = o.bbox,\n properties = o.properties == null ? {} : o.properties,\n geometry = object(topology, o);\n return id == null && bbox == null ? {type: \"Feature\", properties: properties, geometry: geometry}\n : bbox == null ? {type: \"Feature\", id: id, properties: properties, geometry: geometry}\n : {type: \"Feature\", id: id, bbox: bbox, properties: properties, geometry: geometry};\n}\n\nexport function object(topology, o) {\n var transformPoint = transform(topology.transform),\n arcs = topology.arcs;\n\n function arc(i, points) {\n if (points.length) points.pop();\n for (var a = arcs[i < 0 ? ~i : i], k = 0, n = a.length; k < n; ++k) {\n points.push(transformPoint(a[k], k));\n }\n if (i < 0) reverse(points, n);\n }\n\n function point(p) {\n return transformPoint(p);\n }\n\n function line(arcs) {\n var points = [];\n for (var i = 0, n = arcs.length; i < n; ++i) arc(arcs[i], points);\n if (points.length < 2) points.push(points[0]); // This should never happen per the specification.\n return points;\n }\n\n function ring(arcs) {\n var points = line(arcs);\n while (points.length < 4) points.push(points[0]); // This may happen if an arc has only two points.\n return points;\n }\n\n function polygon(arcs) {\n return arcs.map(ring);\n }\n\n function geometry(o) {\n var type = o.type, coordinates;\n switch (type) {\n case \"GeometryCollection\": return {type: type, geometries: o.geometries.map(geometry)};\n case \"Point\": coordinates = point(o.coordinates); break;\n case \"MultiPoint\": coordinates = o.coordinates.map(point); break;\n case \"LineString\": coordinates = line(o.arcs); break;\n case \"MultiLineString\": coordinates = o.arcs.map(line); break;\n case \"Polygon\": coordinates = polygon(o.arcs); break;\n case \"MultiPolygon\": coordinates = o.arcs.map(polygon); break;\n default: return null;\n }\n return {type: type, coordinates: coordinates};\n }\n\n return geometry(o);\n}\n","export default function(topology, arcs) {\n var stitchedArcs = {},\n fragmentByStart = {},\n fragmentByEnd = {},\n fragments = [],\n emptyIndex = -1;\n\n // Stitch empty arcs first, since they may be subsumed by other arcs.\n arcs.forEach(function(i, j) {\n var arc = topology.arcs[i < 0 ? ~i : i], t;\n if (arc.length < 3 && !arc[1][0] && !arc[1][1]) {\n t = arcs[++emptyIndex], arcs[emptyIndex] = i, arcs[j] = t;\n }\n });\n\n arcs.forEach(function(i) {\n var e = ends(i),\n start = e[0],\n end = e[1],\n f, g;\n\n if (f = fragmentByEnd[start]) {\n delete fragmentByEnd[f.end];\n f.push(i);\n f.end = end;\n if (g = fragmentByStart[end]) {\n delete fragmentByStart[g.start];\n var fg = g === f ? f : f.concat(g);\n fragmentByStart[fg.start = f.start] = fragmentByEnd[fg.end = g.end] = fg;\n } else {\n fragmentByStart[f.start] = fragmentByEnd[f.end] = f;\n }\n } else if (f = fragmentByStart[end]) {\n delete fragmentByStart[f.start];\n f.unshift(i);\n f.start = start;\n if (g = fragmentByEnd[start]) {\n delete fragmentByEnd[g.end];\n var gf = g === f ? f : g.concat(f);\n fragmentByStart[gf.start = g.start] = fragmentByEnd[gf.end = f.end] = gf;\n } else {\n fragmentByStart[f.start] = fragmentByEnd[f.end] = f;\n }\n } else {\n f = [i];\n fragmentByStart[f.start = start] = fragmentByEnd[f.end = end] = f;\n }\n });\n\n function ends(i) {\n var arc = topology.arcs[i < 0 ? ~i : i], p0 = arc[0], p1;\n if (topology.transform) p1 = [0, 0], arc.forEach(function(dp) { p1[0] += dp[0], p1[1] += dp[1]; });\n else p1 = arc[arc.length - 1];\n return i < 0 ? [p1, p0] : [p0, p1];\n }\n\n function flush(fragmentByEnd, fragmentByStart) {\n for (var k in fragmentByEnd) {\n var f = fragmentByEnd[k];\n delete fragmentByStart[f.start];\n delete f.start;\n delete f.end;\n f.forEach(function(i) { stitchedArcs[i < 0 ? ~i : i] = 1; });\n fragments.push(f);\n }\n }\n\n flush(fragmentByEnd, fragmentByStart);\n flush(fragmentByStart, fragmentByEnd);\n arcs.forEach(function(i) { if (!stitchedArcs[i < 0 ? ~i : i]) fragments.push([i]); });\n\n return fragments;\n}\n","import {object} from \"./feature\";\nimport stitch from \"./stitch\";\n\nexport default function(topology) {\n return object(topology, meshArcs.apply(this, arguments));\n}\n\nexport function meshArcs(topology, object, filter) {\n var arcs, i, n;\n if (arguments.length > 1) arcs = extractArcs(topology, object, filter);\n else for (i = 0, arcs = new Array(n = topology.arcs.length); i < n; ++i) arcs[i] = i;\n return {type: \"MultiLineString\", arcs: stitch(topology, arcs)};\n}\n\nfunction extractArcs(topology, object, filter) {\n var arcs = [],\n geomsByArc = [],\n geom;\n\n function extract0(i) {\n var j = i < 0 ? ~i : i;\n (geomsByArc[j] || (geomsByArc[j] = [])).push({i: i, g: geom});\n }\n\n function extract1(arcs) {\n arcs.forEach(extract0);\n }\n\n function extract2(arcs) {\n arcs.forEach(extract1);\n }\n\n function extract3(arcs) {\n arcs.forEach(extract2);\n }\n\n function geometry(o) {\n switch (geom = o, o.type) {\n case \"GeometryCollection\": o.geometries.forEach(geometry); break;\n case \"LineString\": extract1(o.arcs); break;\n case \"MultiLineString\": case \"Polygon\": extract2(o.arcs); break;\n case \"MultiPolygon\": extract3(o.arcs); break;\n }\n }\n\n geometry(object);\n\n geomsByArc.forEach(filter == null\n ? function(geoms) { arcs.push(geoms[0].i); }\n : function(geoms) { if (filter(geoms[0].g, geoms[geoms.length - 1].g)) arcs.push(geoms[0].i); });\n\n return arcs;\n}\n","import json from './json';\nimport {feature, mesh} from 'topojson-client';\nimport {error} from 'vega-util';\n\nconst filters = {\n interior: (a, b) => a !== b,\n exterior: (a, b) => a === b\n};\n\nexport default function topojson(data, format) {\n let method, object, property, filter;\n data = json(data, format);\n\n if (format && format.feature) {\n method = feature;\n property = format.feature;\n } else if (format && format.mesh) {\n method = mesh;\n property = format.mesh;\n filter = filters[format.filter];\n } else {\n error('Missing TopoJSON feature or mesh parameter.');\n }\n\n object = (object = data.objects[property])\n ? method(data, object, filter)\n : error('Invalid TopoJSON object: ' + property);\n\n return object && object.features || [object];\n}\n\ntopojson.responseType = 'json';\n","import {default as dsv, delimitedFormat} from './dsv';\nimport json from './json';\nimport topojson from './topojson';\n\nexport const format = {\n dsv: dsv,\n csv: delimitedFormat(','),\n tsv: delimitedFormat('\\t'),\n json: json,\n topojson: topojson\n};\n\nexport function formats(name, reader) {\n if (arguments.length > 1) {\n format[name] = reader;\n return this;\n } else {\n return format.hasOwnProperty(name) ? format[name] : null;\n }\n}\n\nexport function responseType(type) {\n const f = formats(type);\n return f && f.responseType || 'text';\n}\n","var t0 = new Date,\n t1 = new Date;\n\nexport default function newInterval(floori, offseti, count, field) {\n\n function interval(date) {\n return floori(date = new Date(+date)), date;\n }\n\n interval.floor = interval;\n\n interval.ceil = function(date) {\n return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;\n };\n\n interval.round = function(date) {\n var d0 = interval(date),\n d1 = interval.ceil(date);\n return date - d0 < d1 - date ? d0 : d1;\n };\n\n interval.offset = function(date, step) {\n return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;\n };\n\n interval.range = function(start, stop, step) {\n var range = [], previous;\n start = interval.ceil(start);\n step = step == null ? 1 : Math.floor(step);\n if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date\n do range.push(previous = new Date(+start)), offseti(start, step), floori(start);\n while (previous < start && start < stop);\n return range;\n };\n\n interval.filter = function(test) {\n return newInterval(function(date) {\n if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);\n }, function(date, step) {\n if (date >= date) {\n if (step < 0) while (++step <= 0) {\n while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty\n } else while (--step >= 0) {\n while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty\n }\n }\n });\n };\n\n if (count) {\n interval.count = function(start, end) {\n t0.setTime(+start), t1.setTime(+end);\n floori(t0), floori(t1);\n return Math.floor(count(t0, t1));\n };\n\n interval.every = function(step) {\n step = Math.floor(step);\n return !isFinite(step) || !(step > 0) ? null\n : !(step > 1) ? interval\n : interval.filter(field\n ? function(d) { return field(d) % step === 0; }\n : function(d) { return interval.count(0, d) % step === 0; });\n };\n }\n\n return interval;\n}\n","import interval from \"./interval\";\n\nvar millisecond = interval(function() {\n // noop\n}, function(date, step) {\n date.setTime(+date + step);\n}, function(start, end) {\n return end - start;\n});\n\n// An optimized implementation for this simple case.\nmillisecond.every = function(k) {\n k = Math.floor(k);\n if (!isFinite(k) || !(k > 0)) return null;\n if (!(k > 1)) return millisecond;\n return interval(function(date) {\n date.setTime(Math.floor(date / k) * k);\n }, function(date, step) {\n date.setTime(+date + step * k);\n }, function(start, end) {\n return (end - start) / k;\n });\n};\n\nexport default millisecond;\nexport var milliseconds = millisecond.range;\n","export var durationSecond = 1e3;\nexport var durationMinute = 6e4;\nexport var durationHour = 36e5;\nexport var durationDay = 864e5;\nexport var durationWeek = 6048e5;\n","import interval from \"./interval\";\nimport {durationSecond} from \"./duration\";\n\nvar second = interval(function(date) {\n date.setTime(date - date.getMilliseconds());\n}, function(date, step) {\n date.setTime(+date + step * durationSecond);\n}, function(start, end) {\n return (end - start) / durationSecond;\n}, function(date) {\n return date.getUTCSeconds();\n});\n\nexport default second;\nexport var seconds = second.range;\n","import interval from \"./interval\";\nimport {durationMinute, durationSecond} from \"./duration\";\n\nvar minute = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getMinutes();\n});\n\nexport default minute;\nexport var minutes = minute.range;\n","import interval from \"./interval\";\nimport {durationHour, durationMinute, durationSecond} from \"./duration\";\n\nvar hour = interval(function(date) {\n date.setTime(date - date.getMilliseconds() - date.getSeconds() * durationSecond - date.getMinutes() * durationMinute);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getHours();\n});\n\nexport default hour;\nexport var hours = hour.range;\n","import interval from \"./interval\";\nimport {durationDay, durationMinute} from \"./duration\";\n\nvar day = interval(function(date) {\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setDate(date.getDate() + step);\n}, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;\n}, function(date) {\n return date.getDate() - 1;\n});\n\nexport default day;\nexport var days = day.range;\n","import interval from \"./interval\";\nimport {durationMinute, durationWeek} from \"./duration\";\n\nfunction weekday(i) {\n return interval(function(date) {\n date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setDate(date.getDate() + step * 7);\n }, function(start, end) {\n return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;\n });\n}\n\nexport var sunday = weekday(0);\nexport var monday = weekday(1);\nexport var tuesday = weekday(2);\nexport var wednesday = weekday(3);\nexport var thursday = weekday(4);\nexport var friday = weekday(5);\nexport var saturday = weekday(6);\n\nexport var sundays = sunday.range;\nexport var mondays = monday.range;\nexport var tuesdays = tuesday.range;\nexport var wednesdays = wednesday.range;\nexport var thursdays = thursday.range;\nexport var fridays = friday.range;\nexport var saturdays = saturday.range;\n","import interval from \"./interval\";\n\nvar month = interval(function(date) {\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setMonth(date.getMonth() + step);\n}, function(start, end) {\n return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;\n}, function(date) {\n return date.getMonth();\n});\n\nexport default month;\nexport var months = month.range;\n","import interval from \"./interval\";\n\nvar year = interval(function(date) {\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setFullYear(date.getFullYear() + step);\n}, function(start, end) {\n return end.getFullYear() - start.getFullYear();\n}, function(date) {\n return date.getFullYear();\n});\n\n// An optimized implementation for this simple case.\nyear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setFullYear(Math.floor(date.getFullYear() / k) * k);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setFullYear(date.getFullYear() + step * k);\n });\n};\n\nexport default year;\nexport var years = year.range;\n","import interval from \"./interval\";\nimport {durationMinute} from \"./duration\";\n\nvar utcMinute = interval(function(date) {\n date.setUTCSeconds(0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationMinute);\n}, function(start, end) {\n return (end - start) / durationMinute;\n}, function(date) {\n return date.getUTCMinutes();\n});\n\nexport default utcMinute;\nexport var utcMinutes = utcMinute.range;\n","import interval from \"./interval\";\nimport {durationHour} from \"./duration\";\n\nvar utcHour = interval(function(date) {\n date.setUTCMinutes(0, 0, 0);\n}, function(date, step) {\n date.setTime(+date + step * durationHour);\n}, function(start, end) {\n return (end - start) / durationHour;\n}, function(date) {\n return date.getUTCHours();\n});\n\nexport default utcHour;\nexport var utcHours = utcHour.range;\n","import interval from \"./interval\";\nimport {durationDay} from \"./duration\";\n\nvar utcDay = interval(function(date) {\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step);\n}, function(start, end) {\n return (end - start) / durationDay;\n}, function(date) {\n return date.getUTCDate() - 1;\n});\n\nexport default utcDay;\nexport var utcDays = utcDay.range;\n","import interval from \"./interval\";\nimport {durationWeek} from \"./duration\";\n\nfunction utcWeekday(i) {\n return interval(function(date) {\n date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCDate(date.getUTCDate() + step * 7);\n }, function(start, end) {\n return (end - start) / durationWeek;\n });\n}\n\nexport var utcSunday = utcWeekday(0);\nexport var utcMonday = utcWeekday(1);\nexport var utcTuesday = utcWeekday(2);\nexport var utcWednesday = utcWeekday(3);\nexport var utcThursday = utcWeekday(4);\nexport var utcFriday = utcWeekday(5);\nexport var utcSaturday = utcWeekday(6);\n\nexport var utcSundays = utcSunday.range;\nexport var utcMondays = utcMonday.range;\nexport var utcTuesdays = utcTuesday.range;\nexport var utcWednesdays = utcWednesday.range;\nexport var utcThursdays = utcThursday.range;\nexport var utcFridays = utcFriday.range;\nexport var utcSaturdays = utcSaturday.range;\n","import interval from \"./interval\";\n\nvar utcMonth = interval(function(date) {\n date.setUTCDate(1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCMonth(date.getUTCMonth() + step);\n}, function(start, end) {\n return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;\n}, function(date) {\n return date.getUTCMonth();\n});\n\nexport default utcMonth;\nexport var utcMonths = utcMonth.range;\n","import interval from \"./interval\";\n\nvar utcYear = interval(function(date) {\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n}, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step);\n}, function(start, end) {\n return end.getUTCFullYear() - start.getUTCFullYear();\n}, function(date) {\n return date.getUTCFullYear();\n});\n\n// An optimized implementation for this simple case.\nutcYear.every = function(k) {\n return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : interval(function(date) {\n date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);\n date.setUTCMonth(0, 1);\n date.setUTCHours(0, 0, 0, 0);\n }, function(date, step) {\n date.setUTCFullYear(date.getUTCFullYear() + step * k);\n });\n};\n\nexport default utcYear;\nexport var utcYears = utcYear.range;\n","import {\n timeDay,\n timeSunday,\n timeMonday,\n timeThursday,\n timeYear,\n utcDay,\n utcSunday,\n utcMonday,\n utcThursday,\n utcYear\n} from \"d3-time\";\n\nfunction localDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(-1, d.m, d.d, d.H, d.M, d.S, d.L);\n date.setFullYear(d.y);\n return date;\n }\n return new Date(d.y, d.m, d.d, d.H, d.M, d.S, d.L);\n}\n\nfunction utcDate(d) {\n if (0 <= d.y && d.y < 100) {\n var date = new Date(Date.UTC(-1, d.m, d.d, d.H, d.M, d.S, d.L));\n date.setUTCFullYear(d.y);\n return date;\n }\n return new Date(Date.UTC(d.y, d.m, d.d, d.H, d.M, d.S, d.L));\n}\n\nfunction newYear(y) {\n return {y: y, m: 0, d: 1, H: 0, M: 0, S: 0, L: 0};\n}\n\nexport default function formatLocale(locale) {\n var locale_dateTime = locale.dateTime,\n locale_date = locale.date,\n locale_time = locale.time,\n locale_periods = locale.periods,\n locale_weekdays = locale.days,\n locale_shortWeekdays = locale.shortDays,\n locale_months = locale.months,\n locale_shortMonths = locale.shortMonths;\n\n var periodRe = formatRe(locale_periods),\n periodLookup = formatLookup(locale_periods),\n weekdayRe = formatRe(locale_weekdays),\n weekdayLookup = formatLookup(locale_weekdays),\n shortWeekdayRe = formatRe(locale_shortWeekdays),\n shortWeekdayLookup = formatLookup(locale_shortWeekdays),\n monthRe = formatRe(locale_months),\n monthLookup = formatLookup(locale_months),\n shortMonthRe = formatRe(locale_shortMonths),\n shortMonthLookup = formatLookup(locale_shortMonths);\n\n var formats = {\n \"a\": formatShortWeekday,\n \"A\": formatWeekday,\n \"b\": formatShortMonth,\n \"B\": formatMonth,\n \"c\": null,\n \"d\": formatDayOfMonth,\n \"e\": formatDayOfMonth,\n \"f\": formatMicroseconds,\n \"H\": formatHour24,\n \"I\": formatHour12,\n \"j\": formatDayOfYear,\n \"L\": formatMilliseconds,\n \"m\": formatMonthNumber,\n \"M\": formatMinutes,\n \"p\": formatPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatSeconds,\n \"u\": formatWeekdayNumberMonday,\n \"U\": formatWeekNumberSunday,\n \"V\": formatWeekNumberISO,\n \"w\": formatWeekdayNumberSunday,\n \"W\": formatWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatYear,\n \"Y\": formatFullYear,\n \"Z\": formatZone,\n \"%\": formatLiteralPercent\n };\n\n var utcFormats = {\n \"a\": formatUTCShortWeekday,\n \"A\": formatUTCWeekday,\n \"b\": formatUTCShortMonth,\n \"B\": formatUTCMonth,\n \"c\": null,\n \"d\": formatUTCDayOfMonth,\n \"e\": formatUTCDayOfMonth,\n \"f\": formatUTCMicroseconds,\n \"H\": formatUTCHour24,\n \"I\": formatUTCHour12,\n \"j\": formatUTCDayOfYear,\n \"L\": formatUTCMilliseconds,\n \"m\": formatUTCMonthNumber,\n \"M\": formatUTCMinutes,\n \"p\": formatUTCPeriod,\n \"Q\": formatUnixTimestamp,\n \"s\": formatUnixTimestampSeconds,\n \"S\": formatUTCSeconds,\n \"u\": formatUTCWeekdayNumberMonday,\n \"U\": formatUTCWeekNumberSunday,\n \"V\": formatUTCWeekNumberISO,\n \"w\": formatUTCWeekdayNumberSunday,\n \"W\": formatUTCWeekNumberMonday,\n \"x\": null,\n \"X\": null,\n \"y\": formatUTCYear,\n \"Y\": formatUTCFullYear,\n \"Z\": formatUTCZone,\n \"%\": formatLiteralPercent\n };\n\n var parses = {\n \"a\": parseShortWeekday,\n \"A\": parseWeekday,\n \"b\": parseShortMonth,\n \"B\": parseMonth,\n \"c\": parseLocaleDateTime,\n \"d\": parseDayOfMonth,\n \"e\": parseDayOfMonth,\n \"f\": parseMicroseconds,\n \"H\": parseHour24,\n \"I\": parseHour24,\n \"j\": parseDayOfYear,\n \"L\": parseMilliseconds,\n \"m\": parseMonthNumber,\n \"M\": parseMinutes,\n \"p\": parsePeriod,\n \"Q\": parseUnixTimestamp,\n \"s\": parseUnixTimestampSeconds,\n \"S\": parseSeconds,\n \"u\": parseWeekdayNumberMonday,\n \"U\": parseWeekNumberSunday,\n \"V\": parseWeekNumberISO,\n \"w\": parseWeekdayNumberSunday,\n \"W\": parseWeekNumberMonday,\n \"x\": parseLocaleDate,\n \"X\": parseLocaleTime,\n \"y\": parseYear,\n \"Y\": parseFullYear,\n \"Z\": parseZone,\n \"%\": parseLiteralPercent\n };\n\n // These recursive directive definitions must be deferred.\n formats.x = newFormat(locale_date, formats);\n formats.X = newFormat(locale_time, formats);\n formats.c = newFormat(locale_dateTime, formats);\n utcFormats.x = newFormat(locale_date, utcFormats);\n utcFormats.X = newFormat(locale_time, utcFormats);\n utcFormats.c = newFormat(locale_dateTime, utcFormats);\n\n function newFormat(specifier, formats) {\n return function(date) {\n var string = [],\n i = -1,\n j = 0,\n n = specifier.length,\n c,\n pad,\n format;\n\n if (!(date instanceof Date)) date = new Date(+date);\n\n while (++i < n) {\n if (specifier.charCodeAt(i) === 37) {\n string.push(specifier.slice(j, i));\n if ((pad = pads[c = specifier.charAt(++i)]) != null) c = specifier.charAt(++i);\n else pad = c === \"e\" ? \" \" : \"0\";\n if (format = formats[c]) c = format(date, pad);\n string.push(c);\n j = i + 1;\n }\n }\n\n string.push(specifier.slice(j, i));\n return string.join(\"\");\n };\n }\n\n function newParse(specifier, newDate) {\n return function(string) {\n var d = newYear(1900),\n i = parseSpecifier(d, specifier, string += \"\", 0),\n week, day;\n if (i != string.length) return null;\n\n // If a UNIX timestamp is specified, return it.\n if (\"Q\" in d) return new Date(d.Q);\n\n // The am-pm flag is 0 for AM, and 1 for PM.\n if (\"p\" in d) d.H = d.H % 12 + d.p * 12;\n\n // Convert day-of-week and week-of-year to day-of-year.\n if (\"V\" in d) {\n if (d.V < 1 || d.V > 53) return null;\n if (!(\"w\" in d)) d.w = 1;\n if (\"Z\" in d) {\n week = utcDate(newYear(d.y)), day = week.getUTCDay();\n week = day > 4 || day === 0 ? utcMonday.ceil(week) : utcMonday(week);\n week = utcDay.offset(week, (d.V - 1) * 7);\n d.y = week.getUTCFullYear();\n d.m = week.getUTCMonth();\n d.d = week.getUTCDate() + (d.w + 6) % 7;\n } else {\n week = newDate(newYear(d.y)), day = week.getDay();\n week = day > 4 || day === 0 ? timeMonday.ceil(week) : timeMonday(week);\n week = timeDay.offset(week, (d.V - 1) * 7);\n d.y = week.getFullYear();\n d.m = week.getMonth();\n d.d = week.getDate() + (d.w + 6) % 7;\n }\n } else if (\"W\" in d || \"U\" in d) {\n if (!(\"w\" in d)) d.w = \"u\" in d ? d.u % 7 : \"W\" in d ? 1 : 0;\n day = \"Z\" in d ? utcDate(newYear(d.y)).getUTCDay() : newDate(newYear(d.y)).getDay();\n d.m = 0;\n d.d = \"W\" in d ? (d.w + 6) % 7 + d.W * 7 - (day + 5) % 7 : d.w + d.U * 7 - (day + 6) % 7;\n }\n\n // If a time zone is specified, all fields are interpreted as UTC and then\n // offset according to the specified time zone.\n if (\"Z\" in d) {\n d.H += d.Z / 100 | 0;\n d.M += d.Z % 100;\n return utcDate(d);\n }\n\n // Otherwise, all fields are in local time.\n return newDate(d);\n };\n }\n\n function parseSpecifier(d, specifier, string, j) {\n var i = 0,\n n = specifier.length,\n m = string.length,\n c,\n parse;\n\n while (i < n) {\n if (j >= m) return -1;\n c = specifier.charCodeAt(i++);\n if (c === 37) {\n c = specifier.charAt(i++);\n parse = parses[c in pads ? specifier.charAt(i++) : c];\n if (!parse || ((j = parse(d, string, j)) < 0)) return -1;\n } else if (c != string.charCodeAt(j++)) {\n return -1;\n }\n }\n\n return j;\n }\n\n function parsePeriod(d, string, i) {\n var n = periodRe.exec(string.slice(i));\n return n ? (d.p = periodLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortWeekday(d, string, i) {\n var n = shortWeekdayRe.exec(string.slice(i));\n return n ? (d.w = shortWeekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseWeekday(d, string, i) {\n var n = weekdayRe.exec(string.slice(i));\n return n ? (d.w = weekdayLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseShortMonth(d, string, i) {\n var n = shortMonthRe.exec(string.slice(i));\n return n ? (d.m = shortMonthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseMonth(d, string, i) {\n var n = monthRe.exec(string.slice(i));\n return n ? (d.m = monthLookup[n[0].toLowerCase()], i + n[0].length) : -1;\n }\n\n function parseLocaleDateTime(d, string, i) {\n return parseSpecifier(d, locale_dateTime, string, i);\n }\n\n function parseLocaleDate(d, string, i) {\n return parseSpecifier(d, locale_date, string, i);\n }\n\n function parseLocaleTime(d, string, i) {\n return parseSpecifier(d, locale_time, string, i);\n }\n\n function formatShortWeekday(d) {\n return locale_shortWeekdays[d.getDay()];\n }\n\n function formatWeekday(d) {\n return locale_weekdays[d.getDay()];\n }\n\n function formatShortMonth(d) {\n return locale_shortMonths[d.getMonth()];\n }\n\n function formatMonth(d) {\n return locale_months[d.getMonth()];\n }\n\n function formatPeriod(d) {\n return locale_periods[+(d.getHours() >= 12)];\n }\n\n function formatUTCShortWeekday(d) {\n return locale_shortWeekdays[d.getUTCDay()];\n }\n\n function formatUTCWeekday(d) {\n return locale_weekdays[d.getUTCDay()];\n }\n\n function formatUTCShortMonth(d) {\n return locale_shortMonths[d.getUTCMonth()];\n }\n\n function formatUTCMonth(d) {\n return locale_months[d.getUTCMonth()];\n }\n\n function formatUTCPeriod(d) {\n return locale_periods[+(d.getUTCHours() >= 12)];\n }\n\n return {\n format: function(specifier) {\n var f = newFormat(specifier += \"\", formats);\n f.toString = function() { return specifier; };\n return f;\n },\n parse: function(specifier) {\n var p = newParse(specifier += \"\", localDate);\n p.toString = function() { return specifier; };\n return p;\n },\n utcFormat: function(specifier) {\n var f = newFormat(specifier += \"\", utcFormats);\n f.toString = function() { return specifier; };\n return f;\n },\n utcParse: function(specifier) {\n var p = newParse(specifier, utcDate);\n p.toString = function() { return specifier; };\n return p;\n }\n };\n}\n\nvar pads = {\"-\": \"\", \"_\": \" \", \"0\": \"0\"},\n numberRe = /^\\s*\\d+/, // note: ignores next directive\n percentRe = /^%/,\n requoteRe = /[\\\\^$*+?|[\\]().{}]/g;\n\nfunction pad(value, fill, width) {\n var sign = value < 0 ? \"-\" : \"\",\n string = (sign ? -value : value) + \"\",\n length = string.length;\n return sign + (length < width ? new Array(width - length + 1).join(fill) + string : string);\n}\n\nfunction requote(s) {\n return s.replace(requoteRe, \"\\\\$&\");\n}\n\nfunction formatRe(names) {\n return new RegExp(\"^(?:\" + names.map(requote).join(\"|\") + \")\", \"i\");\n}\n\nfunction formatLookup(names) {\n var map = {}, i = -1, n = names.length;\n while (++i < n) map[names[i].toLowerCase()] = i;\n return map;\n}\n\nfunction parseWeekdayNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.w = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekdayNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 1));\n return n ? (d.u = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberSunday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.U = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberISO(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.V = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseWeekNumberMonday(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.W = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseFullYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 4));\n return n ? (d.y = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.y = +n[0] + (+n[0] > 68 ? 1900 : 2000), i + n[0].length) : -1;\n}\n\nfunction parseZone(d, string, i) {\n var n = /^(Z)|([+-]\\d\\d)(?::?(\\d\\d))?/.exec(string.slice(i, i + 6));\n return n ? (d.Z = n[1] ? 0 : -(n[2] + (n[3] || \"00\")), i + n[0].length) : -1;\n}\n\nfunction parseMonthNumber(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.m = n[0] - 1, i + n[0].length) : -1;\n}\n\nfunction parseDayOfMonth(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseDayOfYear(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.m = 0, d.d = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseHour24(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.H = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMinutes(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.M = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 2));\n return n ? (d.S = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMilliseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 3));\n return n ? (d.L = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseMicroseconds(d, string, i) {\n var n = numberRe.exec(string.slice(i, i + 6));\n return n ? (d.L = Math.floor(n[0] / 1000), i + n[0].length) : -1;\n}\n\nfunction parseLiteralPercent(d, string, i) {\n var n = percentRe.exec(string.slice(i, i + 1));\n return n ? i + n[0].length : -1;\n}\n\nfunction parseUnixTimestamp(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = +n[0], i + n[0].length) : -1;\n}\n\nfunction parseUnixTimestampSeconds(d, string, i) {\n var n = numberRe.exec(string.slice(i));\n return n ? (d.Q = (+n[0]) * 1000, i + n[0].length) : -1;\n}\n\nfunction formatDayOfMonth(d, p) {\n return pad(d.getDate(), p, 2);\n}\n\nfunction formatHour24(d, p) {\n return pad(d.getHours(), p, 2);\n}\n\nfunction formatHour12(d, p) {\n return pad(d.getHours() % 12 || 12, p, 2);\n}\n\nfunction formatDayOfYear(d, p) {\n return pad(1 + timeDay.count(timeYear(d), d), p, 3);\n}\n\nfunction formatMilliseconds(d, p) {\n return pad(d.getMilliseconds(), p, 3);\n}\n\nfunction formatMicroseconds(d, p) {\n return formatMilliseconds(d, p) + \"000\";\n}\n\nfunction formatMonthNumber(d, p) {\n return pad(d.getMonth() + 1, p, 2);\n}\n\nfunction formatMinutes(d, p) {\n return pad(d.getMinutes(), p, 2);\n}\n\nfunction formatSeconds(d, p) {\n return pad(d.getSeconds(), p, 2);\n}\n\nfunction formatWeekdayNumberMonday(d) {\n var day = d.getDay();\n return day === 0 ? 7 : day;\n}\n\nfunction formatWeekNumberSunday(d, p) {\n return pad(timeSunday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatWeekNumberISO(d, p) {\n var day = d.getDay();\n d = (day >= 4 || day === 0) ? timeThursday(d) : timeThursday.ceil(d);\n return pad(timeThursday.count(timeYear(d), d) + (timeYear(d).getDay() === 4), p, 2);\n}\n\nfunction formatWeekdayNumberSunday(d) {\n return d.getDay();\n}\n\nfunction formatWeekNumberMonday(d, p) {\n return pad(timeMonday.count(timeYear(d), d), p, 2);\n}\n\nfunction formatYear(d, p) {\n return pad(d.getFullYear() % 100, p, 2);\n}\n\nfunction formatFullYear(d, p) {\n return pad(d.getFullYear() % 10000, p, 4);\n}\n\nfunction formatZone(d) {\n var z = d.getTimezoneOffset();\n return (z > 0 ? \"-\" : (z *= -1, \"+\"))\n + pad(z / 60 | 0, \"0\", 2)\n + pad(z % 60, \"0\", 2);\n}\n\nfunction formatUTCDayOfMonth(d, p) {\n return pad(d.getUTCDate(), p, 2);\n}\n\nfunction formatUTCHour24(d, p) {\n return pad(d.getUTCHours(), p, 2);\n}\n\nfunction formatUTCHour12(d, p) {\n return pad(d.getUTCHours() % 12 || 12, p, 2);\n}\n\nfunction formatUTCDayOfYear(d, p) {\n return pad(1 + utcDay.count(utcYear(d), d), p, 3);\n}\n\nfunction formatUTCMilliseconds(d, p) {\n return pad(d.getUTCMilliseconds(), p, 3);\n}\n\nfunction formatUTCMicroseconds(d, p) {\n return formatUTCMilliseconds(d, p) + \"000\";\n}\n\nfunction formatUTCMonthNumber(d, p) {\n return pad(d.getUTCMonth() + 1, p, 2);\n}\n\nfunction formatUTCMinutes(d, p) {\n return pad(d.getUTCMinutes(), p, 2);\n}\n\nfunction formatUTCSeconds(d, p) {\n return pad(d.getUTCSeconds(), p, 2);\n}\n\nfunction formatUTCWeekdayNumberMonday(d) {\n var dow = d.getUTCDay();\n return dow === 0 ? 7 : dow;\n}\n\nfunction formatUTCWeekNumberSunday(d, p) {\n return pad(utcSunday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCWeekNumberISO(d, p) {\n var day = d.getUTCDay();\n d = (day >= 4 || day === 0) ? utcThursday(d) : utcThursday.ceil(d);\n return pad(utcThursday.count(utcYear(d), d) + (utcYear(d).getUTCDay() === 4), p, 2);\n}\n\nfunction formatUTCWeekdayNumberSunday(d) {\n return d.getUTCDay();\n}\n\nfunction formatUTCWeekNumberMonday(d, p) {\n return pad(utcMonday.count(utcYear(d), d), p, 2);\n}\n\nfunction formatUTCYear(d, p) {\n return pad(d.getUTCFullYear() % 100, p, 2);\n}\n\nfunction formatUTCFullYear(d, p) {\n return pad(d.getUTCFullYear() % 10000, p, 4);\n}\n\nfunction formatUTCZone() {\n return \"+0000\";\n}\n\nfunction formatLiteralPercent() {\n return \"%\";\n}\n\nfunction formatUnixTimestamp(d) {\n return +d;\n}\n\nfunction formatUnixTimestampSeconds(d) {\n return Math.floor(+d / 1000);\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var timeFormat;\nexport var timeParse;\nexport var utcFormat;\nexport var utcParse;\n\ndefaultLocale({\n dateTime: \"%x, %X\",\n date: \"%-m/%-d/%Y\",\n time: \"%-I:%M:%S %p\",\n periods: [\"AM\", \"PM\"],\n days: [\"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\"],\n shortDays: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n months: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\", \"August\", \"September\", \"October\", \"November\", \"December\"],\n shortMonths: [\"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n timeFormat = locale.format;\n timeParse = locale.parse;\n utcFormat = locale.utcFormat;\n utcParse = locale.utcParse;\n return locale;\n}\n","import {utcFormat} from \"./defaultLocale\";\n\nexport var isoSpecifier = \"%Y-%m-%dT%H:%M:%S.%LZ\";\n\nfunction formatIsoNative(date) {\n return date.toISOString();\n}\n\nvar formatIso = Date.prototype.toISOString\n ? formatIsoNative\n : utcFormat(isoSpecifier);\n\nexport default formatIso;\n","import {isoSpecifier} from \"./isoFormat\";\nimport {utcParse} from \"./defaultLocale\";\n\nfunction parseIsoNative(string) {\n var date = new Date(string);\n return isNaN(date) ? null : date;\n}\n\nvar parseIso = +new Date(\"2000-01-01T00:00:00.000Z\")\n ? parseIsoNative\n : utcParse(isoSpecifier);\n\nexport default parseIso;\n","import {inferTypes, typeParsers} from './type';\nimport {formats} from './formats/index';\nimport {error} from 'vega-util';\nimport {timeParse, utcParse} from 'd3-time-format';\n\nexport default function(data, schema, dateParse) {\n schema = schema || {};\n\n const reader = formats(schema.type || 'json');\n if (!reader) error('Unknown data format type: ' + schema.type);\n\n data = reader(data, schema);\n if (schema.parse) parse(data, schema.parse, dateParse);\n\n if (data.hasOwnProperty('columns')) delete data.columns;\n return data;\n}\n\nfunction parse(data, types, dateParse) {\n if (!data.length) return; // early exit for empty data\n\n dateParse = dateParse || timeParse;\n\n var fields = data.columns || Object.keys(data[0]),\n parsers, datum, field, i, j, n, m;\n\n if (types === 'auto') types = inferTypes(data, fields);\n\n fields = Object.keys(types);\n parsers = fields.map(function(field) {\n var type = types[field],\n parts, pattern;\n\n if (type && (type.indexOf('date:') === 0 || type.indexOf('utc:') === 0)) {\n parts = type.split(/:(.+)?/, 2); // split on first :\n pattern = parts[1];\n\n if ((pattern[0] === '\\'' && pattern[pattern.length-1] === '\\'') ||\n (pattern[0] === '\"' && pattern[pattern.length-1] === '\"')) {\n pattern = pattern.slice(1, -1);\n }\n\n return parts[0] === 'utc' ? utcParse(pattern) : dateParse(pattern);\n }\n\n if (!typeParsers[type]) {\n throw Error('Illegal format pattern: ' + field + ':' + type);\n }\n\n return typeParsers[type];\n });\n\n for (i=0, n=data.length, m=fields.length; i df.touch(target(e));\n } else if (isFunction(update)) {\n op = new Operator(null, update, params, false);\n func = e => {\n op.evaluate(e);\n const t = target(e), v = op.value;\n isChangeSet(v) ? df.pulse(t, v, options) : df.update(t, v, opt);\n };\n } else {\n func = e => df.update(target(e), update, opt);\n }\n\n stream.apply(func);\n}\n\nfunction onOperator(df, source, target, update, params, options) {\n if (update === undefined) {\n source.targets().add(target);\n } else {\n const opt = options || {},\n op = new Operator(null, updater(target, update), params, false);\n op.modified(opt.force);\n op.rank = source.rank; // immediately follow source\n source.targets().add(op); // add dependency\n\n if (target) {\n op.skip(true); // skip first invocation\n op.value = target.value; // initialize value\n op.targets().add(target); // chain dependencies\n df.connect(target, [op]); // rerank as needed, #1672\n }\n }\n}\n\nfunction updater(target, update) {\n update = isFunction(update) ? update : constant(update);\n return target\n ? function(_, pulse) {\n const value = update(_, pulse);\n if (!target.skip()) {\n target.skip(value !== this.value).value = value;\n }\n return value;\n }\n : update;\n}\n","import {error} from 'vega-util';\n\n/**\n * Assigns a rank to an operator. Ranks are assigned in increasing order\n * by incrementing an internal rank counter.\n * @param {Operator} op - The operator to assign a rank.\n */\nexport function rank(op) {\n op.rank = ++this._rank;\n}\n\n/**\n * Re-ranks an operator and all downstream target dependencies. This\n * is necessary when upstream dependencies of higher rank are added to\n * a target operator.\n * @param {Operator} op - The operator to re-rank.\n */\nexport function rerank(op) {\n var queue = [op],\n cur, list, i;\n\n while (queue.length) {\n this.rank(cur = queue.pop());\n if (list = cur._targets) {\n for (i=list.length; --i >= 0;) {\n queue.push(cur = list[i]);\n if (cur === op) error('Cycle detected in dataflow graph.');\n }\n }\n }\n}\n","import {tupleid} from './Tuple';\nimport {array, isArray, visitArray} from 'vega-util';\n\n/**\n * Sentinel value indicating pulse propagation should stop.\n */\nexport var StopPropagation = {};\n\n// Pulse visit type flags\nvar ADD = (1 << 0),\n REM = (1 << 1),\n MOD = (1 << 2),\n ADD_REM = ADD | REM,\n ADD_MOD = ADD | MOD,\n ALL = ADD | REM | MOD,\n REFLOW = (1 << 3),\n SOURCE = (1 << 4),\n NO_SOURCE = (1 << 5),\n NO_FIELDS = (1 << 6);\n\n/**\n * A Pulse enables inter-operator communication during a run of the\n * dataflow graph. In addition to the current timestamp, a pulse may also\n * contain a change-set of added, removed or modified data tuples, as well as\n * a pointer to a full backing data source. Tuple change sets may not\n * be fully materialized; for example, to prevent needless array creation\n * a change set may include larger arrays and corresponding filter functions.\n * The pulse provides a {@link visit} method to enable proper and efficient\n * iteration over requested data tuples.\n *\n * In addition, each pulse can track modification flags for data tuple fields.\n * Responsible transform operators should call the {@link modifies} method to\n * indicate changes to data fields. The {@link modified} method enables\n * querying of this modification state.\n *\n * @constructor\n * @param {Dataflow} dataflow - The backing dataflow instance.\n * @param {number} stamp - The current propagation timestamp.\n * @param {string} [encode] - An optional encoding set name, which is then\n * accessible as Pulse.encode. Operators can respond to (or ignore) this\n * setting as appropriate. This parameter can be used in conjunction with\n * the Encode transform in the vega-encode module.\n */\nexport default function Pulse(dataflow, stamp, encode) {\n this.dataflow = dataflow;\n this.stamp = stamp == null ? -1 : stamp;\n this.add = [];\n this.rem = [];\n this.mod = [];\n this.fields = null;\n this.encode = encode || null;\n}\n\nvar prototype = Pulse.prototype;\n\n/**\n * Sentinel value indicating pulse propagation should stop.\n */\nprototype.StopPropagation = StopPropagation;\n\n/**\n * Boolean flag indicating ADD (added) tuples.\n */\nprototype.ADD = ADD;\n\n/**\n * Boolean flag indicating REM (removed) tuples.\n */\nprototype.REM = REM;\n\n/**\n * Boolean flag indicating MOD (modified) tuples.\n */\nprototype.MOD = MOD;\n\n/**\n * Boolean flag indicating ADD (added) and REM (removed) tuples.\n */\nprototype.ADD_REM = ADD_REM;\n\n/**\n * Boolean flag indicating ADD (added) and MOD (modified) tuples.\n */\nprototype.ADD_MOD = ADD_MOD;\n\n/**\n * Boolean flag indicating ADD, REM and MOD tuples.\n */\nprototype.ALL = ALL;\n\n/**\n * Boolean flag indicating all tuples in a data source\n * except for the ADD, REM and MOD tuples.\n */\nprototype.REFLOW = REFLOW;\n\n/**\n * Boolean flag indicating a 'pass-through' to a\n * backing data source, ignoring ADD, REM and MOD tuples.\n */\nprototype.SOURCE = SOURCE;\n\n/**\n * Boolean flag indicating that source data should be\n * suppressed when creating a forked pulse.\n */\nprototype.NO_SOURCE = NO_SOURCE;\n\n/**\n * Boolean flag indicating that field modifications should be\n * suppressed when creating a forked pulse.\n */\nprototype.NO_FIELDS = NO_FIELDS;\n\n/**\n * Creates a new pulse based on the values of this pulse.\n * The dataflow, time stamp and field modification values are copied over.\n * By default, new empty ADD, REM and MOD arrays are created.\n * @param {number} flags - Integer of boolean flags indicating which (if any)\n * tuple arrays should be copied to the new pulse. The supported flag values\n * are ADD, REM and MOD. Array references are copied directly: new array\n * instances are not created.\n * @return {Pulse} - The forked pulse instance.\n * @see init\n */\nprototype.fork = function(flags) {\n return new Pulse(this.dataflow).init(this, flags);\n};\n\n/**\n * Creates a copy of this pulse with new materialized array\n * instances for the ADD, REM, MOD, and SOURCE arrays.\n * The dataflow, time stamp and field modification values are copied over.\n * @return {Pulse} - The cloned pulse instance.\n * @see init\n */\nprototype.clone = function() {\n var p = this.fork(ALL);\n p.add = p.add.slice();\n p.rem = p.rem.slice();\n p.mod = p.mod.slice();\n if (p.source) p.source = p.source.slice();\n return p.materialize(ALL | SOURCE);\n};\n\n/**\n * Returns a pulse that adds all tuples from a backing source. This is\n * useful for cases where operators are added to a dataflow after an\n * upstream data pipeline has already been processed, ensuring that\n * new operators can observe all tuples within a stream.\n * @return {Pulse} - A pulse instance with all source tuples included\n * in the add array. If the current pulse already has all source\n * tuples in its add array, it is returned directly. If the current\n * pulse does not have a backing source, it is returned directly.\n */\nprototype.addAll = function() {\n var p = this;\n if (!this.source || this.source.length === this.add.length) {\n return p;\n } else {\n p = new Pulse(this.dataflow).init(this);\n p.add = p.source;\n return p;\n }\n};\n\n/**\n * Initialize this pulse based on the values of another pulse. This method\n * is used internally by {@link fork} to initialize a new forked tuple.\n * The dataflow, time stamp and field modification values are copied over.\n * By default, new empty ADD, REM and MOD arrays are created.\n * @param {Pulse} src - The source pulse to copy from.\n * @param {number} flags - Integer of boolean flags indicating which (if any)\n * tuple arrays should be copied to the new pulse. The supported flag values\n * are ADD, REM and MOD. Array references are copied directly: new array\n * instances are not created. By default, source data arrays are copied\n * to the new pulse. Use the NO_SOURCE flag to enforce a null source.\n * @return {Pulse} - Returns this Pulse instance.\n */\nprototype.init = function(src, flags) {\n var p = this;\n p.stamp = src.stamp;\n p.encode = src.encode;\n\n if (src.fields && !(flags & NO_FIELDS)) {\n p.fields = src.fields;\n }\n\n if (flags & ADD) {\n p.addF = src.addF;\n p.add = src.add;\n } else {\n p.addF = null;\n p.add = [];\n }\n\n if (flags & REM) {\n p.remF = src.remF;\n p.rem = src.rem;\n } else {\n p.remF = null;\n p.rem = [];\n }\n\n if (flags & MOD) {\n p.modF = src.modF;\n p.mod = src.mod;\n } else {\n p.modF = null;\n p.mod = [];\n }\n\n if (flags & NO_SOURCE) {\n p.srcF = null;\n p.source = null;\n } else {\n p.srcF = src.srcF;\n p.source = src.source;\n }\n\n return p;\n};\n\n/**\n * Schedules a function to run after pulse propagation completes.\n * @param {function} func - The function to run.\n */\nprototype.runAfter = function(func) {\n this.dataflow.runAfter(func);\n};\n\n/**\n * Indicates if tuples have been added, removed or modified.\n * @param {number} [flags] - The tuple types (ADD, REM or MOD) to query.\n * Defaults to ALL, returning true if any tuple type has changed.\n * @return {boolean} - Returns true if one or more queried tuple types have\n * changed, false otherwise.\n */\nprototype.changed = function(flags) {\n var f = flags || ALL;\n return ((f & ADD) && this.add.length)\n || ((f & REM) && this.rem.length)\n || ((f & MOD) && this.mod.length);\n};\n\n/**\n * Forces a \"reflow\" of tuple values, such that all tuples in the backing\n * source are added to the MOD set, unless already present in the ADD set.\n * @param {boolean} [fork=false] - If true, returns a forked copy of this\n * pulse, and invokes reflow on that derived pulse.\n * @return {Pulse} - The reflowed pulse instance.\n */\nprototype.reflow = function(fork) {\n if (fork) return this.fork(ALL).reflow();\n\n var len = this.add.length,\n src = this.source && this.source.length;\n if (src && src !== len) {\n this.mod = this.source;\n if (len) this.filter(MOD, filter(this, ADD));\n }\n return this;\n};\n\n/**\n * Marks one or more data field names as modified to assist dependency\n * tracking and incremental processing by transform operators.\n * @param {string|Array} _ - The field(s) to mark as modified.\n * @return {Pulse} - This pulse instance.\n */\nprototype.modifies = function(_) {\n var fields = array(_),\n hash = this.fields || (this.fields = {});\n fields.forEach(function(f) { hash[f] = true; });\n return this;\n};\n\n/**\n * Checks if one or more data fields have been modified during this pulse\n * propagation timestamp.\n * @param {string|Array} _ - The field(s) to check for modified.\n * @return {boolean} - Returns true if any of the provided fields has been\n * marked as modified, false otherwise.\n */\nprototype.modified = function(_) {\n var fields = this.fields;\n return !(this.mod.length && fields) ? false\n : !arguments.length ? !!fields\n : isArray(_) ? _.some(function(f) { return fields[f]; })\n : fields[_];\n};\n\n/**\n * Adds a filter function to one more tuple sets. Filters are applied to\n * backing tuple arrays, to determine the actual set of tuples considered\n * added, removed or modified. They can be used to delay materialization of\n * a tuple set in order to avoid expensive array copies. In addition, the\n * filter functions can serve as value transformers: unlike standard predicate\n * function (which return boolean values), Pulse filters should return the\n * actual tuple value to process. If a tuple set is already filtered, the\n * new filter function will be appended into a conjuntive ('and') query.\n * @param {number} flags - Flags indicating the tuple set(s) to filter.\n * @param {function(*):object} filter - Filter function that will be applied\n * to the tuple set array, and should return a data tuple if the value\n * should be included in the tuple set, and falsy (or null) otherwise.\n * @return {Pulse} - Returns this pulse instance.\n */\nprototype.filter = function(flags, filter) {\n var p = this;\n if (flags & ADD) p.addF = addFilter(p.addF, filter);\n if (flags & REM) p.remF = addFilter(p.remF, filter);\n if (flags & MOD) p.modF = addFilter(p.modF, filter);\n if (flags & SOURCE) p.srcF = addFilter(p.srcF, filter);\n return p;\n};\n\nfunction addFilter(a, b) {\n return a ? function(t,i) { return a(t,i) && b(t,i); } : b;\n}\n\n/**\n * Materialize one or more tuple sets in this pulse. If the tuple set(s) have\n * a registered filter function, it will be applied and the tuple set(s) will\n * be replaced with materialized tuple arrays.\n * @param {number} flags - Flags indicating the tuple set(s) to materialize.\n * @return {Pulse} - Returns this pulse instance.\n */\nprototype.materialize = function(flags) {\n flags = flags || ALL;\n var p = this;\n if ((flags & ADD) && p.addF) {\n p.add = materialize(p.add, p.addF);\n p.addF = null;\n }\n if ((flags & REM) && p.remF) {\n p.rem = materialize(p.rem, p.remF);\n p.remF = null;\n }\n if ((flags & MOD) && p.modF) {\n p.mod = materialize(p.mod, p.modF);\n p.modF = null;\n }\n if ((flags & SOURCE) && p.srcF) {\n p.source = p.source.filter(p.srcF);\n p.srcF = null;\n }\n return p;\n};\n\nfunction materialize(data, filter) {\n var out = [];\n visitArray(data, filter, function(_) { out.push(_); });\n return out;\n}\n\nfunction filter(pulse, flags) {\n var map = {};\n pulse.visit(flags, function(t) { map[tupleid(t)] = 1; });\n return function(t) { return map[tupleid(t)] ? null : t; };\n}\n\n/**\n * Visit one or more tuple sets in this pulse.\n * @param {number} flags - Flags indicating the tuple set(s) to visit.\n * Legal values are ADD, REM, MOD and SOURCE (if a backing data source\n * has been set).\n * @param {function(object):*} - Visitor function invoked per-tuple.\n * @return {Pulse} - Returns this pulse instance.\n */\nprototype.visit = function(flags, visitor) {\n var p = this, v = visitor, src, sum;\n\n if (flags & SOURCE) {\n visitArray(p.source, p.srcF, v);\n return p;\n }\n\n if (flags & ADD) visitArray(p.add, p.addF, v);\n if (flags & REM) visitArray(p.rem, p.remF, v);\n if (flags & MOD) visitArray(p.mod, p.modF, v);\n\n if ((flags & REFLOW) && (src = p.source)) {\n sum = p.add.length + p.mod.length;\n if (sum === src.length) {\n // do nothing\n } else if (sum) {\n visitArray(src, filter(p, ADD_MOD), v);\n } else {\n // if no add/rem/mod tuples, visit source\n visitArray(src, p.srcF, v);\n }\n }\n\n return p;\n};\n","import Pulse from './Pulse';\nimport {error, inherits, isArray} from 'vega-util';\n\n/**\n * Represents a set of multiple pulses. Used as input for operators\n * that accept multiple pulses at a time. Contained pulses are\n * accessible via the public \"pulses\" array property. This pulse doe\n * not carry added, removed or modified tuples directly. However,\n * the visit method can be used to traverse all such tuples contained\n * in sub-pulses with a timestamp matching this parent multi-pulse.\n * @constructor\n * @param {Dataflow} dataflow - The backing dataflow instance.\n * @param {number} stamp - The timestamp.\n * @param {Array} pulses - The sub-pulses for this multi-pulse.\n */\nexport default function MultiPulse(dataflow, stamp, pulses, encode) {\n var p = this,\n c = 0,\n pulse, hash, i, n, f;\n\n this.dataflow = dataflow;\n this.stamp = stamp;\n this.fields = null;\n this.encode = encode || null;\n this.pulses = pulses;\n\n for (i=0, n=pulses.length; i= Info) {\n dt = Date.now();\n df.debug('-- START PROPAGATION (' + stamp + ') -----');\n }\n\n // initialize priority queue, reset touched operators\n df._touched.forEach(function(op) { df._enqueue(op, true); });\n df._touched = UniqueList(id);\n\n try {\n while (df._heap.size() > 0) {\n // dequeue operator with highest priority\n op = df._heap.pop();\n\n // re-queue if rank changed\n if (op.rank !== op.qrank) { df._enqueue(op, true); continue; }\n\n // otherwise, evaluate the operator\n next = op.run(df._getPulse(op, encode));\n\n // await if operator returned a promise\n if (next.then) {\n next = await next;\n }\n\n if (level >= Debug) {\n df.debug(op.id, next === StopPropagation ? 'STOP' : next, op);\n }\n\n // propagate evaluation, enqueue dependent operators\n if (next !== StopPropagation) {\n df._pulse = next;\n if (op._targets) op._targets.forEach(op => df._enqueue(op));\n }\n\n // increment visit counter\n ++count;\n }\n } catch (err) {\n error = err;\n }\n\n // reset pulse map\n df._pulses = {};\n df._pulse = null;\n\n if (level >= Info) {\n dt = Date.now() - dt;\n df.info('> Pulse ' + stamp + ': ' + count + ' operators; ' + dt + 'ms');\n }\n\n if (error) {\n df._postrun = [];\n df.error(error);\n }\n\n // invoke callbacks queued via runAfter\n if (df._postrun.length) {\n const pr = df._postrun.sort((a, b) => b.priority - a.priority);\n df._postrun = [];\n for (let i=0; i this._running = null;\n (this._running = this.evaluate(encode, prerun, postrun))\n .then(clear, clear);\n\n return this._running;\n}\n\n/**\n * Requests dataflow evaluation and the immediately returns this dataflow\n * instance. If there are pending data loading or other asynchronous\n * operations, the dataflow will evaluate asynchronously after this method\n * has been invoked. To track when dataflow evaluation completes, use the\n * {@link runAsync} method instead. This method will raise an error if\n * invoked while the dataflow is already in the midst of evaluation.\n * @param {string} [encode] - The name of an encoding set to invoke during\n * propagation. This value is added to generated Pulse instances;\n * operators can then respond to (or ignore) this setting as appropriate.\n * This parameter can be used in conjunction with the Encode transform in\n * the vega-encode module.\n * @param {function} [prerun] - An optional callback function to invoke\n * immediately before dataflow evaluation commences.\n * @param {function} [postrun] - An optional callback function to invoke\n * after dataflow evaluation completes. The callback will be invoked\n * after those registered via {@link runAfter}.\n * @return {Dataflow} - This dataflow instance.\n */\nexport function run(encode, prerun, postrun) {\n return this._pulse ? reentrant(this)\n : (this.evaluate(encode, prerun, postrun), this);\n}\n\n/**\n * Schedules a callback function to be invoked after the current pulse\n * propagation completes. If no propagation is currently occurring,\n * the function is invoked immediately. Callbacks scheduled via runAfter\n * are invoked immediately upon completion of the current cycle, before\n * any request queued via runAsync. This method is primarily intended for\n * internal use. Third-party callers using runAfter to schedule a callback\n * that invokes {@link run} or {@link runAsync} should not use this method,\n * but instead use {@link runAsync} with prerun or postrun arguments.\n * @param {function(Dataflow)} callback - The callback function to run.\n * The callback will be invoked with this Dataflow instance as its\n * sole argument.\n * @param {boolean} enqueue - A boolean flag indicating that the\n * callback should be queued up to run after the next propagation\n * cycle, suppressing immediate invocation when propagation is not\n * currently occurring.\n * @param {number} [priority] - A priority value used to sort registered\n * callbacks to determine execution order. This argument is intended\n * for internal Vega use only.\n */\nexport function runAfter(callback, enqueue, priority) {\n if (this._pulse || enqueue) {\n // pulse propagation is currently running, queue to run after\n this._postrun.push({\n priority: priority || 0,\n callback: callback\n });\n } else {\n // pulse propagation already complete, invoke immediately\n try { callback(this); } catch (err) { this.error(err); }\n }\n}\n\n/**\n * Raise an error for re-entrant dataflow evaluation.\n */\nfunction reentrant(df) {\n df.error('Dataflow already running. Use runAsync() to chain invocations.');\n return df;\n}\n\n/**\n * Enqueue an operator into the priority queue for evaluation. The operator\n * will be enqueued if it has no registered pulse for the current cycle, or if\n * the force argument is true. Upon enqueue, this method also sets the\n * operator's qrank to the current rank value.\n * @param {Operator} op - The operator to enqueue.\n * @param {boolean} [force] - A flag indicating if the operator should be\n * forceably added to the queue, even if it has already been previously\n * enqueued during the current pulse propagation. This is useful when the\n * dataflow graph is dynamically modified and the operator rank changes.\n */\nexport function enqueue(op, force) {\n var p = !this._pulses[op.id];\n if (p) this._pulses[op.id] = this._pulse;\n if (p || force) {\n op.qrank = op.rank;\n this._heap.push(op);\n }\n}\n\n/**\n * Provide a correct pulse for evaluating an operator. If the operator has an\n * explicit source operator, we will try to pull the pulse(s) from it.\n * If there is an array of source operators, we build a multi-pulse.\n * Otherwise, we return a current pulse with correct source data.\n * If the pulse is the pulse map has an explicit target set, we use that.\n * Else if the pulse on the upstream source operator is current, we use that.\n * Else we use the pulse from the pulse map, but copy the source tuple array.\n * @param {Operator} op - The operator for which to get an input pulse.\n * @param {string} [encode] - An (optional) encoding set name with which to\n * annotate the returned pulse. See {@link run} for more information.\n */\nexport function getPulse(op, encode) {\n var s = op.source,\n stamp = this._clock,\n p;\n\n if (s && isArray(s)) {\n p = s.map(function(_) { return _.pulse; });\n return new MultiPulse(this, stamp, p, encode);\n }\n\n p = this._pulses[op.id];\n if (s) {\n s = s.pulse;\n if (!s || s === StopPropagation) {\n p.source = [];\n } else if (s.stamp === stamp && p.target !== op) {\n p = s;\n } else {\n p.source = s.source;\n }\n }\n\n return p;\n}\n","import Pulse from '../Pulse';\n\nvar NO_OPT = {skip: false, force: false};\n\n/**\n * Touches an operator, scheduling it to be evaluated. If invoked outside of\n * a pulse propagation, the operator will be evaluated the next time this\n * dataflow is run. If invoked in the midst of pulse propagation, the operator\n * will be queued for evaluation if and only if the operator has not yet been\n * evaluated on the current propagation timestamp.\n * @param {Operator} op - The operator to touch.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\nexport function touch(op, options) {\n var opt = options || NO_OPT;\n if (this._pulse) {\n // if in midst of propagation, add to priority queue\n this._enqueue(op);\n } else {\n // otherwise, queue for next propagation\n this._touched.add(op);\n }\n if (opt.skip) op.skip(true);\n return this;\n}\n\n/**\n * Updates the value of the given operator.\n * @param {Operator} op - The operator to update.\n * @param {*} value - The value to set.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.force] - If true, the operator will\n * be re-evaluated even if its value has not changed.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\nexport function update(op, value, options) {\n var opt = options || NO_OPT;\n if (op.set(value) || opt.force) {\n this.touch(op, opt);\n }\n return this;\n}\n\n/**\n * Pulses an operator with a changeset of tuples. If invoked outside of\n * a pulse propagation, the pulse will be applied the next time this\n * dataflow is run. If invoked in the midst of pulse propagation, the pulse\n * will be added to the set of active pulses and will be applied if and\n * only if the target operator has not yet been evaluated on the current\n * propagation timestamp.\n * @param {Operator} op - The operator to pulse.\n * @param {ChangeSet} value - The tuple changeset to apply.\n * @param {object} [options] - Additional options hash.\n * @param {boolean} [options.skip] - If true, the operator will\n * be skipped: it will not be evaluated, but its dependents will be.\n * @return {Dataflow}\n */\nexport function pulse(op, changeset, options) {\n this.touch(op, options || NO_OPT);\n\n var p = new Pulse(this, this._clock + (this._pulse ? 0 : 1)),\n t = op.pulse && op.pulse.source || [];\n p.target = op;\n this._pulses[op.id] = changeset.pulse(p, t);\n\n return this;\n}\n","export default function Heap(cmp) {\n var nodes = [];\n return {\n size: () => nodes.length,\n peek: () => nodes[0],\n push: x => {\n nodes.push(x);\n return siftdown(nodes, 0, nodes.length - 1, cmp);\n },\n pop: () => {\n var last = nodes.pop(), item;\n if (nodes.length) {\n item = nodes[0];\n nodes[0] = last;\n siftup(nodes, 0, cmp);\n } else {\n item = last;\n }\n return item;\n }\n };\n}\n\nfunction siftdown(array, start, idx, cmp) {\n var item, parent, pidx;\n\n item = array[idx];\n while (idx > start) {\n pidx = (idx - 1) >> 1;\n parent = array[pidx];\n if (cmp(item, parent) < 0) {\n array[idx] = parent;\n idx = pidx;\n continue;\n }\n break;\n }\n return (array[idx] = item);\n}\n\nfunction siftup(array, idx, cmp) {\n var start = idx,\n end = array.length,\n item = array[idx],\n cidx = (idx << 1) + 1, ridx;\n\n while (cidx < end) {\n ridx = cidx + 1;\n if (ridx < end && cmp(array[cidx], array[ridx]) >= 0) {\n cidx = ridx;\n }\n array[idx] = array[cidx];\n idx = cidx;\n cidx = (idx << 1) + 1;\n }\n array[idx] = item;\n return siftdown(array, start, idx, cmp);\n}\n","import add from './add';\nimport connect from './connect';\nimport events from './events';\nimport {ingest, parse, preload, request} from './load';\nimport on from './on';\nimport {rank, rerank} from './rank';\nimport {evaluate, run, runAsync, runAfter, enqueue, getPulse} from './run';\nimport {pulse, touch, update} from './update';\nimport changeset from '../ChangeSet';\nimport Heap from '../util/Heap';\nimport UniqueList from '../util/UniqueList';\nimport {loader} from 'vega-loader';\nimport {id, logger, Error} from 'vega-util';\n\n/**\n * A dataflow graph for reactive processing of data streams.\n * @constructor\n */\nexport default function Dataflow() {\n this.logger(logger());\n this.logLevel(Error);\n\n this._clock = 0;\n this._rank = 0;\n try {\n this._loader = loader();\n } catch (e) {\n // do nothing if loader module is unavailable\n }\n\n this._touched = UniqueList(id);\n this._pulses = {};\n this._pulse = null;\n\n this._heap = Heap((a, b) => a.qrank - b.qrank);\n this._postrun = [];\n}\n\nvar prototype = Dataflow.prototype;\n\n/**\n * The current timestamp of this dataflow. This value reflects the\n * timestamp of the previous dataflow run. The dataflow is initialized\n * with a stamp value of 0. The initial run of the dataflow will have\n * a timestap of 1, and so on. This value will match the\n * {@link Pulse.stamp} property.\n * @return {number} - The current timestamp value.\n */\nprototype.stamp = function() {\n return this._clock;\n};\n\n/**\n * Gets or sets the loader instance to use for data file loading. A\n * loader object must provide a \"load\" method for loading files and a\n * \"sanitize\" method for checking URL/filename validity. Both methods\n * should accept a URI and options hash as arguments, and return a Promise\n * that resolves to the loaded file contents (load) or a hash containing\n * sanitized URI data with the sanitized url assigned to the \"href\" property\n * (sanitize).\n * @param {object} _ - The loader instance to use.\n * @return {object|Dataflow} - If no arguments are provided, returns\n * the current loader instance. Otherwise returns this Dataflow instance.\n */\nprototype.loader = function(_) {\n if (arguments.length) {\n this._loader = _;\n return this;\n } else {\n return this._loader;\n }\n};\n\n/**\n * Empty entry threshold for garbage cleaning. Map data structures will\n * perform cleaning once the number of empty entries exceeds this value.\n */\nprototype.cleanThreshold = 1e4;\n\n// OPERATOR REGISTRATION\nprototype.add = add;\nprototype.connect = connect;\nprototype.rank = rank;\nprototype.rerank = rerank;\n\n// OPERATOR UPDATES\nprototype.pulse = pulse;\nprototype.touch = touch;\nprototype.update = update;\nprototype.changeset = changeset;\n\n// DATA LOADING\nprototype.ingest = ingest;\nprototype.parse = parse;\nprototype.preload = preload;\nprototype.request = request;\n\n// EVENT HANDLING\nprototype.events = events;\nprototype.on = on;\n\n// PULSE PROPAGATION\nprototype.evaluate = evaluate;\nprototype.run = run;\nprototype.runAsync = runAsync;\nprototype.runAfter = runAfter;\nprototype._enqueue = enqueue;\nprototype._getPulse = getPulse;\n\n// LOGGING AND ERROR HANDLING\n\nfunction logMethod(method) {\n return function() {\n return this._log[method].apply(this, arguments);\n };\n}\n\n/**\n * Get or set the logger instance used to log messages. If no arguments are\n * provided, returns the current logger instance. Otherwise, sets the logger\n * and return this Dataflow instance. Provided loggers must support the full\n * API of logger objects generated by the vega-util logger method. Note that\n * by default the log level of the new logger will be used; use the logLevel\n * method to adjust the log level as needed.\n */\nprototype.logger = function(logger) {\n if (arguments.length) {\n this._log = logger;\n return this;\n } else {\n return this._log;\n }\n};\n\n/**\n * Logs an error message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit error messages.\n */\nprototype.error = logMethod('error');\n\n/**\n * Logs a warning message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit warning messages.\n */\nprototype.warn = logMethod('warn');\n\n/**\n * Logs a information message. By default, logged messages are written to\n * console output. The message will only be logged if the current log level is\n * high enough to permit information messages.\n */\nprototype.info = logMethod('info');\n\n/**\n * Logs a debug message. By default, logged messages are written to console\n * output. The message will only be logged if the current log level is high\n * enough to permit debug messages.\n */\nprototype.debug = logMethod('debug');\n\n/**\n * Get or set the current log level. If an argument is provided, it\n * will be used as the new log level.\n * @param {number} [level] - Should be one of None, Warn, Info\n * @return {number} - The current log level.\n */\nprototype.logLevel = logMethod('level');\n","import Operator from './Operator';\nimport {inherits} from 'vega-util';\n\n/**\n * Abstract class for operators that process data tuples.\n * Subclasses must provide a {@link transform} method for operator processing.\n * @constructor\n * @param {*} [init] - The initial value for this operator.\n * @param {object} [params] - The parameters for this operator.\n * @param {Operator} [source] - The operator from which to receive pulses.\n */\nexport default function Transform(init, params) {\n Operator.call(this, init, null, params);\n}\n\nvar prototype = inherits(Transform, Operator);\n\n/**\n * Overrides {@link Operator.evaluate} for transform operators.\n * Internally, this method calls {@link evaluate} to perform processing.\n * If {@link evaluate} returns a falsy value, the input pulse is returned.\n * This method should NOT be overridden, instead overrride {@link evaluate}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return the output pulse for this operator (or StopPropagation)\n */\nprototype.run = function(pulse) {\n if (pulse.stamp <= this.stamp) return pulse.StopPropagation;\n\n var rv;\n if (this.skip()) {\n this.skip(false);\n } else {\n rv = this.evaluate(pulse);\n }\n rv = rv || pulse;\n\n this.stamp = pulse.stamp;\n\n if (rv.then) {\n rv = rv.then(_ => this.pulse =_);\n } else if (rv !== pulse.StopPropagation) {\n this.pulse = rv;\n }\n\n return rv;\n};\n\n/**\n * Overrides {@link Operator.evaluate} for transform operators.\n * Marshalls parameter values and then invokes {@link transform}.\n * @param {Pulse} pulse - the current dataflow pulse.\n * @return {Pulse} The output pulse (or StopPropagation). A falsy return\n value (including undefined) will let the input pulse pass through.\n */\nprototype.evaluate = function(pulse) {\n var params = this.marshall(pulse.stamp),\n out = this.transform(params, pulse);\n params.clear();\n return out;\n};\n\n/**\n * Process incoming pulses.\n * Subclasses should override this method to implement transforms.\n * @param {Parameters} _ - The operator parameter values.\n * @param {Pulse} pulse - The current dataflow pulse.\n * @return {Pulse} The output pulse (or StopPropagation). A falsy return\n * value (including undefined) will let the input pulse pass through.\n */\nprototype.transform = function() {};\n","export var transforms = {};\n\nexport function definition(type) {\n var t = transform(type);\n return t && t.Definition || null;\n}\n\nexport function transform(type) {\n type = type && type.toLowerCase();\n return transforms.hasOwnProperty(type) ? transforms[type] : null;\n}\n","// Utilities\nexport {default as UniqueList} from './src/util/UniqueList';\nexport {default as asyncCallback} from './src/util/asyncCallback';\n\n// Core Runtime\nexport {default as changeset, isChangeSet} from './src/ChangeSet';\nexport {default as Dataflow} from './src/dataflow/Dataflow';\nexport {default as EventStream} from './src/EventStream';\nexport {default as Parameters} from './src/Parameters';\nexport {default as Pulse} from './src/Pulse';\nexport {default as MultiPulse} from './src/MultiPulse';\nexport {default as Operator} from './src/Operator';\nexport {default as Transform} from './src/Transform';\nexport {derive, rederive, ingest, isTuple, replace, tupleid} from './src/Tuple';\n\n// Transform Registry\nexport {\n definition,\n transform,\n transforms\n} from './src/register';\n","export function multikey(f) {\n return function(x) {\n var n = f.length,\n i = 1,\n k = String(f[0](x));\n\n for (; i 1 ? this.dev / (this.valid-1) : undefined',\n req: ['mean'], idx: 1\n }),\n 'variancep': measure({\n name: 'variancep',\n set: 'this.valid > 1 ? this.dev / this.valid : undefined',\n req: ['variance'], idx: 2\n }),\n 'stdev': measure({\n name: 'stdev',\n set: 'this.valid > 1 ? Math.sqrt(this.dev / (this.valid-1)) : undefined',\n req: ['variance'], idx: 2\n }),\n 'stdevp': measure({\n name: 'stdevp',\n set: 'this.valid > 1 ? Math.sqrt(this.dev / this.valid) : undefined',\n req: ['variance'], idx: 2\n }),\n 'stderr': measure({\n name: 'stderr',\n set: 'this.valid > 1 ? Math.sqrt(this.dev / (this.valid * (this.valid-1))) : undefined',\n req: ['variance'], idx: 2\n }),\n 'distinct': measure({\n name: 'distinct',\n set: 'cell.data.distinct(this.get)',\n req: ['values'], idx: 3\n }),\n 'ci0': measure({\n name: 'ci0',\n set: 'cell.data.ci0(this.get)',\n req: ['values'], idx: 3\n }),\n 'ci1': measure({\n name: 'ci1',\n set: 'cell.data.ci1(this.get)',\n req: ['values'], idx: 3\n }),\n 'median': measure({\n name: 'median',\n set: 'cell.data.q2(this.get)',\n req: ['values'], idx: 3\n }),\n 'q1': measure({\n name: 'q1',\n set: 'cell.data.q1(this.get)',\n req: ['values'], idx: 3\n }),\n 'q3': measure({\n name: 'q3',\n set: 'cell.data.q3(this.get)',\n req: ['values'], idx: 3\n }),\n 'argmin': measure({\n name: 'argmin',\n init: 'this.argmin = undefined;',\n add: 'if (v < this.min) this.argmin = t;',\n rem: 'if (v <= this.min) this.argmin = undefined;',\n set: 'this.argmin || cell.data.argmin(this.get)',\n req: ['min'], str: ['values'], idx: 3\n }),\n 'argmax': measure({\n name: 'argmax',\n init: 'this.argmax = undefined;',\n add: 'if (v > this.max) this.argmax = t;',\n rem: 'if (v >= this.max) this.argmax = undefined;',\n set: 'this.argmax || cell.data.argmax(this.get)',\n req: ['max'], str: ['values'], idx: 3\n }),\n 'min': measure({\n name: 'min',\n init: 'this.min = undefined;',\n add: 'if (v < this.min || this.min === undefined) this.min = v;',\n rem: 'if (v <= this.min) this.min = NaN;',\n set: 'this.min = (isNaN(this.min) ? cell.data.min(this.get) : this.min)',\n str: ['values'], idx: 4\n }),\n 'max': measure({\n name: 'max',\n init: 'this.max = undefined;',\n add: 'if (v > this.max || this.max === undefined) this.max = v;',\n rem: 'if (v >= this.max) this.max = NaN;',\n set: 'this.max = (isNaN(this.max) ? cell.data.max(this.get) : this.max)',\n str: ['values'], idx: 4\n })\n};\n\nexport var ValidAggregateOps = Object.keys(AggregateOps);\n\nexport function createMeasure(op, name) {\n return AggregateOps[op](name);\n}\n\nfunction measure(base) {\n return function(out) {\n var m = extend({init:'', add:'', rem:'', idx:0}, base);\n m.out = out || base.name;\n return m;\n };\n}\n\nfunction compareIndex(a, b) {\n return a.idx - b.idx;\n}\n\nfunction resolve(agg, stream) {\n function collect(m, a) {\n function helper(r) { if (!m[r]) collect(m, m[r] = AggregateOps[r]()); }\n if (a.req) a.req.forEach(helper);\n if (stream && a.str) a.str.forEach(helper);\n return m;\n }\n var map = agg.reduce(\n collect,\n agg.reduce(function(m, a) {\n m[a.name] = a;\n return m;\n }, {})\n );\n var values = [], key;\n for (key in map) values.push(map[key]);\n return values.sort(compareIndex);\n}\n\nexport function compileMeasures(agg, field) {\n var get = field || identity,\n all = resolve(agg, true), // assume streaming removes may occur\n init = 'var cell = this.cell; this.valid = 0; this.missing = 0;',\n ctr = 'this.cell = cell; this.init();',\n add = 'if(v==null){++this.missing; return;} if(v!==v) return; ++this.valid;',\n rem = 'if(v==null){--this.missing; return;} if(v!==v) return; --this.valid;',\n set = 'var cell = this.cell;';\n\n all.forEach(function(a) {\n init += a.init;\n add += a.add;\n rem += a.rem;\n });\n agg.slice().sort(compareIndex).forEach(function(a) {\n set += 't[\\'' + a.out + '\\']=' + a.set + ';';\n });\n set += 'return t;';\n\n ctr = Function('cell', ctr);\n ctr.prototype.init = Function(init);\n ctr.prototype.add = Function('v', 't', add);\n ctr.prototype.rem = Function('v', 't', rem);\n ctr.prototype.set = Function('t', set);\n ctr.prototype.get = get;\n ctr.fields = agg.map(function(_) { return _.out; });\n return ctr;\n}\n","export default function(_) {\n // determine range\n var maxb = _.maxbins || 20,\n base = _.base || 10,\n logb = Math.log(base),\n div = _.divide || [5, 2],\n min = _.extent[0],\n max = _.extent[1],\n span = (max - min) || Math.abs(min) || 1,\n step, level, minstep, precision, v, i, n, eps;\n\n if (_.step) {\n // if step size is explicitly given, use that\n step = _.step;\n } else if (_.steps) {\n // if provided, limit choice to acceptable step sizes\n v = span / maxb;\n for (i=0, n=_.steps.length; i < n && _.steps[i] < v; ++i);\n step = _.steps[Math.max(0, i-1)];\n } else {\n // else use span to determine step size\n level = Math.ceil(Math.log(maxb) / logb);\n minstep = _.minstep || 0;\n step = Math.max(\n minstep,\n Math.pow(base, Math.round(Math.log(span) / logb) - level)\n );\n\n // increase step size if too many bins\n while (Math.ceil(span/step) > maxb) { step *= base; }\n\n // decrease step size if allowed\n for (i=0, n=div.length; i= minstep && span / v <= maxb) step = v;\n }\n }\n\n // update precision, min and max\n v = Math.log(step);\n precision = v >= 0 ? 0 : ~~(-v / logb) + 1;\n eps = Math.pow(base, -precision - 1);\n if (_.nice || _.nice === undefined) {\n v = Math.floor(min / step + eps) * step;\n min = min < v ? v - step : v;\n max = Math.ceil(max / step) * step;\n }\n\n return {\n start: min,\n stop: max === min ? min + step : max,\n step: step\n };\n}\n","export default function*(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n","export var random = Math.random;\n\nexport function setRandom(r) {\n random = r;\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","export default function variance(values, valueof) {\n let count = 0;\n let delta;\n let mean = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n delta = value - mean;\n mean += delta / ++count;\n sum += delta * (value - mean);\n }\n }\n }\n if (count > 1) return sum / (count - 1);\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","import number from \"./number.js\";\n\nexport default function quantile(values, p, valueof = number) {\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","import numbers from './numbers';\nimport {random} from './random';\nimport {quantile, ascending} from 'd3-array';\n\nexport default function(array, samples, alpha, f) {\n if (!array.length) return [undefined, undefined];\n\n var values = Float64Array.from(numbers(array, f)),\n n = values.length,\n m = samples,\n a, i, j, mu;\n\n for (j=0, mu=Array(m); j 1);\n c = Math.sqrt(-2 * Math.log(rds) / rds); // Box-Muller transform\n next = mu + y * c * sigma;\n return mu + x * c * sigma;\n };\n\n dist.pdf = function(x) {\n var exp = Math.exp(Math.pow(x-mu, 2) / (-2 * Math.pow(sigma, 2)));\n return (1 / (sigma * Math.sqrt(2*Math.PI))) * exp;\n };\n\n // Approximation from West (2009)\n // Better Approximations to Cumulative Normal Functions\n dist.cdf = function(x) {\n var cd,\n z = (x - mu) / sigma,\n Z = Math.abs(z);\n if (Z > 37) {\n cd = 0;\n } else {\n var sum, exp = Math.exp(-Z*Z/2);\n if (Z < 7.07106781186547) {\n sum = 3.52624965998911e-02 * Z + 0.700383064443688;\n sum = sum * Z + 6.37396220353165;\n sum = sum * Z + 33.912866078383;\n sum = sum * Z + 112.079291497871;\n sum = sum * Z + 221.213596169931;\n sum = sum * Z + 220.206867912376;\n cd = exp * sum;\n sum = 8.83883476483184e-02 * Z + 1.75566716318264;\n sum = sum * Z + 16.064177579207;\n sum = sum * Z + 86.7807322029461;\n sum = sum * Z + 296.564248779674;\n sum = sum * Z + 637.333633378831;\n sum = sum * Z + 793.826512519948;\n sum = sum * Z + 440.413735824752;\n cd = cd / sum;\n } else {\n sum = Z + 0.65;\n sum = Z + 4 / sum;\n sum = Z + 3 / sum;\n sum = Z + 2 / sum;\n sum = Z + 1 / sum;\n cd = exp / sum / 2.506628274631;\n }\n }\n return z > 0 ? 1 - cd : cd;\n };\n\n // Approximation of Probit function using inverse error function.\n dist.icdf = function(p) {\n if (p <= 0 || p >= 1) return NaN;\n var x = 2*p - 1,\n v = (8 * (Math.PI - 3)) / (3 * Math.PI * (4-Math.PI)),\n a = (2 / (Math.PI*v)) + (Math.log(1 - Math.pow(x,2)) / 2),\n b = Math.log(1 - (x*x)) / v,\n s = (x > 0 ? 1 : -1) * Math.sqrt(Math.sqrt((a*a) - b) - a);\n return mu + sigma * Math.SQRT2 * s;\n };\n\n return dist.mean(mean).stdev(stdev);\n}\n","import gaussian from './normal';\nimport quartiles from './quartiles';\nimport {random} from './random';\nimport {variance} from 'd3-array';\n\n// TODO: support for additional kernels?\nexport default function(support, bandwidth) {\n var kernel = gaussian(),\n dist = {},\n n = 0;\n\n dist.data = function(_) {\n if (arguments.length) {\n support = _;\n n = _ ? _.length : 0;\n return dist.bandwidth(bandwidth);\n } else {\n return support;\n }\n };\n\n dist.bandwidth = function(_) {\n if (!arguments.length) return bandwidth;\n bandwidth = _;\n if (!bandwidth && support) bandwidth = estimateBandwidth(support);\n return dist;\n };\n\n dist.sample = function() {\n return support[~~(random() * n)] + bandwidth * kernel.sample();\n };\n\n dist.pdf = function(x) {\n for (var y=0, i=0; i= a && x <= b) ? 1 / d : 0;\n };\n\n dist.cdf = function(x) {\n return x < a ? 0 : x > b ? 1 : (x - a) / d;\n };\n\n dist.icdf = function(p) {\n return (p >= 0 && p <= 1) ? a + p * d : NaN;\n };\n\n return dist.min(min).max(max);\n}\n","// Ordinary Least Squares\nexport default function(uX, uY, uXY, uX2) {\n const delta = uX2 - uX * uX,\n slope = Math.abs(delta) < 1e-24 ? 0 : (uXY - uX * uY) / delta,\n intercept = uY - slope * uX;\n\n return [intercept, slope];\n}\n","// subdivide up to accuracy of 0.1 degrees\nconst MIN_RADIANS = 0.1 * Math.PI / 180;\n\n// Adaptively sample an interpolated function over a domain extent\nexport default function(f, extent, minSteps, maxSteps) {\n minSteps = minSteps || 25;\n maxSteps = Math.max(minSteps, maxSteps || 200);\n\n const point = x => [x, f(x)],\n minX = extent[0],\n maxX = extent[1],\n span = maxX - minX,\n stop = span / maxSteps,\n prev = [point(minX)],\n next = [];\n\n if (minSteps === maxSteps) {\n // no adaptation, sample uniform grid directly and return\n for (let i = 1; i < maxSteps; ++i) {\n prev.push(point(minX + (i / minSteps) * span));\n }\n prev.push(point(maxX));\n return prev;\n } else {\n // sample minimum points on uniform grid\n // then move on to perform adaptive refinement\n next.push(point(maxX));\n for (let i = minSteps; --i > 0;) {\n next.push(point(minX + (i / minSteps) * span));\n }\n }\n\n let p0 = prev[0],\n p1 = next[next.length - 1];\n\n while (p1) {\n const pm = point((p0[0] + p1[0]) / 2);\n\n if (pm[0] - p0[0] >= stop && angleDelta(p0, pm, p1) > MIN_RADIANS) {\n next.push(pm);\n } else {\n p0 = p1;\n prev.push(p1);\n next.pop();\n }\n p1 = next[next.length - 1];\n }\n\n return prev;\n}\n\nfunction angleDelta(p, q, r) {\n const a0 = Math.atan2(r[1] - p[1], r[0] - p[0]),\n a1 = Math.atan2(q[1] - p[1], q[0] - p[0]);\n return Math.abs(a0 - a1);\n}\n","import {tupleid} from 'vega-dataflow';\nimport {bootstrapCI, quartiles} from 'vega-statistics';\nimport {extentIndex, field} from 'vega-util';\n\nexport default function TupleStore(key) {\n this._key = key ? field(key) : tupleid;\n this.reset();\n}\n\nvar prototype = TupleStore.prototype;\n\nprototype.reset = function() {\n this._add = [];\n this._rem = [];\n this._ext = null;\n this._get = null;\n this._q = null;\n};\n\nprototype.add = function(v) {\n this._add.push(v);\n};\n\nprototype.rem = function(v) {\n this._rem.push(v);\n};\n\nprototype.values = function() {\n this._get = null;\n if (this._rem.length === 0) return this._add;\n\n var a = this._add,\n r = this._rem,\n k = this._key,\n n = a.length,\n m = r.length,\n x = Array(n - m),\n map = {}, i, j, v;\n\n // use unique key field to clear removed values\n for (i=0; i= 0) {\n s = get(v[n]) + '';\n if (!map.hasOwnProperty(s)) {\n map[s] = 1;\n ++count;\n }\n }\n\n return count;\n};\n\nprototype.extent = function(get) {\n if (this._get !== get || !this._ext) {\n var v = this.values(),\n i = extentIndex(v, get);\n this._ext = [v[i[0]], v[i[1]]];\n this._get = get;\n }\n return this._ext;\n};\n\nprototype.argmin = function(get) {\n return this.extent(get)[0] || {};\n};\n\nprototype.argmax = function(get) {\n return this.extent(get)[1] || {};\n};\n\nprototype.min = function(get) {\n var m = this.extent(get)[0];\n return m != null ? get(m) : undefined;\n};\n\nprototype.max = function(get) {\n var m = this.extent(get)[1];\n return m != null ? get(m) : undefined;\n};\n\nprototype.quartile = function(get) {\n if (this._get !== get || !this._q) {\n this._q = quartiles(this.values(), get);\n this._get = get;\n }\n return this._q;\n};\n\nprototype.q1 = function(get) {\n return this.quartile(get)[0];\n};\n\nprototype.q2 = function(get) {\n return this.quartile(get)[1];\n};\n\nprototype.q3 = function(get) {\n return this.quartile(get)[2];\n};\n\nprototype.ci = function(get) {\n if (this._get !== get || !this._ci) {\n this._ci = bootstrapCI(this.values(), 1000, 0.05, get);\n this._get = get;\n }\n return this._ci;\n};\n\nprototype.ci0 = function(get) {\n return this.ci(get)[0];\n};\n\nprototype.ci1 = function(get) {\n return this.ci(get)[1];\n};\n","import {groupkey} from './util/AggregateKeys';\nimport {createMeasure, compileMeasures, measureName, ValidAggregateOps} from './util/AggregateOps';\nimport TupleStore from './util/TupleStore';\nimport {ingest, replace, Transform} from 'vega-dataflow';\nimport {accessorFields, accessorName, array, error, inherits} from 'vega-util';\n\n/**\n * Group-by aggregation operator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {Array} [params.fields] - An array of accessors to aggregate.\n * @param {Array} [params.ops] - An array of strings indicating aggregation operations.\n * @param {Array} [params.as] - An array of output field names for aggregated values.\n * @param {boolean} [params.cross=false] - A flag indicating that the full\n * cross-product of groupby values should be generated, including empty cells.\n * If true, the drop parameter is ignored and empty cells are retained.\n * @param {boolean} [params.drop=true] - A flag indicating if empty cells should be removed.\n */\nexport default function Aggregate(params) {\n Transform.call(this, null, params);\n\n this._adds = []; // array of added output tuples\n this._mods = []; // array of modified output tuples\n this._alen = 0; // number of active added tuples\n this._mlen = 0; // number of active modified tuples\n this._drop = true; // should empty aggregation cells be removed\n this._cross = false; // produce full cross-product of group-by values\n\n this._dims = []; // group-by dimension accessors\n this._dnames = []; // group-by dimension names\n\n this._measures = []; // collection of aggregation monoids\n this._countOnly = false; // flag indicating only count aggregation\n this._counts = null; // collection of count fields\n this._prev = null; // previous aggregation cells\n\n this._inputs = null; // array of dependent input tuple field names\n this._outputs = null; // array of output tuple field names\n}\n\nAggregate.Definition = {\n \"type\": \"Aggregate\",\n \"metadata\": {\"generates\": true, \"changes\": true},\n \"params\": [\n { \"name\": \"groupby\", \"type\": \"field\", \"array\": true },\n { \"name\": \"ops\", \"type\": \"enum\", \"array\": true, \"values\": ValidAggregateOps },\n { \"name\": \"fields\", \"type\": \"field\", \"null\": true, \"array\": true },\n { \"name\": \"as\", \"type\": \"string\", \"null\": true, \"array\": true },\n { \"name\": \"drop\", \"type\": \"boolean\", \"default\": true },\n { \"name\": \"cross\", \"type\": \"boolean\", \"default\": false },\n { \"name\": \"key\", \"type\": \"field\" }\n ]\n};\n\nvar prototype = inherits(Aggregate, Transform);\n\nprototype.transform = function(_, pulse) {\n var aggr = this,\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n mod;\n\n this.stamp = out.stamp;\n\n if (this.value && ((mod = _.modified()) || pulse.modified(this._inputs))) {\n this._prev = this.value;\n this.value = mod ? this.init(_) : {};\n pulse.visit(pulse.SOURCE, function(t) { aggr.add(t); });\n } else {\n this.value = this.value || this.init(_);\n pulse.visit(pulse.REM, function(t) { aggr.rem(t); });\n pulse.visit(pulse.ADD, function(t) { aggr.add(t); });\n }\n\n // Indicate output fields and return aggregate tuples.\n out.modifies(this._outputs);\n\n // Should empty cells be dropped?\n aggr._drop = _.drop !== false;\n\n // If domain cross-product requested, generate empty cells as needed\n // and ensure that empty cells are not dropped\n if (_.cross && aggr._dims.length > 1) {\n aggr._drop = false;\n this.cross();\n }\n\n return aggr.changes(out);\n};\n\nprototype.cross = function() {\n var aggr = this,\n curr = aggr.value,\n dims = aggr._dnames,\n vals = dims.map(function() { return {}; }),\n n = dims.length;\n\n // collect all group-by domain values\n function collect(cells) {\n var key, i, t, v;\n for (key in cells) {\n t = cells[key].tuple;\n for (i=0; i} params.fields - The fields to compare.\n * @param {Array} [params.orders] - The sort orders.\n * Each entry should be one of \"ascending\" (default) or \"descending\".\n */\nexport default function Compare(params) {\n Operator.call(this, null, update, params);\n}\n\ninherits(Compare, Operator);\n\nfunction update(_) {\n return (this.value && !_.modified())\n ? this.value\n : compare(_.fields, _.orders);\n}\n","import {ingest, Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Count regexp-defined pattern occurrences in a text field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - An accessor for the text field.\n * @param {string} [params.pattern] - RegExp string defining the text pattern.\n * @param {string} [params.case] - One of 'lower', 'upper' or null (mixed) case.\n * @param {string} [params.stopwords] - RegExp string of words to ignore.\n */\nexport default function CountPattern(params) {\n Transform.call(this, null, params);\n}\n\nCountPattern.Definition = {\n \"type\": \"CountPattern\",\n \"metadata\": {\"generates\": true, \"changes\": true},\n \"params\": [\n { \"name\": \"field\", \"type\": \"field\", \"required\": true },\n { \"name\": \"case\", \"type\": \"enum\", \"values\": [\"upper\", \"lower\", \"mixed\"], \"default\": \"mixed\" },\n { \"name\": \"pattern\", \"type\": \"string\", \"default\": \"[\\\\w\\\"]+\" },\n { \"name\": \"stopwords\", \"type\": \"string\", \"default\": \"\" },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": 2, \"default\": [\"text\", \"count\"] }\n ]\n};\n\nfunction tokenize(text, tcase, match) {\n switch (tcase) {\n case 'upper': text = text.toUpperCase(); break;\n case 'lower': text = text.toLowerCase(); break;\n }\n return text.match(match);\n}\n\nvar prototype = inherits(CountPattern, Transform);\n\nprototype.transform = function(_, pulse) {\n function process(update) {\n return function(tuple) {\n var tokens = tokenize(get(tuple), _.case, match) || [], t;\n for (var i=0, n=tokens.length; i} [params.as] - The names of the output fields.\n */\nexport default function Cross(params) {\n Transform.call(this, null, params);\n}\n\nCross.Definition = {\n \"type\": \"Cross\",\n \"metadata\": {\"generates\": true},\n \"params\": [\n { \"name\": \"filter\", \"type\": \"expr\" },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": 2, \"default\": [\"a\", \"b\"] }\n ]\n};\n\nvar prototype = inherits(Cross, Transform);\n\nprototype.transform = function(_, pulse) {\n var out = pulse.fork(pulse.NO_SOURCE),\n data = this.value,\n as = _.as || ['a', 'b'],\n a = as[0], b = as[1],\n reset = !data\n || pulse.changed(pulse.ADD_REM)\n || _.modified('as')\n || _.modified('filter');\n\n if (reset) {\n if (data) out.rem = data;\n data = pulse.materialize(pulse.SOURCE).source;\n out.add = this.value = cross(data, a, b, _.filter || truthy);\n } else {\n out.mod = data;\n }\n\n out.source = this.value;\n return out.modifies(as);\n};\n\nfunction cross(input, a, b, filter) {\n var data = [],\n t = {},\n n = input.length,\n i = 0,\n j, left;\n\n for (; i} - A method for requesting\n * source data. Used for distributions (such as KDE) that\n * require sample data points. This method will only be\n * invoked if the 'from' parameter for a target data source\n * is not provided. Typically this method returns backing\n * source data for a Pulse object.\n * @return {object} - The output distribution object.\n */\nexport default function parse(def, data) {\n var func = def[FUNCTION];\n if (!Distributions.hasOwnProperty(func)) {\n error('Unknown distribution function: ' + func);\n }\n\n var d = Distributions[func]();\n\n for (var name in def) {\n // if data field, extract values\n if (name === FIELD) {\n d.data((def.from || data()).map(def[name]));\n }\n\n // if distribution mixture, recurse to parse each definition\n else if (name === DISTRIBUTIONS) {\n d[name](def[name].map(function(_) { return parse(_, data); }));\n }\n\n // otherwise, simply set the parameter\n else if (typeof d[name] === FUNCTION) {\n d[name](def[name]);\n }\n }\n\n return d;\n}\n","import parseDist from './util/Distributions';\nimport {ingest, Transform} from 'vega-dataflow';\nimport {sampleCurve} from 'vega-statistics';\nimport {error, extent, inherits} from 'vega-util';\n\n/**\n * Grid sample points for a probability density. Given a distribution and\n * a sampling extent, will generate points suitable for plotting either\n * PDF (probability density function) or CDF (cumulative distribution\n * function) curves.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.distribution - The probability distribution. This\n * is an object parameter dependent on the distribution type.\n * @param {string} [params.method='pdf'] - The distribution method to sample.\n * One of 'pdf' or 'cdf'.\n * @param {Array} [params.extent] - The [min, max] extent over which\n * to sample the distribution. This argument is required in most cases, but\n * can be omitted if the distribution (e.g., 'kde') supports a 'data' method\n * that returns numerical sample points from which the extent can be deduced.\n * @param {number} [params.minsteps=25] - The minimum number of curve samples\n * for plotting the density.\n * @param {number} [params.maxsteps=200] - The maximum number of curve samples\n * for plotting the density.\n * @param {number} [params.steps] - The exact number of curve samples for\n * plotting the density. If specified, overrides both minsteps and maxsteps\n * to set an exact number of uniform samples. Useful in conjunction with\n * a fixed extent to ensure consistent sample points for stacked densities.\n */\nexport default function Density(params) {\n Transform.call(this, null, params);\n}\n\nvar distributions = [\n {\n \"key\": {\"function\": \"normal\"},\n \"params\": [\n { \"name\": \"mean\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"stdev\", \"type\": \"number\", \"default\": 1 }\n ]\n },\n {\n \"key\": {\"function\": \"uniform\"},\n \"params\": [\n { \"name\": \"min\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"max\", \"type\": \"number\", \"default\": 1 }\n ]\n },\n {\n \"key\": {\"function\": \"kde\"},\n \"params\": [\n { \"name\": \"field\", \"type\": \"field\", \"required\": true },\n { \"name\": \"from\", \"type\": \"data\" },\n { \"name\": \"bandwidth\", \"type\": \"number\", \"default\": 0 }\n ]\n }\n];\n\nvar mixture = {\n \"key\": {\"function\": \"mixture\"},\n \"params\": [\n { \"name\": \"distributions\", \"type\": \"param\", \"array\": true,\n \"params\": distributions },\n { \"name\": \"weights\", \"type\": \"number\", \"array\": true }\n ]\n};\n\nDensity.Definition = {\n \"type\": \"Density\",\n \"metadata\": {\"generates\": true},\n \"params\": [\n { \"name\": \"extent\", \"type\": \"number\", \"array\": true, \"length\": 2 },\n { \"name\": \"steps\", \"type\": \"number\" },\n { \"name\": \"minsteps\", \"type\": \"number\", \"default\": 25 },\n { \"name\": \"maxsteps\", \"type\": \"number\", \"default\": 200 },\n { \"name\": \"method\", \"type\": \"string\", \"default\": \"pdf\",\n \"values\": [\"pdf\", \"cdf\"] },\n { \"name\": \"distribution\", \"type\": \"param\",\n \"params\": distributions.concat(mixture) },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true,\n \"default\": [\"value\", \"density\"] }\n ]\n};\n\nvar prototype = inherits(Density, Transform);\n\nprototype.transform = function(_, pulse) {\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n\n if (!this.value || pulse.changed() || _.modified()) {\n var dist = parseDist(_.distribution, source(pulse)),\n minsteps = _.steps || _.minsteps || 25,\n maxsteps = _.steps || _.maxsteps || 200,\n method = _.method || 'pdf';\n\n if (method !== 'pdf' && method !== 'cdf') {\n error('Invalid density method: ' + method);\n }\n if (!_.extent && !dist.data) {\n error('Missing density extent parameter.');\n }\n method = dist[method];\n\n var as = _.as || ['value', 'density'],\n domain = _.extent || extent(dist.data()),\n values = sampleCurve(method, domain, minsteps, maxsteps).map(v => {\n var tuple = {};\n tuple[as[0]] = v[0];\n tuple[as[1]] = v[1];\n return ingest(tuple);\n });\n\n if (this.value) out.rem = this.value;\n this.value = out.add = out.source = values;\n }\n\n return out;\n};\n\nfunction source(pulse) {\n return function() { return pulse.materialize(pulse.SOURCE).source; };\n}\n","import {Operator} from 'vega-dataflow';\nimport {accessor, accessorFields, accessorName, inherits} from 'vega-util';\n\n/**\n * Wraps an expression function with access to external parameters.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function} params.expr - The expression function. The\n * function should accept both a datum and a parameter object.\n * This operator's value will be a new function that wraps the\n * expression function with access to this operator's parameters.\n */\nexport default function Expression(params) {\n Operator.call(this, null, update, params);\n this.modified(true);\n}\n\ninherits(Expression, Operator);\n\nfunction update(_) {\n var expr = _.expr;\n return this.value && !_.modified('expr')\n ? this.value\n : accessor(\n datum => expr(datum, _),\n accessorFields(expr),\n accessorName(expr)\n );\n}\n","import {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Computes extents (min/max) for a data field.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The field over which to compute extends.\n */\nexport default function Extent(params) {\n Transform.call(this, [undefined, undefined], params);\n}\n\nExtent.Definition = {\n \"type\": \"Extent\",\n \"metadata\": {},\n \"params\": [\n { \"name\": \"field\", \"type\": \"field\", \"required\": true }\n ]\n};\n\nvar prototype = inherits(Extent, Transform);\n\nprototype.transform = function(_, pulse) {\n var extent = this.value,\n field = _.field,\n min = extent[0],\n max = extent[1],\n mod;\n\n mod = pulse.changed()\n || pulse.modified(field.fields)\n || _.modified('field');\n\n if (mod || min == null) {\n min = +Infinity;\n max = -Infinity;\n }\n\n pulse.visit(mod ? pulse.SOURCE : pulse.ADD, function(t) {\n var v = field(t);\n if (v != null) {\n // coerce to number\n v = +v;\n // NaNs will fail all comparisons!\n if (v < min) min = v;\n if (v > max) max = v;\n }\n });\n\n if (!isFinite(min) || !isFinite(max)) {\n min = max = undefined;\n }\n this.value = [min, max];\n};\n","import {Operator} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Provides a bridge between a parent transform and a target subflow that\n * consumes only a subset of the tuples that pass through the parent.\n * @constructor\n * @param {Pulse} pulse - A pulse to use as the value of this operator.\n * @param {Transform} parent - The parent transform (typically a Facet instance).\n * @param {Transform} target - A transform that receives the subflow of tuples.\n */\nexport default function Subflow(pulse, parent) {\n Operator.call(this, pulse);\n this.parent = parent;\n}\n\nvar prototype = inherits(Subflow, Operator);\n\nprototype.connect = function(target) {\n this.targets().add(target);\n return (target.source = this);\n};\n\n/**\n * Add an 'add' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being added.\n */\nprototype.add = function(t) {\n this.value.add.push(t);\n};\n\n/**\n * Add a 'rem' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being removed.\n */\nprototype.rem = function(t) {\n this.value.rem.push(t);\n};\n\n/**\n * Add a 'mod' tuple to the subflow pulse.\n * @param {Tuple} t - The tuple being modified.\n */\nprototype.mod = function(t) {\n this.value.mod.push(t);\n};\n\n/**\n * Re-initialize this operator's pulse value.\n * @param {Pulse} pulse - The pulse to copy from.\n * @see Pulse.init\n */\nprototype.init = function(pulse) {\n this.value.init(pulse, pulse.NO_SOURCE);\n};\n\n/**\n * Evaluate this operator. This method overrides the\n * default behavior to simply return the contained pulse value.\n * @return {Pulse}\n */\nprototype.evaluate = function() {\n // assert: this.value.stamp === pulse.stamp\n return this.value;\n};\n","import Subflow from './Subflow';\nimport {Transform, tupleid} from 'vega-dataflow';\nimport {fastmap, inherits} from 'vega-util';\n\n/**\n * Facets a dataflow into a set of subflows based on a key.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Dataflow, string): Operator} params.subflow - A function\n * that generates a subflow of operators and returns its root operator.\n * @param {function(object): *} params.key - The key field to facet by.\n */\nexport default function Facet(params) {\n Transform.call(this, {}, params);\n this._keys = fastmap(); // cache previously calculated key values\n\n // keep track of active subflows, use as targets array for listeners\n // this allows us to limit propagation to only updated subflows\n var a = this._targets = [];\n a.active = 0;\n a.forEach = function(f) {\n for (var i=0, n=a.active; i df.cleanThreshold) df.runAfter(cache.clean);\n return pulse;\n};\n","import {Operator} from 'vega-dataflow';\nimport {array, field, inherits, isArray} from 'vega-util';\n\n/**\n * Generates one or more field accessor functions.\n * If the 'name' parameter is an array, an array of field accessors\n * will be created and the 'as' parameter will be ignored.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.name - The field name(s) to access.\n * @param {string} params.as - The accessor function name.\n */\nexport default function Field(params) {\n Operator.call(this, null, update, params);\n}\n\ninherits(Field, Operator);\n\nfunction update(_) {\n return (this.value && !_.modified()) ? this.value\n : isArray(_.name) ? array(_.name).map(function(f) { return field(f); })\n : field(_.name, _.as);\n}\n","import {Transform, tupleid} from 'vega-dataflow';\nimport {fastmap, inherits} from 'vega-util';\n\n/**\n * Filters data tuples according to a predicate function.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.expr - The predicate expression function\n * that determines a tuple's filter status. Truthy values pass the filter.\n */\nexport default function Filter(params) {\n Transform.call(this, fastmap(), params);\n}\n\nFilter.Definition = {\n \"type\": \"Filter\",\n \"metadata\": {\"changes\": true},\n \"params\": [\n { \"name\": \"expr\", \"type\": \"expr\", \"required\": true }\n ]\n};\n\nvar prototype = inherits(Filter, Transform);\n\nprototype.transform = function(_, pulse) {\n var df = pulse.dataflow,\n cache = this.value, // cache ids of filtered tuples\n output = pulse.fork(),\n add = output.add,\n rem = output.rem,\n mod = output.mod,\n test = _.expr,\n isMod = true;\n\n pulse.visit(pulse.REM, function(t) {\n var id = tupleid(t);\n if (!cache.has(id)) rem.push(t);\n else cache.delete(id);\n });\n\n pulse.visit(pulse.ADD, function(t) {\n if (test(t, _)) add.push(t);\n else cache.set(tupleid(t), 1);\n });\n\n function revisit(t) {\n var id = tupleid(t),\n b = test(t, _),\n s = cache.get(id);\n if (b && s) {\n cache.delete(id);\n add.push(t);\n } else if (!b && !s) {\n cache.set(id, 1);\n rem.push(t);\n } else if (isMod && b && !s) {\n mod.push(t);\n }\n }\n\n pulse.visit(pulse.MOD, revisit);\n\n if (_.modified()) {\n isMod = false;\n pulse.visit(pulse.REFLOW, revisit);\n }\n\n if (cache.empty > df.cleanThreshold) df.runAfter(cache.clean);\n return output;\n};\n","import {accessorName} from 'vega-util';\n\n// use either provided alias or accessor field name\nexport function fieldNames(fields, as) {\n if (!fields) return null;\n return fields.map(function(f, i) {\n return as[i] || accessorName(f);\n });\n}\n","import {fieldNames} from './util/util';\nimport {derive, Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Flattens array-typed field values into new data objects.\n * If multiple fields are specified, they are treated as parallel arrays,\n * with output values included for each matching index (or null if missing).\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - An array of field\n * accessors for the tuple fields that should be flattened.\n * @param {Array} [params.as] - Output field names for flattened\n * array fields. Any unspecified fields will use the field name provided\n * by the fields accessors.\n */\nexport default function Flatten(params) {\n Transform.call(this, [], params);\n}\n\nFlatten.Definition = {\n \"type\": \"Flatten\",\n \"metadata\": {\"generates\": true},\n \"params\": [\n { \"name\": \"fields\", \"type\": \"field\", \"array\": true, \"required\": true },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true }\n ]\n};\n\nvar prototype = inherits(Flatten, Transform);\n\nprototype.transform = function(_, pulse) {\n var out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n as = fieldNames(fields, _.as || []),\n m = as.length;\n\n // remove any previous results\n out.rem = this.value;\n\n // generate flattened tuples\n pulse.visit(pulse.SOURCE, function(t) {\n var arrays = fields.map(function(f) { return f(t); }),\n maxlen = arrays.reduce(function(l, a) { return Math.max(l, a.length); }, 0),\n i = 0, j, d, v;\n\n for (; i} [params.as] - Output field names for folded key\n * and value fields, defaults to ['key', 'value'].\n */\nexport default function Fold(params) {\n Transform.call(this, [], params);\n}\n\nFold.Definition = {\n \"type\": \"Fold\",\n \"metadata\": {\"generates\": true},\n \"params\": [\n { \"name\": \"fields\", \"type\": \"field\", \"array\": true, \"required\": true },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": 2, \"default\": [\"key\", \"value\"] }\n ]\n};\n\nvar prototype = inherits(Fold, Transform);\n\nprototype.transform = function(_, pulse) {\n var out = pulse.fork(pulse.NO_SOURCE),\n fields = _.fields,\n fnames = fields.map(accessorName),\n as = _.as || ['key', 'value'],\n k = as[0],\n v = as[1],\n n = fields.length;\n\n out.rem = this.value;\n\n pulse.visit(pulse.SOURCE, function(t) {\n for (var i=0, d; i 0) {\n // need more tuples, generate and add\n for (add=[]; --num >= 0;) {\n add.push(t = ingest(gen(_)));\n data.push(t);\n }\n out.add = out.add.length\n ? out.materialize(out.ADD).add.concat(add)\n : add;\n } else {\n // need fewer tuples, remove\n rem = data.slice(0, -num);\n out.rem = out.rem.length\n ? out.materialize(out.REM).rem.concat(rem)\n : rem;\n data = data.slice(-num);\n }\n\n out.source = this.value = data;\n return out;\n};\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","export default function(values, valueof) {\n let min;\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n return [min, max];\n}\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","import number from \"./number.js\";\n\nexport default function quantile(values, p, valueof = number) {\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","export default function max(values, valueof) {\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (max < value || (max === undefined && value >= value))) {\n max = value;\n }\n }\n }\n return max;\n}\n","export default function mean(values, valueof) {\n let count = 0;\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n ++count, sum += value;\n }\n }\n }\n if (count) return sum / count;\n}\n","import ascending from \"./ascending.js\";\n\n// Based on https://github.com/mourner/quickselect\n// ISC license, Copyright 2018 Vladimir Agafonkin.\nexport default function quickselect(array, k, left = 0, right = array.length - 1, compare = ascending) {\n while (right > left) {\n if (right - left > 600) {\n const n = right - left + 1;\n const m = k - left + 1;\n const z = Math.log(n);\n const s = 0.5 * Math.exp(2 * z / 3);\n const sd = 0.5 * Math.sqrt(z * s * (n - s) / n) * (m - n / 2 < 0 ? -1 : 1);\n const newLeft = Math.max(left, Math.floor(k - m * s / n + sd));\n const newRight = Math.min(right, Math.floor(k + (n - m) * s / n + sd));\n quickselect(array, k, newLeft, newRight, compare);\n }\n\n const t = array[k];\n let i = left;\n let j = right;\n\n swap(array, left, k);\n if (compare(array[right], t) > 0) swap(array, left, right);\n\n while (i < j) {\n swap(array, i, j), ++i, --j;\n while (compare(array[i], t) < 0) ++i;\n while (compare(array[j], t) > 0) --j;\n }\n\n if (compare(array[left], t) === 0) swap(array, left, j);\n else ++j, swap(array, j, right);\n\n if (j <= k) left = j + 1;\n if (k <= j) right = j - 1;\n }\n return array;\n}\n\nfunction swap(array, i, j) {\n const t = array[i];\n array[i] = array[j];\n array[j] = t;\n}\n","import quantile from \"./quantile.js\";\nimport quickselect from \"./quickselect.js\";\n\nfunction* numbers(values, valueof) {\n if (valueof === undefined) {\n for (let value of values) {\n if (value != null && (value = +value) >= value) {\n yield value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null && (value = +value) >= value) {\n yield value;\n }\n }\n }\n}\n\nexport default function(values, valueof) {\n values = Float64Array.from(numbers(values, valueof));\n if (!values.length) return;\n const n = values.length;\n const i = n >> 1;\n quickselect(values, i - 1, 0);\n if ((n & 1) === 0) quickselect(values, i, i);\n return quantile(values, 0.5);\n}\n","export default function min(values, valueof) {\n let min;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null\n && (min > value || (min === undefined && value >= value))) {\n min = value;\n }\n }\n }\n return min;\n}\n","import {ingest, Transform} from 'vega-dataflow';\nimport {accessorName, error, inherits} from 'vega-util';\nimport {mean, min, max, median} from 'd3-array';\n\nvar Methods = {\n value: 'value',\n median: median,\n mean: mean,\n min: min,\n max: max\n};\n\nvar Empty = [];\n\n/**\n * Impute missing values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to impute.\n * @param {Array} [params.groupby] - An array of\n * accessors to determine series within which to perform imputation.\n * @param {function(object): *} params.key - An accessor for a key value.\n * Each key value should be unique within a group. New tuples will be\n * imputed for any key values that are not found within a group.\n * @param {Array<*>} [params.keyvals] - Optional array of required key\n * values. New tuples will be imputed for any key values that are not\n * found within a group. In addition, these values will be automatically\n * augmented with the key values observed in the input data.\n * @param {string} [method='value'] - The imputation method to use. One of\n * 'value', 'mean', 'median', 'max', 'min'.\n * @param {*} [value=0] - The constant value to use for imputation\n * when using method 'value'.\n */\nexport default function Impute(params) {\n Transform.call(this, [], params);\n}\n\nImpute.Definition = {\n \"type\": \"Impute\",\n \"metadata\": {\"changes\": true},\n \"params\": [\n { \"name\": \"field\", \"type\": \"field\", \"required\": true },\n { \"name\": \"key\", \"type\": \"field\", \"required\": true },\n { \"name\": \"keyvals\", \"array\": true },\n { \"name\": \"groupby\", \"type\": \"field\", \"array\": true },\n { \"name\": \"method\", \"type\": \"enum\", \"default\": \"value\",\n \"values\": [\"value\", \"mean\", \"median\", \"max\", \"min\"] },\n { \"name\": \"value\", \"default\": 0 }\n ]\n};\n\nvar prototype = inherits(Impute, Transform);\n\nfunction getValue(_) {\n var m = _.method || Methods.value, v;\n\n if (Methods[m] == null) {\n error('Unrecognized imputation method: ' + m);\n } else if (m === Methods.value) {\n v = _.value !== undefined ? _.value : 0;\n return function() { return v; };\n } else {\n return Methods[m];\n }\n}\n\nfunction getField(_) {\n var f = _.field;\n return function(t) { return t ? f(t) : NaN; };\n}\n\nprototype.transform = function(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n impute = getValue(_),\n field = getField(_),\n fName = accessorName(_.field),\n kName = accessorName(_.key),\n gNames = (_.groupby || []).map(accessorName),\n groups = partition(pulse.source, _.groupby, _.key, _.keyvals),\n curr = [],\n prev = this.value,\n m = groups.domain.length,\n group, value, gVals, kVal, g, i, j, l, n, t;\n\n for (g=0, l=groups.length; g} [params.groupby] - An array of accessors\n * to groupby.\n * @param {function(object): *} params.field - An accessor for the data field\n * to estimate.\n * @param {number} [params.bandwidth=0] - The KDE kernal bandwidth.\n * If zero of unspecified, the bandwidth is automatically determined.\n * @param {string} [params.cumulative=false] - A boolean flag indicating if a\n * density (false) or cumulative distribution (true) should be generated.\n * @param {Array} [params.extent] - The domain extent over which to\n * plot the density. If unspecified, the [min, max] data extent is used.\n * @param {number} [params.minsteps=25] - The minimum number of curve samples\n * for plotting the density.\n * @param {number} [params.maxsteps=200] - The maximum number of curve samples\n * for plotting the density.\n * @param {number} [params.steps] - The exact number of curve samples for\n * plotting the density. If specified, overrides both minsteps and maxsteps\n * to set an exact number of uniform samples. Useful in conjunction with\n * a fixed extent to ensure consistent sample points for stacked densities.\n */\nexport default function KDE(params) {\n Transform.call(this, null, params);\n}\n\nKDE.Definition = {\n \"type\": \"KDE\",\n \"metadata\": {\"generates\": true},\n \"params\": [\n { \"name\": \"groupby\", \"type\": \"field\", \"array\": true },\n { \"name\": \"field\", \"type\": \"field\", \"required\": true },\n { \"name\": \"cumulative\", \"type\": \"boolean\", \"default\": false },\n { \"name\": \"counts\", \"type\": \"boolean\", \"default\": false },\n { \"name\": \"bandwidth\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"extent\", \"type\": \"number\", \"array\": true, \"length\": 2 },\n { \"name\": \"steps\", \"type\": \"number\" },\n { \"name\": \"minsteps\", \"type\": \"number\", \"default\": 25 },\n { \"name\": \"maxsteps\", \"type\": \"number\", \"default\": 200 },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"default\": [\"value\", \"density\"] }\n ]\n};\n\nvar prototype = inherits(KDE, Transform);\n\nprototype.transform = function(_, pulse) {\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n\n if (!this.value || pulse.changed() || _.modified()) {\n const source = pulse.materialize(pulse.SOURCE).source,\n groups = partition(source, _.groupby, _.field),\n names = (_.groupby || []).map(accessorName),\n bandwidth = _.bandwidth,\n method = _.cumulative ? 'cdf' : 'pdf',\n minsteps = _.steps || _.minsteps || 25,\n maxsteps = _.steps || _.maxsteps || 200,\n as = _.as || ['value', 'density'],\n values = [];\n\n if (method !== 'pdf' && method !== 'cdf') {\n error('Invalid density method: ' + method);\n }\n\n groups.forEach(g => {\n const density = randomKDE(g, bandwidth)[method],\n scale = _.counts ? g.length : 1,\n domain = _.extent || extent(g);\n\n sampleCurve(density, domain, minsteps, maxsteps).forEach(v => {\n const t = {};\n for (let i=0; i} params.fields - The field name(s) for the key function.\n * @param {boolean} params.flat - A boolean flag indicating if the field names\n * should be treated as flat property names, side-stepping nested field\n * lookups normally indicated by dot or bracket notation.\n */\nexport default function Key(params) {\n Operator.call(this, null, update, params);\n}\n\ninherits(Key, Operator);\n\nfunction update(_) {\n return (this.value && !_.modified()) ? this.value : key(_.fields, _.flat);\n}\n","import {ingest, Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Load and parse data from an external source. Marshalls parameter\n * values and then invokes the Dataflow request method.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.url - The URL to load from.\n * @param {object} params.format - The data format options.\n */\nexport default function Load(params) {\n Transform.call(this, [], params);\n}\n\nvar prototype = inherits(Load, Transform);\n\nprototype.transform = function(_, pulse) {\n const df = pulse.dataflow;\n\n if (_.values) {\n // parse and ingest values\n return output(this, pulse, df.parse(_.values, _.format));\n } else {\n // return promise for async loading\n return df.request(_.url, _.format)\n .then(res => output(this, pulse, res.data || []));\n }\n};\n\nfunction output(op, pulse, data) {\n data.forEach(ingest);\n const out = pulse.fork(pulse.NO_FIELDS & pulse.NO_SOURCE);\n out.rem = op.value;\n op.value = out.add = out.source = data;\n return out;\n}\n","import {Transform} from 'vega-dataflow';\nimport {accessorName, error, inherits} from 'vega-util';\n\n/**\n * Extend tuples by joining them with values from a lookup table.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Map} params.index - The lookup table map.\n * @param {Array} params.as - Output field names for each lookup value.\n * @param {*} [params.default] - A default value to use if lookup fails.\n */\nexport default function Lookup(params) {\n Transform.call(this, {}, params);\n}\n\nLookup.Definition = {\n \"type\": \"Lookup\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"index\", \"type\": \"index\", \"params\": [\n {\"name\": \"from\", \"type\": \"data\", \"required\": true },\n {\"name\": \"key\", \"type\": \"field\", \"required\": true }\n ] },\n { \"name\": \"values\", \"type\": \"field\", \"array\": true },\n { \"name\": \"fields\", \"type\": \"field\", \"array\": true, \"required\": true },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true },\n { \"name\": \"default\", \"default\": null }\n ]\n};\n\nvar prototype = inherits(Lookup, Transform);\n\nprototype.transform = function(_, pulse) {\n var out = pulse,\n as = _.as,\n keys = _.fields,\n index = _.index,\n values = _.values,\n defaultValue = _.default==null ? null : _.default,\n reset = _.modified(),\n flag = reset ? pulse.SOURCE : pulse.ADD,\n n = keys.length,\n set, m, mods;\n\n if (values) {\n m = values.length;\n\n if (n > 1 && !as) {\n error('Multi-field lookup requires explicit \"as\" parameter.');\n }\n if (as && as.length !== n * m) {\n error('The \"as\" parameter has too few output field names.');\n }\n as = as || values.map(accessorName);\n\n set = function(t) {\n for (var i=0, k=0, j, v; i>} params.extents - The input extents.\n */\nexport default function MultiExtent(params) {\n Operator.call(this, null, update, params);\n}\n\ninherits(MultiExtent, Operator);\n\nfunction update(_) {\n if (this.value && !_.modified()) {\n return this.value;\n }\n\n var min = +Infinity,\n max = -Infinity,\n ext = _.extents,\n i, n, e;\n\n for (i=0, n=ext.length; i max) max = e[1];\n }\n return [min, max];\n}\n","import {Operator} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Merge a collection of value arrays.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array>} params.values - The input value arrrays.\n */\nexport default function MultiValues(params) {\n Operator.call(this, null, update, params);\n}\n\ninherits(MultiValues, Operator);\n\nfunction update(_) {\n return (this.value && !_.modified())\n ? this.value\n : _.values.reduce(function(data, _) { return data.concat(_); }, []);\n}\n","import {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Operator whose value is simply its parameter hash. This operator is\n * useful for enabling reactive updates to values of nested objects.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nexport default function Params(params) {\n Transform.call(this, null, params);\n}\n\ninherits(Params, Transform);\n\nParams.prototype.transform = function(_, pulse) {\n this.modified(_.modified());\n this.value = _;\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS); // do not pass tuples\n};\n","import Aggregate from './Aggregate';\nimport {ValidAggregateOps} from './util/AggregateOps';\nimport {accessor, accessorFields, inherits} from 'vega-util';\n\n/**\n * Aggregate and pivot selected field values to become new fields.\n * This operator is useful to construction cross-tabulations.\n * @constructor\n * @param {Array} [params.groupby] - An array of accessors\n * to groupby. These fields act just like groupby fields of an Aggregate transform.\n * @param {function(object): *} params.field - The field to pivot on. The unique\n * values of this field become new field names in the output stream.\n * @param {function(object): *} params.value - The field to populate pivoted fields.\n * The aggregate values of this field become the values of the new pivoted fields.\n * @param {string} [params.op] - The aggregation operation for the value field,\n * applied per cell in the output stream. The default is \"sum\".\n * @param {number} [params.limit] - An optional parameter indicating the maximum\n * number of pivoted fields to generate. The pivoted field names are sorted in\n * ascending order prior to enforcing the limit.\n */\nexport default function Pivot(params) {\n Aggregate.call(this, params);\n}\n\nPivot.Definition = {\n \"type\": \"Pivot\",\n \"metadata\": {\"generates\": true, \"changes\": true},\n \"params\": [\n { \"name\": \"groupby\", \"type\": \"field\", \"array\": true },\n { \"name\": \"field\", \"type\": \"field\", \"required\": true },\n { \"name\": \"value\", \"type\": \"field\", \"required\": true },\n { \"name\": \"op\", \"type\": \"enum\", \"values\": ValidAggregateOps, \"default\": \"sum\" },\n { \"name\": \"limit\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"key\", \"type\": \"field\" }\n ]\n};\n\nvar prototype = inherits(Pivot, Aggregate);\n\nprototype._transform = prototype.transform;\n\nprototype.transform = function(_, pulse) {\n return this._transform(aggregateParams(_, pulse), pulse);\n};\n\n// Shoehorn a pivot transform into an aggregate transform!\n// First collect all unique pivot field values.\n// Then generate aggregate fields for each output pivot field.\nfunction aggregateParams(_, pulse) {\n var key = _.field,\n value = _.value,\n op = (_.op === 'count' ? '__count__' : _.op) || 'sum',\n fields = accessorFields(key).concat(accessorFields(value)),\n keys = pivotKeys(key, _.limit || 0, pulse);\n\n return {\n key: _.key,\n groupby: _.groupby,\n ops: keys.map(function() { return op; }),\n fields: keys.map(function(k) { return get(k, key, value, fields); }),\n as: keys.map(function(k) { return k + ''; }),\n modified: _.modified.bind(_)\n };\n}\n\n// Generate aggregate field accessor.\n// Output NaN for non-existent values; aggregator will ignore!\nfunction get(k, key, value, fields) {\n return accessor(\n function(d) { return key(d) === k ? value(d) : NaN; },\n fields,\n k + ''\n );\n}\n\n// Collect (and optionally limit) all unique pivot values.\nfunction pivotKeys(key, limit, pulse) {\n var map = {},\n list = [];\n\n pulse.visit(pulse.SOURCE, function(t) {\n var k = key(t);\n if (!map[k]) {\n map[k] = 1;\n list.push(k);\n }\n });\n\n // TODO? Move this comparator to vega-util?\n list.sort(function(u, v) {\n return (uv||v==null) && u!=null ? 1\n : ((v=v instanceof Date?+v:v),(u=u instanceof Date?+u:u))!==u && v===v ? -1\n : v!==v && u===u ? 1 : 0;\n });\n\n return limit ? list.slice(0, limit) : list;\n}\n","import Facet from './Facet';\nimport {ingest, tupleid} from 'vega-dataflow';\nimport {accessorFields, error, inherits} from 'vega-util';\n\n/**\n * Partitions pre-faceted data into tuple subflows.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(Dataflow, string): Operator} params.subflow - A function\n * that generates a subflow of operators and returns its root operator.\n * @param {function(object): Array} params.field - The field\n * accessor for an array of subflow tuple objects.\n */\nexport default function PreFacet(params) {\n Facet.call(this, params);\n}\n\nvar prototype = inherits(PreFacet, Facet);\n\nprototype.transform = function(_, pulse) {\n var self = this,\n flow = _.subflow,\n field = _.field;\n\n if (_.modified('field') || field && pulse.modified(accessorFields(field))) {\n error('PreFacet does not support field modification.');\n }\n\n this._targets.active = 0; // reset list of active subflows\n\n pulse.visit(pulse.MOD, function(t) {\n var sf = self.subflow(tupleid(t), flow, pulse, t);\n field ? field(t).forEach(function(_) { sf.mod(_); }) : sf.mod(t);\n });\n\n pulse.visit(pulse.ADD, function(t) {\n var sf = self.subflow(tupleid(t), flow, pulse, t);\n field ? field(t).forEach(function(_) { sf.add(ingest(_)); }) : sf.add(t);\n });\n\n pulse.visit(pulse.REM, function(t) {\n var sf = self.subflow(tupleid(t), flow, pulse, t);\n field ? field(t).forEach(function(_) { sf.rem(_); }) : sf.rem(t);\n });\n\n return pulse;\n};\n","import {fieldNames} from './util/util';\nimport {ingest, rederive, Transform, tupleid} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Performs a relational projection, copying selected fields from source\n * tuples to a new set of derived tuples.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.as] - Output field names for each projected\n * field. Any unspecified fields will use the field name provided by\n * the field accessor.\n */\nexport default function Project(params) {\n Transform.call(this, null, params);\n}\n\nProject.Definition = {\n \"type\": \"Project\",\n \"metadata\": {\"generates\": true, \"changes\": true},\n \"params\": [\n { \"name\": \"fields\", \"type\": \"field\", \"array\": true },\n { \"name\": \"as\", \"type\": \"string\", \"null\": true, \"array\": true },\n ]\n};\n\nvar prototype = inherits(Project, Transform);\n\nprototype.transform = function(_, pulse) {\n var fields = _.fields,\n as = fieldNames(_.fields, _.as || []),\n derive = fields\n ? function(s, t) { return project(s, t, fields, as); }\n : rederive,\n out, lut;\n\n if (this.value) {\n lut = this.value;\n } else {\n pulse = pulse.addAll();\n lut = this.value = {};\n }\n\n out = pulse.fork(pulse.NO_SOURCE);\n\n pulse.visit(pulse.REM, function(t) {\n var id = tupleid(t);\n out.rem.push(lut[id]);\n lut[id] = null;\n });\n\n pulse.visit(pulse.ADD, function(t) {\n var dt = derive(t, ingest({}));\n lut[tupleid(t)] = dt;\n out.add.push(dt);\n });\n\n pulse.visit(pulse.MOD, function(t) {\n out.mod.push(derive(t, lut[tupleid(t)]));\n });\n\n return out;\n};\n\nfunction project(s, t, fields, as) {\n for (var i=0, n=fields.length; i= cap) {\n p = res[idx];\n if (map[tupleid(p)]) out.rem.push(p); // eviction\n res[idx] = t;\n }\n }\n ++cnt;\n }\n\n if (pulse.rem.length) {\n // find all tuples that should be removed, add to output\n pulse.visit(pulse.REM, function(t) {\n var id = tupleid(t);\n if (map[id]) {\n map[id] = -1;\n out.rem.push(t);\n }\n --cnt;\n });\n\n // filter removed tuples out of the sample reservoir\n res = res.filter(function(t) { return map[tupleid(t)] !== -1; });\n }\n\n if ((pulse.rem.length || mod) && res.length < num && pulse.source) {\n // replenish sample if backing data source is available\n cap = cnt = res.length;\n pulse.visit(pulse.SOURCE, function(t) {\n // update, but skip previously sampled tuples\n if (!map[tupleid(t)]) update(t);\n });\n cap = -1;\n }\n\n if (mod && res.length > num) {\n for (var i=0, n=res.length-num; i df.cleanThreshold) df.runAfter(index.clean);\n return pulse.fork();\n};\n","import {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Extracts an array of values. Assumes the source data has already been\n * reduced as needed (e.g., by an upstream Aggregate transform).\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The domain field to extract.\n * @param {function(*,*): number} [params.sort] - An optional\n * comparator function for sorting the values. The comparator will be\n * applied to backing tuples prior to value extraction.\n */\nexport default function Values(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(Values, Transform);\n\nprototype.transform = function(_, pulse) {\n var run = !this.value\n || _.modified('field')\n || _.modified('sort')\n || pulse.changed()\n || (_.sort && pulse.modified(_.sort.fields));\n\n if (run) {\n this.value = (_.sort\n ? pulse.source.slice().sort(_.sort)\n : pulse.source).map(_.field);\n }\n};\n","import {error, zero} from 'vega-util';\n\nexport function WindowOp(op, field, param, as) {\n let fn = WindowOps[op](field, param);\n return {\n init: fn.init || zero,\n update: function(w, t) { t[as] = fn.next(w); }\n };\n}\n\nexport const WindowOps = {\n row_number: function() {\n return {\n next: w => w.index + 1\n };\n },\n rank: function() {\n let rank;\n return {\n init: () => rank = 1,\n next: w => {\n let i = w.index,\n data = w.data;\n return (i && w.compare(data[i - 1], data[i])) ? (rank = i + 1) : rank;\n }\n };\n },\n dense_rank: function() {\n let drank;\n return {\n init: () => drank = 1,\n next: w => {\n let i = w.index,\n d = w.data;\n return (i && w.compare(d[i - 1], d[i])) ? ++drank : drank;\n }\n };\n },\n percent_rank: function() {\n let rank = WindowOps.rank(),\n next = rank.next;\n return {\n init: rank.init,\n next: w => (next(w) - 1) / (w.data.length - 1)\n };\n },\n cume_dist: function() {\n let cume;\n return {\n init: () => cume = 0,\n next: w => {\n let i = w.index,\n d = w.data,\n c = w.compare;\n if (cume < i) {\n while (i + 1 < d.length && !c(d[i], d[i + 1])) ++i;\n cume = i;\n }\n return (1 + cume) / d.length;\n }\n };\n },\n ntile: function(field, num) {\n num = +num;\n if (!(num > 0)) error('ntile num must be greater than zero.');\n let cume = WindowOps.cume_dist(),\n next = cume.next;\n return {\n init: cume.init,\n next: w => Math.ceil(num * next(w))\n };\n },\n\n lag: function(field, offset) {\n offset = +offset || 1;\n return {\n next: w => {\n let i = w.index - offset;\n return i >= 0 ? field(w.data[i]) : null;\n }\n };\n },\n lead: function(field, offset) {\n offset = +offset || 1;\n return {\n next: w => {\n let i = w.index + offset,\n d = w.data;\n return i < d.length ? field(d[i]) : null;\n }\n };\n },\n\n first_value: function(field) {\n return {\n next: w => field(w.data[w.i0])\n };\n },\n last_value: function(field) {\n return {\n next: w => field(w.data[w.i1 - 1])\n }\n },\n nth_value: function(field, nth) {\n nth = +nth;\n if (!(nth > 0)) error('nth_value nth must be greater than zero.');\n return {\n next: w => {\n let i = w.i0 + (nth - 1);\n return i < w.i1 ? field(w.data[i]) : null;\n }\n }\n },\n\n prev_value: function(field) {\n let prev = null;\n return {\n next: w => {\n let v = field(w.data[w.index]);\n return v != null ? (prev = v) : prev;\n }\n }\n },\n next_value: function(field) {\n let v = null,\n i = -1;\n return {\n next: w => {\n let d = w.data;\n return w.index <= i ? v\n : (i = find(field, d, w.index)) < 0\n ? (i = d.length, v = null)\n : (v = field(d[i]));\n }\n };\n },\n\n};\n\nfunction find(field, data, index) {\n for (let n = data.length; index < n; ++index) {\n let v = field(data[index]);\n if (v != null) return index;\n }\n return -1;\n}\n\nexport var ValidWindowOps = Object.keys(WindowOps);\n","import {createMeasure, compileMeasures, measureName} from './AggregateOps';\nimport TupleStore from './TupleStore';\nimport {WindowOp, WindowOps} from './WindowOps';\nimport {accessorFields, accessorName, array, error} from 'vega-util';\n\nexport default function WindowState(_) {\n let self = this,\n ops = array(_.ops),\n fields = array(_.fields),\n params = array(_.params),\n as = array(_.as),\n outputs = self.outputs = [],\n windows = self.windows = [],\n inputs = {},\n map = {},\n countOnly = true,\n counts = [],\n measures = [];\n\n function visitInputs(f) {\n array(accessorFields(f)).forEach(_ => inputs[_] = 1);\n }\n visitInputs(_.sort);\n\n ops.forEach(function(op, i) {\n let field = fields[i],\n mname = accessorName(field),\n name = measureName(op, mname, as[i]);\n\n visitInputs(field);\n outputs.push(name);\n\n // Window operation\n if (WindowOps.hasOwnProperty(op)) {\n windows.push(WindowOp(op, fields[i], params[i], name));\n }\n\n // Aggregate operation\n else {\n if (field == null && op !== 'count') {\n error('Null aggregate field specified.');\n }\n if (op === 'count') {\n counts.push(name);\n return;\n }\n\n countOnly = false;\n let m = map[mname];\n if (!m) {\n m = (map[mname] = []);\n m.field = field;\n measures.push(m);\n }\n m.push(createMeasure(op, name));\n }\n });\n\n if (counts.length || measures.length) {\n self.cell = cell(measures, counts, countOnly);\n }\n\n self.inputs = Object.keys(inputs);\n}\n\nconst prototype = WindowState.prototype;\n\nprototype.init = function() {\n this.windows.forEach(_ => _.init());\n if (this.cell) this.cell.init();\n};\n\nprototype.update = function(w, t) {\n let self = this,\n cell = self.cell,\n wind = self.windows,\n data = w.data,\n m = wind && wind.length,\n j;\n\n if (cell) {\n for (j=w.p0; j compileMeasures(m, m.field));\n\n let cell = {\n num: 0,\n agg: null,\n store: false,\n count: counts\n };\n\n if (!countOnly) {\n var n = measures.length,\n a = cell.agg = Array(n),\n i = 0;\n for (; i} [params.groupby] - An array of accessors by which to partition tuples into separate windows.\n * @param {Array} params.ops - An array of strings indicating window operations to perform.\n * @param {Array} [params.fields] - An array of accessors\n * for data fields to use as inputs to window operations.\n * @param {Array<*>} [params.params] - An array of parameter values for window operations.\n * @param {Array} [params.as] - An array of output field names for window operations.\n * @param {Array} [params.frame] - Window frame definition as two-element array.\n * @param {boolean} [params.ignorePeers=false] - If true, base window frame boundaries on row\n * number alone, ignoring peers with identical sort values. If false (default),\n * the window boundaries will be adjusted to include peer values.\n */\nexport default function Window(params) {\n Transform.call(this, {}, params);\n this._mlen = 0;\n this._mods = [];\n}\n\nWindow.Definition = {\n \"type\": \"Window\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"sort\", \"type\": \"compare\" },\n { \"name\": \"groupby\", \"type\": \"field\", \"array\": true },\n { \"name\": \"ops\", \"type\": \"enum\", \"array\": true, \"values\": ValidWindowOps.concat(ValidAggregateOps) },\n { \"name\": \"params\", \"type\": \"number\", \"null\": true, \"array\": true },\n { \"name\": \"fields\", \"type\": \"field\", \"null\": true, \"array\": true },\n { \"name\": \"as\", \"type\": \"string\", \"null\": true, \"array\": true },\n { \"name\": \"frame\", \"type\": \"number\", \"null\": true, \"array\": true, \"length\": 2, \"default\": [null, 0] },\n { \"name\": \"ignorePeers\", \"type\": \"boolean\", \"default\": false }\n ]\n};\n\nvar prototype = inherits(Window, Transform);\n\nprototype.transform = function(_, pulse) {\n var self = this,\n state = self.state,\n mod = _.modified(),\n i, n;\n\n this.stamp = pulse.stamp;\n\n // initialize window state\n if (!state || mod) {\n state = self.state = new WindowState(_);\n }\n\n // retrieve group for a tuple\n var key = groupkey(_.groupby);\n function group(t) { return self.group(key(t)); }\n\n // partition input tuples\n if (mod || pulse.modified(state.inputs)) {\n self.value = {};\n pulse.visit(pulse.SOURCE, function(t) { group(t).add(t); });\n } else {\n pulse.visit(pulse.REM, function(t) { group(t).remove(t); });\n pulse.visit(pulse.ADD, function(t) { group(t).add(t); });\n }\n\n // perform window calculations for each modified partition\n for (i=0, n=self._mlen; i 0 && !c(d[r0], d[r0-1])) w.i0 = bisect.left(d, d[r0]);\n if (r1 < n && !c(d[r1], d[r1+1])) w.i1 = bisect.right(d, d[r1]);\n}\n","export const Top = 'top';\nexport const Left = 'left';\nexport const Right = 'right';\nexport const Bottom = 'bottom';\n\nexport const TopLeft = 'top-left';\nexport const TopRight = 'top-right';\nexport const BottomLeft = 'bottom-left';\nexport const BottomRight = 'bottom-right';\n\nexport const Start = 'start';\nexport const Middle = 'middle';\nexport const End = 'end';\n\nexport const X = 'x';\nexport const Y = 'y';\n\nexport const Group = 'group';\n\nexport const AxisRole = 'axis';\nexport const TitleRole = 'title';\nexport const FrameRole = 'frame';\nexport const ScopeRole = 'scope';\nexport const LegendRole = 'legend';\n\nexport const RowHeader = 'row-header';\nexport const RowFooter = 'row-footer';\nexport const RowTitle = 'row-title';\nexport const ColHeader = 'column-header';\nexport const ColFooter = 'column-footer';\nexport const ColTitle = 'column-title';\n\nexport const Padding = 'padding';\n\nexport const Symbols = 'symbol';\n\nexport const Fit = 'fit';\nexport const FitX = 'fit-x';\nexport const FitY = 'fit-y';\nexport const Pad = 'pad';\nexport const None = 'none';\n\nexport const All = 'all';\nexport const Each = 'each';\nexport const Flush = 'flush';\n\nexport const Column = 'column';\nexport const Row = 'row';\n","export default function Bounds(b) {\n this.clear();\n if (b) this.union(b);\n}\n\nvar prototype = Bounds.prototype;\n\nprototype.clone = function() {\n return new Bounds(this);\n};\n\nprototype.clear = function() {\n this.x1 = +Number.MAX_VALUE;\n this.y1 = +Number.MAX_VALUE;\n this.x2 = -Number.MAX_VALUE;\n this.y2 = -Number.MAX_VALUE;\n return this;\n};\n\nprototype.empty = function() {\n return (\n this.x1 === +Number.MAX_VALUE &&\n this.y1 === +Number.MAX_VALUE &&\n this.x2 === -Number.MAX_VALUE &&\n this.y2 === -Number.MAX_VALUE\n );\n};\n\nprototype.equals = function(b) {\n return (\n this.x1 === b.x1 &&\n this.y1 === b.y1 &&\n this.x2 === b.x2 &&\n this.y2 === b.y2\n );\n};\n\nprototype.set = function(x1, y1, x2, y2) {\n if (x2 < x1) {\n this.x2 = x1;\n this.x1 = x2;\n } else {\n this.x1 = x1;\n this.x2 = x2;\n }\n if (y2 < y1) {\n this.y2 = y1;\n this.y1 = y2;\n } else {\n this.y1 = y1;\n this.y2 = y2;\n }\n return this;\n};\n\nprototype.add = function(x, y) {\n if (x < this.x1) this.x1 = x;\n if (y < this.y1) this.y1 = y;\n if (x > this.x2) this.x2 = x;\n if (y > this.y2) this.y2 = y;\n return this;\n};\n\nprototype.expand = function(d) {\n this.x1 -= d;\n this.y1 -= d;\n this.x2 += d;\n this.y2 += d;\n return this;\n};\n\nprototype.round = function() {\n this.x1 = Math.floor(this.x1);\n this.y1 = Math.floor(this.y1);\n this.x2 = Math.ceil(this.x2);\n this.y2 = Math.ceil(this.y2);\n return this;\n};\n\nprototype.translate = function(dx, dy) {\n this.x1 += dx;\n this.x2 += dx;\n this.y1 += dy;\n this.y2 += dy;\n return this;\n};\n\nprototype.rotate = function(angle, x, y) {\n const p = this.rotatedPoints(angle, x, y);\n return this.clear()\n .add(p[0], p[1])\n .add(p[2], p[3])\n .add(p[4], p[5])\n .add(p[6], p[7]);\n};\n\nprototype.rotatedPoints = function(angle, x, y) {\n var {x1, y1, x2, y2} = this,\n cos = Math.cos(angle),\n sin = Math.sin(angle),\n cx = x - x*cos + y*sin,\n cy = y - x*sin - y*cos;\n\n return [\n cos*x1 - sin*y1 + cx, sin*x1 + cos*y1 + cy,\n cos*x1 - sin*y2 + cx, sin*x1 + cos*y2 + cy,\n cos*x2 - sin*y1 + cx, sin*x2 + cos*y1 + cy,\n cos*x2 - sin*y2 + cx, sin*x2 + cos*y2 + cy\n ];\n};\n\nprototype.union = function(b) {\n if (b.x1 < this.x1) this.x1 = b.x1;\n if (b.y1 < this.y1) this.y1 = b.y1;\n if (b.x2 > this.x2) this.x2 = b.x2;\n if (b.y2 > this.y2) this.y2 = b.y2;\n return this;\n};\n\nprototype.intersect = function(b) {\n if (b.x1 > this.x1) this.x1 = b.x1;\n if (b.y1 > this.y1) this.y1 = b.y1;\n if (b.x2 < this.x2) this.x2 = b.x2;\n if (b.y2 < this.y2) this.y2 = b.y2;\n return this;\n};\n\nprototype.encloses = function(b) {\n return b && (\n this.x1 <= b.x1 &&\n this.x2 >= b.x2 &&\n this.y1 <= b.y1 &&\n this.y2 >= b.y2\n );\n};\n\nprototype.alignsWith = function(b) {\n return b && (\n this.x1 == b.x1 ||\n this.x2 == b.x2 ||\n this.y1 == b.y1 ||\n this.y2 == b.y2\n );\n};\n\nprototype.intersects = function(b) {\n return b && !(\n this.x2 < b.x1 ||\n this.x1 > b.x2 ||\n this.y2 < b.y1 ||\n this.y1 > b.y2\n );\n};\n\nprototype.contains = function(x, y) {\n return !(\n x < this.x1 ||\n x > this.x2 ||\n y < this.y1 ||\n y > this.y2\n );\n};\n\nprototype.width = function() {\n return this.x2 - this.x1;\n};\n\nprototype.height = function() {\n return this.y2 - this.y1;\n};\n","var gradient_id = 0;\n\nexport const patternPrefix = 'p_';\n\nexport function isGradient(value) {\n return value && value.gradient;\n}\n\nexport function gradientRef(g, defs, base) {\n let id = g.id,\n type = g.gradient,\n prefix = type === 'radial' ? patternPrefix : '';\n\n // check id, assign default values as needed\n if (!id) {\n id = g.id = 'gradient_' + (gradient_id++);\n if (type === 'radial') {\n g.x1 = get(g.x1, 0.5);\n g.y1 = get(g.y1, 0.5);\n g.r1 = get(g.r1, 0);\n g.x2 = get(g.x2, 0.5);\n g.y2 = get(g.y2, 0.5);\n g.r2 = get(g.r2, 0.5);\n prefix = patternPrefix;\n } else {\n g.x1 = get(g.x1, 0);\n g.y1 = get(g.y1, 0);\n g.x2 = get(g.x2, 1);\n g.y2 = get(g.y2, 0);\n }\n }\n\n // register definition\n defs[id] = g;\n\n // return url reference\n return 'url(' + (base || '') + '#' + prefix + id + ')';\n}\n\nfunction get(val, def) {\n return val != null ? val : def;\n}\n\nexport default function(p0, p1) {\n var stops = [], gradient;\n return gradient = {\n gradient: 'linear',\n x1: p0 ? p0[0] : 0,\n y1: p0 ? p0[1] : 0,\n x2: p1 ? p1[0] : 1,\n y2: p1 ? p1[1] : 0,\n stops: stops,\n stop: function(offset, color) {\n stops.push({offset: offset, color: color});\n return gradient;\n }\n };\n}\n","import Bounds from './Bounds';\n\nexport default function Item(mark) {\n this.mark = mark;\n this.bounds = (this.bounds || new Bounds());\n}\n","import Item from './Item';\nimport {inherits} from 'vega-util';\n\nexport default function GroupItem(mark) {\n Item.call(this, mark);\n this.items = (this.items || []);\n}\n\ninherits(GroupItem, Item);\n","export function domCanvas(w, h) {\n if (typeof document !== 'undefined' && document.createElement) {\n var c = document.createElement('canvas');\n if (c && c.getContext) {\n c.width = w;\n c.height = h;\n return c;\n }\n }\n return null;\n}\n\nexport function domImage() {\n return typeof Image !== 'undefined' ? Image : null;\n}\n","var NodeCanvas;\n\ntry {\n NodeCanvas = require('canvas');\n if (!(NodeCanvas && NodeCanvas.createCanvas)) {\n NodeCanvas = null;\n }\n} catch (error) {\n // do nothing\n}\n\nexport function nodeCanvas(w, h, type) {\n if (NodeCanvas) {\n try {\n return new NodeCanvas.Canvas(w, h, type);\n } catch (e) {\n // do nothing, return null on error\n }\n }\n return null;\n}\n\nexport function nodeImage() {\n return (NodeCanvas && NodeCanvas.Image) || null;\n}\n","import {domCanvas, domImage} from './src/domCanvas';\nimport {nodeCanvas, nodeImage} from './src/nodeCanvas';\n\nexport {domCanvas} from './src/domCanvas';\nexport {nodeCanvas} from './src/nodeCanvas';\n\nexport function canvas(w, h, type) {\n return domCanvas(w, h) || nodeCanvas(w, h, type) || null;\n}\n\nexport function image() {\n return domImage() || nodeImage() || null;\n}\n","import {image} from 'vega-canvas';\nimport {loader} from 'vega-loader';\n\nexport default function ResourceLoader(customLoader) {\n this._pending = 0;\n this._loader = customLoader || loader();\n}\n\nvar prototype = ResourceLoader.prototype;\n\nprototype.pending = function() {\n return this._pending;\n};\n\nfunction increment(loader) {\n loader._pending += 1;\n}\n\nfunction decrement(loader) {\n loader._pending -= 1;\n}\n\nprototype.sanitizeURL = function(uri) {\n var loader = this;\n increment(loader);\n\n return loader._loader.sanitize(uri, {context:'href'})\n .then(function(opt) {\n decrement(loader);\n return opt;\n })\n .catch(function() {\n decrement(loader);\n return null;\n });\n};\n\nprototype.loadImage = function(uri) {\n var loader = this,\n Image = image();\n increment(loader);\n\n return loader._loader\n .sanitize(uri, {context: 'image'})\n .then(function(opt) {\n var url = opt.href;\n if (!url || !Image) throw {url: url};\n\n var img = new Image();\n\n img.onload = function() {\n decrement(loader);\n img.loaded = true;\n };\n\n img.onerror = function() {\n decrement(loader);\n img.loaded = false;\n }\n\n img.src = url;\n return img;\n })\n .catch(function(e) {\n decrement(loader);\n return {loaded: false, width: 0, height: 0, src: e && e.url || ''};\n });\n};\n\nprototype.ready = function() {\n var loader = this;\n return new Promise(function(accept) {\n function poll(value) {\n if (!loader.pending()) accept(value);\n else setTimeout(function() { poll(true); }, 10);\n }\n poll(false);\n });\n};\n","var pi = Math.PI,\n tau = 2 * pi,\n epsilon = 1e-6,\n tauEpsilon = tau - epsilon;\n\nfunction Path() {\n this._x0 = this._y0 = // start of current subpath\n this._x1 = this._y1 = null; // end of current subpath\n this._ = \"\";\n}\n\nfunction path() {\n return new Path;\n}\n\nPath.prototype = path.prototype = {\n constructor: Path,\n moveTo: function(x, y) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y);\n },\n closePath: function() {\n if (this._x1 !== null) {\n this._x1 = this._x0, this._y1 = this._y0;\n this._ += \"Z\";\n }\n },\n lineTo: function(x, y) {\n this._ += \"L\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n quadraticCurveTo: function(x1, y1, x, y) {\n this._ += \"Q\" + (+x1) + \",\" + (+y1) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) {\n this._ += \"C\" + (+x1) + \",\" + (+y1) + \",\" + (+x2) + \",\" + (+y2) + \",\" + (this._x1 = +x) + \",\" + (this._y1 = +y);\n },\n arcTo: function(x1, y1, x2, y2, r) {\n x1 = +x1, y1 = +y1, x2 = +x2, y2 = +y2, r = +r;\n var x0 = this._x1,\n y0 = this._y1,\n x21 = x2 - x1,\n y21 = y2 - y1,\n x01 = x0 - x1,\n y01 = y0 - y1,\n l01_2 = x01 * x01 + y01 * y01;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x1,y1).\n if (this._x1 === null) {\n this._ += \"M\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Or, is (x1,y1) coincident with (x0,y0)? Do nothing.\n else if (!(l01_2 > epsilon));\n\n // Or, are (x0,y0), (x1,y1) and (x2,y2) collinear?\n // Equivalently, is (x1,y1) coincident with (x2,y2)?\n // Or, is the radius zero? Line to (x1,y1).\n else if (!(Math.abs(y01 * x21 - y21 * x01) > epsilon) || !r) {\n this._ += \"L\" + (this._x1 = x1) + \",\" + (this._y1 = y1);\n }\n\n // Otherwise, draw an arc!\n else {\n var x20 = x2 - x0,\n y20 = y2 - y0,\n l21_2 = x21 * x21 + y21 * y21,\n l20_2 = x20 * x20 + y20 * y20,\n l21 = Math.sqrt(l21_2),\n l01 = Math.sqrt(l01_2),\n l = r * Math.tan((pi - Math.acos((l21_2 + l01_2 - l20_2) / (2 * l21 * l01))) / 2),\n t01 = l / l01,\n t21 = l / l21;\n\n // If the start tangent is not coincident with (x0,y0), line to.\n if (Math.abs(t01 - 1) > epsilon) {\n this._ += \"L\" + (x1 + t01 * x01) + \",\" + (y1 + t01 * y01);\n }\n\n this._ += \"A\" + r + \",\" + r + \",0,0,\" + (+(y01 * x20 > x01 * y20)) + \",\" + (this._x1 = x1 + t21 * x21) + \",\" + (this._y1 = y1 + t21 * y21);\n }\n },\n arc: function(x, y, r, a0, a1, ccw) {\n x = +x, y = +y, r = +r;\n var dx = r * Math.cos(a0),\n dy = r * Math.sin(a0),\n x0 = x + dx,\n y0 = y + dy,\n cw = 1 ^ ccw,\n da = ccw ? a0 - a1 : a1 - a0;\n\n // Is the radius negative? Error.\n if (r < 0) throw new Error(\"negative radius: \" + r);\n\n // Is this path empty? Move to (x0,y0).\n if (this._x1 === null) {\n this._ += \"M\" + x0 + \",\" + y0;\n }\n\n // Or, is (x0,y0) not coincident with the previous point? Line to (x0,y0).\n else if (Math.abs(this._x1 - x0) > epsilon || Math.abs(this._y1 - y0) > epsilon) {\n this._ += \"L\" + x0 + \",\" + y0;\n }\n\n // Is this arc empty? We’re done.\n if (!r) return;\n\n // Does the angle go the wrong way? Flip the direction.\n if (da < 0) da = da % tau + tau;\n\n // Is this a complete circle? Draw two arcs to complete the circle.\n if (da > tauEpsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (x - dx) + \",\" + (y - dy) + \"A\" + r + \",\" + r + \",0,1,\" + cw + \",\" + (this._x1 = x0) + \",\" + (this._y1 = y0);\n }\n\n // Is this arc non-empty? Draw an arc!\n else if (da > epsilon) {\n this._ += \"A\" + r + \",\" + r + \",0,\" + (+(da >= pi)) + \",\" + cw + \",\" + (this._x1 = x + r * Math.cos(a1)) + \",\" + (this._y1 = y + r * Math.sin(a1));\n }\n },\n rect: function(x, y, w, h) {\n this._ += \"M\" + (this._x0 = this._x1 = +x) + \",\" + (this._y0 = this._y1 = +y) + \"h\" + (+w) + \"v\" + (+h) + \"h\" + (-w) + \"Z\";\n },\n toString: function() {\n return this._;\n }\n};\n\nexport default path;\n","export default function(x) {\n return function constant() {\n return x;\n };\n}\n","export var abs = Math.abs;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var max = Math.max;\nexport var min = Math.min;\nexport var sin = Math.sin;\nexport var sqrt = Math.sqrt;\n\nexport var epsilon = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var tau = 2 * pi;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x >= 1 ? halfPi : x <= -1 ? -halfPi : Math.asin(x);\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport {abs, acos, asin, atan2, cos, epsilon, halfPi, max, min, pi, sin, sqrt, tau} from \"./math\";\n\nfunction arcInnerRadius(d) {\n return d.innerRadius;\n}\n\nfunction arcOuterRadius(d) {\n return d.outerRadius;\n}\n\nfunction arcStartAngle(d) {\n return d.startAngle;\n}\n\nfunction arcEndAngle(d) {\n return d.endAngle;\n}\n\nfunction arcPadAngle(d) {\n return d && d.padAngle; // Note: optional!\n}\n\nfunction intersect(x0, y0, x1, y1, x2, y2, x3, y3) {\n var x10 = x1 - x0, y10 = y1 - y0,\n x32 = x3 - x2, y32 = y3 - y2,\n t = y32 * x10 - x32 * y10;\n if (t * t < epsilon) return;\n t = (x32 * (y0 - y2) - y32 * (x0 - x2)) / t;\n return [x0 + t * x10, y0 + t * y10];\n}\n\n// Compute perpendicular offset line of length rc.\n// http://mathworld.wolfram.com/Circle-LineIntersection.html\nfunction cornerTangents(x0, y0, x1, y1, r1, rc, cw) {\n var x01 = x0 - x1,\n y01 = y0 - y1,\n lo = (cw ? rc : -rc) / sqrt(x01 * x01 + y01 * y01),\n ox = lo * y01,\n oy = -lo * x01,\n x11 = x0 + ox,\n y11 = y0 + oy,\n x10 = x1 + ox,\n y10 = y1 + oy,\n x00 = (x11 + x10) / 2,\n y00 = (y11 + y10) / 2,\n dx = x10 - x11,\n dy = y10 - y11,\n d2 = dx * dx + dy * dy,\n r = r1 - rc,\n D = x11 * y10 - x10 * y11,\n d = (dy < 0 ? -1 : 1) * sqrt(max(0, r * r * d2 - D * D)),\n cx0 = (D * dy - dx * d) / d2,\n cy0 = (-D * dx - dy * d) / d2,\n cx1 = (D * dy + dx * d) / d2,\n cy1 = (-D * dx + dy * d) / d2,\n dx0 = cx0 - x00,\n dy0 = cy0 - y00,\n dx1 = cx1 - x00,\n dy1 = cy1 - y00;\n\n // Pick the closer of the two intersection points.\n // TODO Is there a faster way to determine which intersection to use?\n if (dx0 * dx0 + dy0 * dy0 > dx1 * dx1 + dy1 * dy1) cx0 = cx1, cy0 = cy1;\n\n return {\n cx: cx0,\n cy: cy0,\n x01: -ox,\n y01: -oy,\n x11: cx0 * (r1 / r - 1),\n y11: cy0 * (r1 / r - 1)\n };\n}\n\nexport default function() {\n var innerRadius = arcInnerRadius,\n outerRadius = arcOuterRadius,\n cornerRadius = constant(0),\n padRadius = null,\n startAngle = arcStartAngle,\n endAngle = arcEndAngle,\n padAngle = arcPadAngle,\n context = null;\n\n function arc() {\n var buffer,\n r,\n r0 = +innerRadius.apply(this, arguments),\n r1 = +outerRadius.apply(this, arguments),\n a0 = startAngle.apply(this, arguments) - halfPi,\n a1 = endAngle.apply(this, arguments) - halfPi,\n da = abs(a1 - a0),\n cw = a1 > a0;\n\n if (!context) context = buffer = path();\n\n // Ensure that the outer radius is always larger than the inner radius.\n if (r1 < r0) r = r1, r1 = r0, r0 = r;\n\n // Is it a point?\n if (!(r1 > epsilon)) context.moveTo(0, 0);\n\n // Or is it a circle or annulus?\n else if (da > tau - epsilon) {\n context.moveTo(r1 * cos(a0), r1 * sin(a0));\n context.arc(0, 0, r1, a0, a1, !cw);\n if (r0 > epsilon) {\n context.moveTo(r0 * cos(a1), r0 * sin(a1));\n context.arc(0, 0, r0, a1, a0, cw);\n }\n }\n\n // Or is it a circular or annular sector?\n else {\n var a01 = a0,\n a11 = a1,\n a00 = a0,\n a10 = a1,\n da0 = da,\n da1 = da,\n ap = padAngle.apply(this, arguments) / 2,\n rp = (ap > epsilon) && (padRadius ? +padRadius.apply(this, arguments) : sqrt(r0 * r0 + r1 * r1)),\n rc = min(abs(r1 - r0) / 2, +cornerRadius.apply(this, arguments)),\n rc0 = rc,\n rc1 = rc,\n t0,\n t1;\n\n // Apply padding? Note that since r1 ≥ r0, da1 ≥ da0.\n if (rp > epsilon) {\n var p0 = asin(rp / r0 * sin(ap)),\n p1 = asin(rp / r1 * sin(ap));\n if ((da0 -= p0 * 2) > epsilon) p0 *= (cw ? 1 : -1), a00 += p0, a10 -= p0;\n else da0 = 0, a00 = a10 = (a0 + a1) / 2;\n if ((da1 -= p1 * 2) > epsilon) p1 *= (cw ? 1 : -1), a01 += p1, a11 -= p1;\n else da1 = 0, a01 = a11 = (a0 + a1) / 2;\n }\n\n var x01 = r1 * cos(a01),\n y01 = r1 * sin(a01),\n x10 = r0 * cos(a10),\n y10 = r0 * sin(a10);\n\n // Apply rounded corners?\n if (rc > epsilon) {\n var x11 = r1 * cos(a11),\n y11 = r1 * sin(a11),\n x00 = r0 * cos(a00),\n y00 = r0 * sin(a00),\n oc;\n\n // Restrict the corner radius according to the sector angle.\n if (da < pi && (oc = intersect(x01, y01, x00, y00, x11, y11, x10, y10))) {\n var ax = x01 - oc[0],\n ay = y01 - oc[1],\n bx = x11 - oc[0],\n by = y11 - oc[1],\n kc = 1 / sin(acos((ax * bx + ay * by) / (sqrt(ax * ax + ay * ay) * sqrt(bx * bx + by * by))) / 2),\n lc = sqrt(oc[0] * oc[0] + oc[1] * oc[1]);\n rc0 = min(rc, (r0 - lc) / (kc - 1));\n rc1 = min(rc, (r1 - lc) / (kc + 1));\n }\n }\n\n // Is the sector collapsed to a line?\n if (!(da1 > epsilon)) context.moveTo(x01, y01);\n\n // Does the sector’s outer ring have rounded corners?\n else if (rc1 > epsilon) {\n t0 = cornerTangents(x00, y00, x01, y01, r1, rc1, cw);\n t1 = cornerTangents(x11, y11, x10, y10, r1, rc1, cw);\n\n context.moveTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc1 < rc) context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc1, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r1, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), !cw);\n context.arc(t1.cx, t1.cy, rc1, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the outer ring just a circular arc?\n else context.moveTo(x01, y01), context.arc(0, 0, r1, a01, a11, !cw);\n\n // Is there no inner ring, and it’s a circular sector?\n // Or perhaps it’s an annular sector collapsed due to padding?\n if (!(r0 > epsilon) || !(da0 > epsilon)) context.lineTo(x10, y10);\n\n // Does the sector’s inner ring (or point) have rounded corners?\n else if (rc0 > epsilon) {\n t0 = cornerTangents(x10, y10, x11, y11, r0, -rc0, cw);\n t1 = cornerTangents(x01, y01, x00, y00, r0, -rc0, cw);\n\n context.lineTo(t0.cx + t0.x01, t0.cy + t0.y01);\n\n // Have the corners merged?\n if (rc0 < rc) context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t1.y01, t1.x01), !cw);\n\n // Otherwise, draw the two corners and the ring.\n else {\n context.arc(t0.cx, t0.cy, rc0, atan2(t0.y01, t0.x01), atan2(t0.y11, t0.x11), !cw);\n context.arc(0, 0, r0, atan2(t0.cy + t0.y11, t0.cx + t0.x11), atan2(t1.cy + t1.y11, t1.cx + t1.x11), cw);\n context.arc(t1.cx, t1.cy, rc0, atan2(t1.y11, t1.x11), atan2(t1.y01, t1.x01), !cw);\n }\n }\n\n // Or is the inner ring just a circular arc?\n else context.arc(0, 0, r0, a10, a00, cw);\n }\n\n context.closePath();\n\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n arc.centroid = function() {\n var r = (+innerRadius.apply(this, arguments) + +outerRadius.apply(this, arguments)) / 2,\n a = (+startAngle.apply(this, arguments) + +endAngle.apply(this, arguments)) / 2 - pi / 2;\n return [cos(a) * r, sin(a) * r];\n };\n\n arc.innerRadius = function(_) {\n return arguments.length ? (innerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : innerRadius;\n };\n\n arc.outerRadius = function(_) {\n return arguments.length ? (outerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : outerRadius;\n };\n\n arc.cornerRadius = function(_) {\n return arguments.length ? (cornerRadius = typeof _ === \"function\" ? _ : constant(+_), arc) : cornerRadius;\n };\n\n arc.padRadius = function(_) {\n return arguments.length ? (padRadius = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), arc) : padRadius;\n };\n\n arc.startAngle = function(_) {\n return arguments.length ? (startAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : startAngle;\n };\n\n arc.endAngle = function(_) {\n return arguments.length ? (endAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : endAngle;\n };\n\n arc.padAngle = function(_) {\n return arguments.length ? (padAngle = typeof _ === \"function\" ? _ : constant(+_), arc) : padAngle;\n };\n\n arc.context = function(_) {\n return arguments.length ? ((context = _ == null ? null : _), arc) : context;\n };\n\n return arc;\n}\n","function Linear(context) {\n this._context = context;\n}\n\nLinear.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: this._context.lineTo(x, y); break;\n }\n }\n};\n\nexport default function(context) {\n return new Linear(context);\n}\n","export function x(p) {\n return p[0];\n}\n\nexport function y(p) {\n return p[1];\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function line(data) {\n var i,\n n = data.length,\n d,\n defined0 = false,\n buffer;\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) output.lineStart();\n else output.lineEnd();\n }\n if (defined0) output.point(+x(d, i, data), +y(d, i, data));\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n line.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), line) : x;\n };\n\n line.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), line) : y;\n };\n\n line.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), line) : defined;\n };\n\n line.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), line) : curve;\n };\n\n line.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), line) : context;\n };\n\n return line;\n}\n","import {path} from \"d3-path\";\nimport constant from \"./constant\";\nimport curveLinear from \"./curve/linear\";\nimport line from \"./line\";\nimport {x as pointX, y as pointY} from \"./point\";\n\nexport default function() {\n var x0 = pointX,\n x1 = null,\n y0 = constant(0),\n y1 = pointY,\n defined = constant(true),\n context = null,\n curve = curveLinear,\n output = null;\n\n function area(data) {\n var i,\n j,\n k,\n n = data.length,\n d,\n defined0 = false,\n buffer,\n x0z = new Array(n),\n y0z = new Array(n);\n\n if (context == null) output = curve(buffer = path());\n\n for (i = 0; i <= n; ++i) {\n if (!(i < n && defined(d = data[i], i, data)) === defined0) {\n if (defined0 = !defined0) {\n j = i;\n output.areaStart();\n output.lineStart();\n } else {\n output.lineEnd();\n output.lineStart();\n for (k = i - 1; k >= j; --k) {\n output.point(x0z[k], y0z[k]);\n }\n output.lineEnd();\n output.areaEnd();\n }\n }\n if (defined0) {\n x0z[i] = +x0(d, i, data), y0z[i] = +y0(d, i, data);\n output.point(x1 ? +x1(d, i, data) : x0z[i], y1 ? +y1(d, i, data) : y0z[i]);\n }\n }\n\n if (buffer) return output = null, buffer + \"\" || null;\n }\n\n function arealine() {\n return line().defined(defined).curve(curve).context(context);\n }\n\n area.x = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), x1 = null, area) : x0;\n };\n\n area.x0 = function(_) {\n return arguments.length ? (x0 = typeof _ === \"function\" ? _ : constant(+_), area) : x0;\n };\n\n area.x1 = function(_) {\n return arguments.length ? (x1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : x1;\n };\n\n area.y = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), y1 = null, area) : y0;\n };\n\n area.y0 = function(_) {\n return arguments.length ? (y0 = typeof _ === \"function\" ? _ : constant(+_), area) : y0;\n };\n\n area.y1 = function(_) {\n return arguments.length ? (y1 = _ == null ? null : typeof _ === \"function\" ? _ : constant(+_), area) : y1;\n };\n\n area.lineX0 =\n area.lineY0 = function() {\n return arealine().x(x0).y(y0);\n };\n\n area.lineY1 = function() {\n return arealine().x(x0).y(y1);\n };\n\n area.lineX1 = function() {\n return arealine().x(x1).y(y0);\n };\n\n area.defined = function(_) {\n return arguments.length ? (defined = typeof _ === \"function\" ? _ : constant(!!_), area) : defined;\n };\n\n area.curve = function(_) {\n return arguments.length ? (curve = _, context != null && (output = curve(context)), area) : curve;\n };\n\n area.context = function(_) {\n return arguments.length ? (_ == null ? context = output = null : output = curve(context = _), area) : context;\n };\n\n return area;\n}\n","import {pi, tau} from \"../math\";\n\nexport default {\n draw: function(context, size) {\n var r = Math.sqrt(size / pi);\n context.moveTo(r, 0);\n context.arc(0, 0, r, 0, tau);\n }\n};\n","import {path} from \"d3-path\";\nimport circle from \"./symbol/circle\";\nimport cross from \"./symbol/cross\";\nimport diamond from \"./symbol/diamond\";\nimport star from \"./symbol/star\";\nimport square from \"./symbol/square\";\nimport triangle from \"./symbol/triangle\";\nimport wye from \"./symbol/wye\";\nimport constant from \"./constant\";\n\nexport var symbols = [\n circle,\n cross,\n diamond,\n square,\n star,\n triangle,\n wye\n];\n\nexport default function() {\n var type = constant(circle),\n size = constant(64),\n context = null;\n\n function symbol() {\n var buffer;\n if (!context) context = buffer = path();\n type.apply(this, arguments).draw(context, +size.apply(this, arguments));\n if (buffer) return context = null, buffer + \"\" || null;\n }\n\n symbol.type = function(_) {\n return arguments.length ? (type = typeof _ === \"function\" ? _ : constant(_), symbol) : type;\n };\n\n symbol.size = function(_) {\n return arguments.length ? (size = typeof _ === \"function\" ? _ : constant(+_), symbol) : size;\n };\n\n symbol.context = function(_) {\n return arguments.length ? (context = _ == null ? null : _, symbol) : context;\n };\n\n return symbol;\n}\n","export default function() {}\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n (2 * that._x0 + that._x1) / 3,\n (2 * that._y0 + that._y1) / 3,\n (that._x0 + 2 * that._x1) / 3,\n (that._y0 + 2 * that._y1) / 3,\n (that._x0 + 4 * that._x1 + x) / 6,\n (that._y0 + 4 * that._y1 + y) / 6\n );\n}\n\nexport function Basis(context) {\n this._context = context;\n}\n\nBasis.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 3: point(this, this._x1, this._y1); // proceed\n case 2: this._context.lineTo(this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._context.lineTo((5 * this._x0 + this._x1) / 6, (5 * this._y0 + this._y1) / 6); // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new Basis(context);\n}\n","import noop from \"../noop\";\nimport {point} from \"./basis\";\n\nfunction BasisClosed(context) {\n this._context = context;\n}\n\nBasisClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x2, this._y2);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.moveTo((this._x2 + 2 * this._x3) / 3, (this._y2 + 2 * this._y3) / 3);\n this._context.lineTo((this._x3 + 2 * this._x2) / 3, (this._y3 + 2 * this._y2) / 3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x2, this._y2);\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x2 = x, this._y2 = y; break;\n case 1: this._point = 2; this._x3 = x, this._y3 = y; break;\n case 2: this._point = 3; this._x4 = x, this._y4 = y; this._context.moveTo((this._x0 + 4 * this._x1 + x) / 6, (this._y0 + 4 * this._y1 + y) / 6); break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisClosed(context);\n}\n","import {point} from \"./basis\";\n\nfunction BasisOpen(context) {\n this._context = context;\n}\n\nBasisOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; var x0 = (this._x0 + 4 * this._x1 + x) / 6, y0 = (this._y0 + 4 * this._y1 + y) / 6; this._line ? this._context.lineTo(x0, y0) : this._context.moveTo(x0, y0); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n }\n};\n\nexport default function(context) {\n return new BasisOpen(context);\n}\n","import {Basis} from \"./basis\";\n\nfunction Bundle(context, beta) {\n this._basis = new Basis(context);\n this._beta = beta;\n}\n\nBundle.prototype = {\n lineStart: function() {\n this._x = [];\n this._y = [];\n this._basis.lineStart();\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n j = x.length - 1;\n\n if (j > 0) {\n var x0 = x[0],\n y0 = y[0],\n dx = x[j] - x0,\n dy = y[j] - y0,\n i = -1,\n t;\n\n while (++i <= j) {\n t = i / j;\n this._basis.point(\n this._beta * x[i] + (1 - this._beta) * (x0 + t * dx),\n this._beta * y[i] + (1 - this._beta) * (y0 + t * dy)\n );\n }\n }\n\n this._x = this._y = null;\n this._basis.lineEnd();\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\nexport default (function custom(beta) {\n\n function bundle(context) {\n return beta === 1 ? new Basis(context) : new Bundle(context, beta);\n }\n\n bundle.beta = function(beta) {\n return custom(+beta);\n };\n\n return bundle;\n})(0.85);\n","export function point(that, x, y) {\n that._context.bezierCurveTo(\n that._x1 + that._k * (that._x2 - that._x0),\n that._y1 + that._k * (that._y2 - that._y0),\n that._x2 + that._k * (that._x1 - x),\n that._y2 + that._k * (that._y1 - y),\n that._x2,\n that._y2\n );\n}\n\nexport function Cardinal(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinal.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: point(this, this._x1, this._y1); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; this._x1 = x, this._y1 = y; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new Cardinal(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import noop from \"../noop\";\nimport {point} from \"./cardinal\";\n\nexport function CardinalClosed(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalClosed(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {point} from \"./cardinal\";\n\nexport function CardinalOpen(context, tension) {\n this._context = context;\n this._k = (1 - tension) / 6;\n}\n\nCardinalOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(tension) {\n\n function cardinal(context) {\n return new CardinalOpen(context, tension);\n }\n\n cardinal.tension = function(tension) {\n return custom(+tension);\n };\n\n return cardinal;\n})(0);\n","import {epsilon} from \"../math\";\nimport {Cardinal} from \"./cardinal\";\n\nexport function point(that, x, y) {\n var x1 = that._x1,\n y1 = that._y1,\n x2 = that._x2,\n y2 = that._y2;\n\n if (that._l01_a > epsilon) {\n var a = 2 * that._l01_2a + 3 * that._l01_a * that._l12_a + that._l12_2a,\n n = 3 * that._l01_a * (that._l01_a + that._l12_a);\n x1 = (x1 * a - that._x0 * that._l12_2a + that._x2 * that._l01_2a) / n;\n y1 = (y1 * a - that._y0 * that._l12_2a + that._y2 * that._l01_2a) / n;\n }\n\n if (that._l23_a > epsilon) {\n var b = 2 * that._l23_2a + 3 * that._l23_a * that._l12_a + that._l12_2a,\n m = 3 * that._l23_a * (that._l23_a + that._l12_a);\n x2 = (x2 * b + that._x1 * that._l23_2a - x * that._l12_2a) / m;\n y2 = (y2 * b + that._y1 * that._l23_2a - y * that._l12_2a) / m;\n }\n\n that._context.bezierCurveTo(x1, y1, x2, y2, that._x2, that._y2);\n}\n\nfunction CatmullRom(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRom.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x2, this._y2); break;\n case 3: this.point(this._x2, this._y2); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRom(context, alpha) : new Cardinal(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalClosed} from \"./cardinalClosed\";\nimport noop from \"../noop\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomClosed(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._x0 = this._x1 = this._x2 = this._x3 = this._x4 = this._x5 =\n this._y0 = this._y1 = this._y2 = this._y3 = this._y4 = this._y5 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 1: {\n this._context.moveTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 2: {\n this._context.lineTo(this._x3, this._y3);\n this._context.closePath();\n break;\n }\n case 3: {\n this.point(this._x3, this._y3);\n this.point(this._x4, this._y4);\n this.point(this._x5, this._y5);\n break;\n }\n }\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; this._x3 = x, this._y3 = y; break;\n case 1: this._point = 2; this._context.moveTo(this._x4 = x, this._y4 = y); break;\n case 2: this._point = 3; this._x5 = x, this._y5 = y; break;\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomClosed(context, alpha) : new CardinalClosed(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import {CardinalOpen} from \"./cardinalOpen\";\nimport {point} from \"./catmullRom\";\n\nfunction CatmullRomOpen(context, alpha) {\n this._context = context;\n this._alpha = alpha;\n}\n\nCatmullRomOpen.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 = this._x2 =\n this._y0 = this._y1 = this._y2 = NaN;\n this._l01_a = this._l12_a = this._l23_a =\n this._l01_2a = this._l12_2a = this._l23_2a =\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line || (this._line !== 0 && this._point === 3)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n\n if (this._point) {\n var x23 = this._x2 - x,\n y23 = this._y2 - y;\n this._l23_a = Math.sqrt(this._l23_2a = Math.pow(x23 * x23 + y23 * y23, this._alpha));\n }\n\n switch (this._point) {\n case 0: this._point = 1; break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; this._line ? this._context.lineTo(this._x2, this._y2) : this._context.moveTo(this._x2, this._y2); break;\n case 3: this._point = 4; // proceed\n default: point(this, x, y); break;\n }\n\n this._l01_a = this._l12_a, this._l12_a = this._l23_a;\n this._l01_2a = this._l12_2a, this._l12_2a = this._l23_2a;\n this._x0 = this._x1, this._x1 = this._x2, this._x2 = x;\n this._y0 = this._y1, this._y1 = this._y2, this._y2 = y;\n }\n};\n\nexport default (function custom(alpha) {\n\n function catmullRom(context) {\n return alpha ? new CatmullRomOpen(context, alpha) : new CardinalOpen(context, 0);\n }\n\n catmullRom.alpha = function(alpha) {\n return custom(+alpha);\n };\n\n return catmullRom;\n})(0.5);\n","import noop from \"../noop\";\n\nfunction LinearClosed(context) {\n this._context = context;\n}\n\nLinearClosed.prototype = {\n areaStart: noop,\n areaEnd: noop,\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._point) this._context.closePath();\n },\n point: function(x, y) {\n x = +x, y = +y;\n if (this._point) this._context.lineTo(x, y);\n else this._point = 1, this._context.moveTo(x, y);\n }\n};\n\nexport default function(context) {\n return new LinearClosed(context);\n}\n","function sign(x) {\n return x < 0 ? -1 : 1;\n}\n\n// Calculate the slopes of the tangents (Hermite-type interpolation) based on\n// the following paper: Steffen, M. 1990. A Simple Method for Monotonic\n// Interpolation in One Dimension. Astronomy and Astrophysics, Vol. 239, NO.\n// NOV(II), P. 443, 1990.\nfunction slope3(that, x2, y2) {\n var h0 = that._x1 - that._x0,\n h1 = x2 - that._x1,\n s0 = (that._y1 - that._y0) / (h0 || h1 < 0 && -0),\n s1 = (y2 - that._y1) / (h1 || h0 < 0 && -0),\n p = (s0 * h1 + s1 * h0) / (h0 + h1);\n return (sign(s0) + sign(s1)) * Math.min(Math.abs(s0), Math.abs(s1), 0.5 * Math.abs(p)) || 0;\n}\n\n// Calculate a one-sided slope.\nfunction slope2(that, t) {\n var h = that._x1 - that._x0;\n return h ? (3 * (that._y1 - that._y0) / h - t) / 2 : t;\n}\n\n// According to https://en.wikipedia.org/wiki/Cubic_Hermite_spline#Representations\n// \"you can express cubic Hermite interpolation in terms of cubic Bézier curves\n// with respect to the four values p0, p0 + m0 / 3, p1 - m1 / 3, p1\".\nfunction point(that, t0, t1) {\n var x0 = that._x0,\n y0 = that._y0,\n x1 = that._x1,\n y1 = that._y1,\n dx = (x1 - x0) / 3;\n that._context.bezierCurveTo(x0 + dx, y0 + dx * t0, x1 - dx, y1 - dx * t1, x1, y1);\n}\n\nfunction MonotoneX(context) {\n this._context = context;\n}\n\nMonotoneX.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x0 = this._x1 =\n this._y0 = this._y1 =\n this._t0 = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n switch (this._point) {\n case 2: this._context.lineTo(this._x1, this._y1); break;\n case 3: point(this, this._t0, slope2(this, this._t0)); break;\n }\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n this._line = 1 - this._line;\n },\n point: function(x, y) {\n var t1 = NaN;\n\n x = +x, y = +y;\n if (x === this._x1 && y === this._y1) return; // Ignore coincident points.\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; break;\n case 2: this._point = 3; point(this, slope2(this, t1 = slope3(this, x, y)), t1); break;\n default: point(this, this._t0, t1 = slope3(this, x, y)); break;\n }\n\n this._x0 = this._x1, this._x1 = x;\n this._y0 = this._y1, this._y1 = y;\n this._t0 = t1;\n }\n}\n\nfunction MonotoneY(context) {\n this._context = new ReflectContext(context);\n}\n\n(MonotoneY.prototype = Object.create(MonotoneX.prototype)).point = function(x, y) {\n MonotoneX.prototype.point.call(this, y, x);\n};\n\nfunction ReflectContext(context) {\n this._context = context;\n}\n\nReflectContext.prototype = {\n moveTo: function(x, y) { this._context.moveTo(y, x); },\n closePath: function() { this._context.closePath(); },\n lineTo: function(x, y) { this._context.lineTo(y, x); },\n bezierCurveTo: function(x1, y1, x2, y2, x, y) { this._context.bezierCurveTo(y1, x1, y2, x2, y, x); }\n};\n\nexport function monotoneX(context) {\n return new MonotoneX(context);\n}\n\nexport function monotoneY(context) {\n return new MonotoneY(context);\n}\n","function Natural(context) {\n this._context = context;\n}\n\nNatural.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = [];\n this._y = [];\n },\n lineEnd: function() {\n var x = this._x,\n y = this._y,\n n = x.length;\n\n if (n) {\n this._line ? this._context.lineTo(x[0], y[0]) : this._context.moveTo(x[0], y[0]);\n if (n === 2) {\n this._context.lineTo(x[1], y[1]);\n } else {\n var px = controlPoints(x),\n py = controlPoints(y);\n for (var i0 = 0, i1 = 1; i1 < n; ++i0, ++i1) {\n this._context.bezierCurveTo(px[0][i0], py[0][i0], px[1][i0], py[1][i0], x[i1], y[i1]);\n }\n }\n }\n\n if (this._line || (this._line !== 0 && n === 1)) this._context.closePath();\n this._line = 1 - this._line;\n this._x = this._y = null;\n },\n point: function(x, y) {\n this._x.push(+x);\n this._y.push(+y);\n }\n};\n\n// See https://www.particleincell.com/2012/bezier-splines/ for derivation.\nfunction controlPoints(x) {\n var i,\n n = x.length - 1,\n m,\n a = new Array(n),\n b = new Array(n),\n r = new Array(n);\n a[0] = 0, b[0] = 2, r[0] = x[0] + 2 * x[1];\n for (i = 1; i < n - 1; ++i) a[i] = 1, b[i] = 4, r[i] = 4 * x[i] + 2 * x[i + 1];\n a[n - 1] = 2, b[n - 1] = 7, r[n - 1] = 8 * x[n - 1] + x[n];\n for (i = 1; i < n; ++i) m = a[i] / b[i - 1], b[i] -= m, r[i] -= m * r[i - 1];\n a[n - 1] = r[n - 1] / b[n - 1];\n for (i = n - 2; i >= 0; --i) a[i] = (r[i] - a[i + 1]) / b[i];\n b[n - 1] = (x[n] + a[n - 1]) / 2;\n for (i = 0; i < n - 1; ++i) b[i] = 2 * x[i + 1] - a[i + 1];\n return [a, b];\n}\n\nexport default function(context) {\n return new Natural(context);\n}\n","function Step(context, t) {\n this._context = context;\n this._t = t;\n}\n\nStep.prototype = {\n areaStart: function() {\n this._line = 0;\n },\n areaEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._x = this._y = NaN;\n this._point = 0;\n },\n lineEnd: function() {\n if (0 < this._t && this._t < 1 && this._point === 2) this._context.lineTo(this._x, this._y);\n if (this._line || (this._line !== 0 && this._point === 1)) this._context.closePath();\n if (this._line >= 0) this._t = 1 - this._t, this._line = 1 - this._line;\n },\n point: function(x, y) {\n x = +x, y = +y;\n switch (this._point) {\n case 0: this._point = 1; this._line ? this._context.lineTo(x, y) : this._context.moveTo(x, y); break;\n case 1: this._point = 2; // proceed\n default: {\n if (this._t <= 0) {\n this._context.lineTo(this._x, y);\n this._context.lineTo(x, y);\n } else {\n var x1 = this._x * (1 - this._t) + x * this._t;\n this._context.lineTo(x1, this._y);\n this._context.lineTo(x1, y);\n }\n break;\n }\n }\n this._x = x, this._y = y;\n }\n};\n\nexport default function(context) {\n return new Step(context, 0.5);\n}\n\nexport function stepBefore(context) {\n return new Step(context, 0);\n}\n\nexport function stepAfter(context) {\n return new Step(context, 1);\n}\n","import {\n curveBasis,\n curveBasisClosed,\n curveBasisOpen,\n curveBundle,\n curveCardinal,\n curveCardinalClosed,\n curveCardinalOpen,\n curveCatmullRom,\n curveCatmullRomClosed,\n curveCatmullRomOpen,\n curveLinear,\n curveLinearClosed,\n curveMonotoneX,\n curveMonotoneY,\n curveNatural,\n curveStep,\n curveStepAfter,\n curveStepBefore\n} from 'd3-shape';\n\nvar lookup = {\n 'basis': {\n curve: curveBasis\n },\n 'basis-closed': {\n curve: curveBasisClosed\n },\n 'basis-open': {\n curve: curveBasisOpen\n },\n 'bundle': {\n curve: curveBundle,\n tension: 'beta',\n value: 0.85\n },\n 'cardinal': {\n curve: curveCardinal,\n tension: 'tension',\n value: 0\n },\n 'cardinal-open': {\n curve: curveCardinalOpen,\n tension: 'tension',\n value: 0\n },\n 'cardinal-closed': {\n curve: curveCardinalClosed,\n tension: 'tension',\n value: 0\n },\n 'catmull-rom': {\n curve: curveCatmullRom,\n tension: 'alpha',\n value: 0.5\n },\n 'catmull-rom-closed': {\n curve: curveCatmullRomClosed,\n tension: 'alpha',\n value: 0.5\n },\n 'catmull-rom-open': {\n curve: curveCatmullRomOpen,\n tension: 'alpha',\n value: 0.5\n },\n 'linear': {\n curve: curveLinear\n },\n 'linear-closed': {\n curve: curveLinearClosed\n },\n 'monotone': {\n horizontal: curveMonotoneY,\n vertical: curveMonotoneX\n },\n 'natural': {\n curve: curveNatural\n },\n 'step': {\n curve: curveStep\n },\n 'step-after': {\n curve: curveStepAfter\n },\n 'step-before': {\n curve: curveStepBefore\n }\n};\n\nexport default function curves(type, orientation, tension) {\n var entry = lookup.hasOwnProperty(type) && lookup[type],\n curve = null;\n\n if (entry) {\n curve = entry.curve || entry[orientation || 'vertical'];\n if (entry.tension && tension != null) {\n curve = curve[entry.tension](tension);\n }\n }\n\n return curve;\n}\n","// Path parsing and rendering code adapted from fabric.js -- Thanks!\nvar cmdlen = { m:2, l:2, h:1, v:1, c:6, s:4, q:4, t:2, a:7 },\n regexp = [/([MLHVCSQTAZmlhvcsqtaz])/g, /###/, /(\\d)([-+])/g, /\\s|,|###/];\n\nexport default function(pathstr) {\n var result = [],\n path,\n curr,\n chunks,\n parsed, param,\n cmd, len, i, j, n, m;\n\n // First, break path into command sequence\n path = pathstr\n .slice()\n .replace(regexp[0], '###$1')\n .split(regexp[1])\n .slice(1);\n\n // Next, parse each command in turn\n for (i=0, n=path.length; i len) {\n for (j=1, m=parsed.length; j 1) {\n pl = Math.sqrt(pl);\n rx *= pl;\n ry *= pl;\n }\n\n var a00 = cos_th / rx;\n var a01 = sin_th / rx;\n var a10 = (-sin_th) / ry;\n var a11 = (cos_th) / ry;\n var x0 = a00 * ox + a01 * oy;\n var y0 = a10 * ox + a11 * oy;\n var x1 = a00 * x + a01 * y;\n var y1 = a10 * x + a11 * y;\n\n var d = (x1-x0) * (x1-x0) + (y1-y0) * (y1-y0);\n var sfactor_sq = 1 / d - 0.25;\n if (sfactor_sq < 0) sfactor_sq = 0;\n var sfactor = Math.sqrt(sfactor_sq);\n if (sweep == large) sfactor = -sfactor;\n var xc = 0.5 * (x0 + x1) - sfactor * (y1-y0);\n var yc = 0.5 * (y0 + y1) + sfactor * (x1-x0);\n\n var th0 = Math.atan2(y0-yc, x0-xc);\n var th1 = Math.atan2(y1-yc, x1-xc);\n\n var th_arc = th1-th0;\n if (th_arc < 0 && sweep === 1) {\n th_arc += Tau;\n } else if (th_arc > 0 && sweep === 0) {\n th_arc -= Tau;\n }\n\n var segs = Math.ceil(Math.abs(th_arc / (HalfPi + 0.001)));\n var result = [];\n for (var i=0; i circleThreshold) {\n add(cx - r, cy - r);\n add(cx + r, cy + r);\n return;\n }\n\n var xmin = Infinity, xmax = -Infinity,\n ymin = Infinity, ymax = -Infinity,\n s, i, x, y;\n\n function update(a) {\n x = r * Math.cos(a);\n y = r * Math.sin(a);\n if (x < xmin) xmin = x;\n if (x > xmax) xmax = x;\n if (y < ymin) ymin = y;\n if (y > ymax) ymax = y;\n }\n\n // Sample end points and interior points aligned with 90 degrees\n update(sa);\n update(ea);\n\n if (ea !== sa) {\n sa = sa % Tau; if (sa < 0) sa += Tau;\n ea = ea % Tau; if (ea < 0) ea += Tau;\n\n if (ea < sa) {\n ccw = !ccw; // flip direction\n s = sa; sa = ea; ea = s; // swap end-points\n }\n\n if (ccw) {\n ea -= Tau;\n s = sa - (sa % HalfPi);\n for (i=0; i<4 && s>ea; ++i, s-=HalfPi) update(s);\n } else {\n s = sa - (sa % HalfPi) + HalfPi;\n for (i=0; i<4 && s t1) return false;\n else if (r > t0) t0 = r;\n } else if (p > 0) {\n if (r < t0) return false;\n else if (r < t1) t1 = r;\n }\n }\n\n return true;\n}\n","export default function(context, gradient, bounds) {\n const w = bounds.width(),\n h = bounds.height(),\n stop = gradient.stops,\n n = stop.length;\n\n const canvasGradient = gradient.gradient === 'radial'\n ? context.createRadialGradient(\n bounds.x1 + (gradient.x1 || 0.5) * w,\n bounds.y1 + (gradient.y1 || 0.5) * h,\n Math.max(w, h) * (gradient.r1 || 0),\n bounds.x1 + (gradient.x2 || 0.5) * w,\n bounds.y1 + (gradient.y2 || 0.5) * h,\n Math.max(w, h) * (gradient.r2 || 0.5)\n )\n : context.createLinearGradient(\n bounds.x1 + (gradient.x1 || 0) * w,\n bounds.y1 + (gradient.y1 || 0) * h,\n bounds.x1 + (gradient.x2 || 1) * w,\n bounds.y1 + (gradient.y2 || 0) * h\n );\n\n for (let i=0; i 0) {\n context.globalAlpha = opacity;\n context.fillStyle = color(context, item, item.fill);\n return true;\n } else {\n return false;\n }\n}\n","import color from './color';\n\nvar Empty = [];\n\nexport default function(context, item, opacity) {\n var lw = (lw = item.strokeWidth) != null ? lw : 1;\n\n if (lw <= 0) return false;\n\n opacity *= (item.strokeOpacity==null ? 1 : item.strokeOpacity);\n if (opacity > 0) {\n context.globalAlpha = opacity;\n context.strokeStyle = color(context, item, item.stroke);\n\n context.lineWidth = lw;\n context.lineCap = item.strokeCap || 'butt';\n context.lineJoin = item.strokeJoin || 'miter';\n context.miterLimit = item.strokeMiterLimit || 10;\n\n if (context.setLineDash) {\n context.setLineDash(item.strokeDash || Empty);\n context.lineDashOffset = item.strokeDashOffset || 0;\n }\n return true;\n } else {\n return false;\n }\n}\n","function compare(a, b) {\n return a.zindex - b.zindex || a.index - b.index;\n}\n\nexport function zorder(scene) {\n if (!scene.zdirty) return scene.zitems;\n\n var items = scene.items,\n output = [], item, i, n;\n\n for (i=0, n=items.length; i= 0;) {\n if (hit = visitor(items[i])) return hit;\n }\n\n if (items === zitems) {\n for (items=scene.items, i=items.length; --i >= 0;) {\n if (!items[i].zindex) {\n if (hit = visitor(items[i])) return hit;\n }\n }\n }\n\n return null;\n}\n","import fill from './fill';\nimport stroke from './stroke';\nimport {visit} from '../visit';\n\nexport function drawAll(path) {\n return function(context, scene, bounds) {\n visit(scene, function(item) {\n if (!bounds || bounds.intersects(item.bounds)) {\n drawPath(path, context, item, item);\n }\n });\n };\n}\n\nexport function drawOne(path) {\n return function(context, scene, bounds) {\n if (scene.items.length && (!bounds || bounds.intersects(scene.bounds))) {\n drawPath(path, context, scene.items[0], scene.items);\n }\n };\n}\n\nfunction drawPath(path, context, item, items) {\n var opacity = item.opacity == null ? 1 : item.opacity;\n if (opacity === 0) return;\n\n if (path(context, items)) return;\n\n if (item.fill && fill(context, item, opacity)) {\n context.fill();\n }\n\n if (item.stroke && stroke(context, item, opacity)) {\n context.stroke();\n }\n}\n","import {pickVisit} from '../visit';\nimport {truthy} from 'vega-util';\n\nexport function pick(test) {\n test = test || truthy;\n\n return function(context, scene, x, y, gx, gy) {\n x *= context.pixelRatio;\n y *= context.pixelRatio;\n\n return pickVisit(scene, function(item) {\n var b = item.bounds;\n // first hit test against bounding box\n if ((b && !b.contains(gx, gy)) || !b) return;\n // if in bounding box, perform more careful test\n if (test(context, item, x, y, gx, gy)) return item;\n });\n };\n}\n\nexport function hitPath(path, filled) {\n return function(context, o, x, y) {\n var item = Array.isArray(o) ? o[0] : o,\n fill = (filled == null) ? item.fill : filled,\n stroke = item.stroke && context.isPointInStroke, lw, lc;\n\n if (stroke) {\n lw = item.strokeWidth;\n lc = item.strokeCap;\n context.lineWidth = lw != null ? lw : 1;\n context.lineCap = lc != null ? lc : 'butt';\n }\n\n return path(context, o) ? false :\n (fill && context.isPointInPath(x, y)) ||\n (stroke && context.isPointInStroke(x, y));\n };\n}\n\nexport function pickPath(path) {\n return pick(hitPath(path));\n}\n","export function translate(x, y) {\n return 'translate(' + x + ',' + y + ')';\n}\n\nexport function rotate(a) {\n return 'rotate(' + a + ')';\n}\n\nexport function translateItem(item) {\n return translate(item.x || 0, item.y || 0);\n}\n\nexport function transformItem(item) {\n return translate(item.x || 0, item.y || 0)\n + (item.angle ? ' ' + rotate(item.angle) : '');\n}\n","import boundStroke from '../bound/boundStroke';\nimport context from '../bound/boundContext';\nimport {intersectPath} from '../util/intersect';\nimport {drawAll} from '../util/canvas/draw';\nimport {pickPath} from '../util/canvas/pick';\nimport {transformItem} from '../util/svg/transform';\nimport {DegToRad} from '../util/constants';\n\nexport default function(type, shape, isect) {\n\n function attr(emit, item) {\n emit('transform', transformItem(item));\n emit('d', shape(null, item));\n }\n\n function bound(bounds, item) {\n var x = item.x || 0,\n y = item.y || 0;\n\n shape(context(bounds), item);\n boundStroke(bounds, item).translate(x, y);\n if (item.angle) {\n bounds.rotate(item.angle * DegToRad, x, y);\n }\n\n return bounds;\n }\n\n function draw(context, item) {\n var x = item.x || 0,\n y = item.y || 0,\n a = item.angle || 0;\n\n context.translate(x, y);\n if (a) context.rotate(a *= DegToRad);\n context.beginPath();\n shape(context, item);\n if (a) context.rotate(-a);\n context.translate(-x, -y);\n }\n\n return {\n type: type,\n tag: 'path',\n nested: false,\n attr: attr,\n bound: bound,\n draw: drawAll(draw),\n pick: pickPath(draw),\n isect: isect || intersectPath(draw)\n };\n\n}\n","import {arc} from '../path/shapes';\nimport markItemPath from './markItemPath';\n\nexport default markItemPath('arc', arc);\n","export function pickArea(a, p) {\n var v = a[0].orient === 'horizontal' ? p[1] : p[0],\n z = a[0].orient === 'horizontal' ? 'y' : 'x',\n i = a.length,\n min = +Infinity, hit, d;\n\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n d = Math.abs(a[i][z] - v);\n if (d < min) {\n min = d;\n hit = a[i];\n }\n }\n\n return hit;\n}\n\nexport function pickLine(a, p) {\n var t = Math.pow(a[0].strokeWidth || 1, 2),\n i = a.length, dx, dy, dd;\n\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n dx = a[i].x - p[0];\n dy = a[i].y - p[1];\n dd = dx * dx + dy * dy;\n if (dd < t) return a[i];\n }\n\n return null;\n}\n\nexport function pickTrail(a, p) {\n var i = a.length, dx, dy, dd;\n\n while (--i >= 0) {\n if (a[i].defined === false) continue;\n dx = a[i].x - p[0];\n dy = a[i].y - p[1];\n dd = dx * dx + dy * dy;\n dx = a[i].size || 1;\n if (dd < dx*dx) return a[i];\n }\n\n return null;\n}\n","import boundStroke from '../bound/boundStroke';\nimport context from '../bound/boundContext';\nimport {intersectPoint} from '../util/intersect';\nimport {drawOne} from '../util/canvas/draw';\nimport {hitPath} from '../util/canvas/pick';\n\nexport default function(type, shape, tip) {\n\n function attr(emit, item) {\n var items = item.mark.items;\n if (items.length) emit('d', shape(null, items));\n }\n\n function bound(bounds, mark) {\n var items = mark.items;\n if (items.length === 0) {\n return bounds;\n } else {\n shape(context(bounds), items);\n return boundStroke(bounds, items[0]);\n }\n }\n\n function draw(context, items) {\n context.beginPath();\n shape(context, items);\n }\n\n var hit = hitPath(draw);\n\n function pick(context, scene, x, y, gx, gy) {\n var items = scene.items,\n b = scene.bounds;\n\n if (!items || !items.length || b && !b.contains(gx, gy)) {\n return null;\n }\n\n x *= context.pixelRatio;\n y *= context.pixelRatio;\n return hit(context, items, x, y) ? items[0] : null;\n }\n\n return {\n type: type,\n tag: 'path',\n nested: true,\n attr: attr,\n bound: bound,\n draw: drawOne(draw),\n pick: pick,\n isect: intersectPoint,\n tip: tip\n };\n\n}\n\n\n","import {area} from '../path/shapes';\nimport {pickArea} from '../util/pickPath';\nimport markMultiItemPath from './markMultiItemPath';\n\nexport default markMultiItemPath('area', area, pickArea);\n","import {isFunction} from 'vega-util';\n\nvar clip_id = 1;\n\nexport function resetSVGClipId() {\n clip_id = 1;\n}\n\nexport default function(renderer, item, size) {\n var clip = item.clip,\n defs = renderer._defs,\n id = item.clip_id || (item.clip_id = 'clip' + clip_id++),\n c = defs.clipping[id] || (defs.clipping[id] = {id: id});\n\n if (isFunction(clip)) {\n c.path = clip(null);\n } else {\n c.width = size.width || 0;\n c.height = size.height || 0;\n }\n\n return 'url(#' + id + ')';\n}\n","import {rectangle} from '../path/shapes';\nimport boundStroke from '../bound/boundStroke';\nimport {intersectRect} from '../util/intersect';\nimport {visit, pickVisit} from '../util/visit';\nimport stroke from '../util/canvas/stroke';\nimport fill from '../util/canvas/fill';\nimport {hitPath} from '../util/canvas/pick';\nimport clip from '../util/svg/clip';\nimport {translateItem} from '../util/svg/transform';\n\nvar StrokeOffset = 0.5;\n\nfunction attr(emit, item) {\n emit('transform', translateItem(item));\n}\n\nfunction background(emit, item) {\n var offset = item.stroke ? StrokeOffset : 0;\n emit('class', 'background');\n emit('d', rectangle(null, item, offset, offset));\n}\n\nfunction foreground(emit, item, renderer) {\n var url = item.clip ? clip(renderer, item, item) : null;\n emit('clip-path', url);\n}\n\nfunction bound(bounds, group) {\n if (!group.clip && group.items) {\n var items = group.items;\n for (var j=0, m=items.length; j 0) {\n backgroundPath(context, group);\n if (group.fill && fill(context, group, opacity)) {\n context.fill();\n }\n if (group.stroke && stroke(context, group, opacity)) {\n context.stroke();\n }\n }\n }\n\n // set clip and bounds\n if (group.clip) {\n context.beginPath();\n context.rect(0, 0, w, h);\n context.clip();\n }\n if (bounds) bounds.translate(-gx, -gy);\n\n // draw group contents\n visit(group, function(item) {\n renderer.draw(context, item, bounds);\n });\n\n // restore graphics context\n if (bounds) bounds.translate(gx, gy);\n context.restore();\n });\n}\n\nfunction pick(context, scene, x, y, gx, gy) {\n if (scene.bounds && !scene.bounds.contains(gx, gy) || !scene.items) {\n return null;\n }\n\n var handler = this,\n cx = x * context.pixelRatio,\n cy = y * context.pixelRatio;\n\n return pickVisit(scene, function(group) {\n var hit, dx, dy, b;\n\n // first hit test against bounding box\n // if a group is clipped, that should be handled by the bounds check.\n b = group.bounds;\n if (b && !b.contains(gx, gy)) return;\n\n // passed bounds check, so test sub-groups\n dx = (group.x || 0);\n dy = (group.y || 0);\n\n context.save();\n context.translate(dx, dy);\n\n dx = gx - dx;\n dy = gy - dy;\n\n // hit test against contained marks\n hit = pickVisit(group, function(mark) {\n return pickMark(mark, dx, dy)\n ? handler.pick(mark, x, y, dx, dy)\n : null;\n });\n\n // hit test against group background\n if (!hit && scene.interactive !== false\n && (group.fill || group.stroke)\n && hitBackground(context, group, cx, cy)) {\n hit = group;\n }\n\n context.restore();\n return hit || null;\n });\n}\n\nfunction pickMark(mark, x, y) {\n return (mark.interactive !== false || mark.marktype === 'group')\n && mark.bounds && mark.bounds.contains(x, y);\n}\n\nexport default {\n type: 'group',\n tag: 'g',\n nested: false,\n attr: attr,\n bound: bound,\n draw: draw,\n pick: pick,\n isect: intersectRect,\n background: background,\n foreground: foreground\n};\n","import {visit} from '../util/visit';\nimport {pick} from '../util/canvas/pick';\nimport {translate} from '../util/svg/transform';\nimport {truthy} from 'vega-util';\n\nfunction getImage(item, renderer) {\n var image = item.image;\n if (!image || image.url !== item.url) {\n image = {loaded: false, width: 0, height: 0};\n renderer.loadImage(item.url).then(function(image) {\n item.image = image;\n item.image.url = item.url;\n });\n }\n return image;\n}\n\nfunction imageXOffset(align, w) {\n return align === 'center' ? w / 2 : align === 'right' ? w : 0;\n}\n\nfunction imageYOffset(baseline, h) {\n return baseline === 'middle' ? h / 2 : baseline === 'bottom' ? h : 0;\n}\n\nfunction attr(emit, item, renderer) {\n var image = getImage(item, renderer),\n x = item.x || 0,\n y = item.y || 0,\n w = (item.width != null ? item.width : image.width) || 0,\n h = (item.height != null ? item.height : image.height) || 0,\n a = item.aspect === false ? 'none' : 'xMidYMid';\n\n x -= imageXOffset(item.align, w);\n y -= imageYOffset(item.baseline, h);\n\n emit('href', image.src || '', 'http://www.w3.org/1999/xlink', 'xlink:href');\n emit('transform', translate(x, y));\n emit('width', w);\n emit('height', h);\n emit('preserveAspectRatio', a);\n}\n\nfunction bound(bounds, item) {\n var image = item.image,\n x = item.x || 0,\n y = item.y || 0,\n w = (item.width != null ? item.width : (image && image.width)) || 0,\n h = (item.height != null ? item.height : (image && image.height)) || 0;\n\n x -= imageXOffset(item.align, w);\n y -= imageYOffset(item.baseline, h);\n\n return bounds.set(x, y, x + w, y + h);\n}\n\nfunction draw(context, scene, bounds) {\n var renderer = this;\n\n visit(scene, function(item) {\n if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n\n var image = getImage(item, renderer),\n x = item.x || 0,\n y = item.y || 0,\n w = (item.width != null ? item.width : image.width) || 0,\n h = (item.height != null ? item.height : image.height) || 0,\n opacity, ar0, ar1, t;\n\n x -= imageXOffset(item.align, w);\n y -= imageYOffset(item.baseline, h);\n\n if (item.aspect !== false) {\n ar0 = image.width / image.height;\n ar1 = item.width / item.height;\n if (ar0 === ar0 && ar1 === ar1 && ar0 !== ar1) {\n if (ar1 < ar0) {\n t = w / ar0;\n y += (h - t) / 2;\n h = t;\n } else {\n t = h * ar0;\n x += (w - t) / 2;\n w = t;\n }\n }\n }\n\n if (image.loaded) {\n context.globalAlpha = (opacity = item.opacity) != null ? opacity : 1;\n context.drawImage(image, x, y, w, h);\n }\n });\n}\n\nexport default {\n type: 'image',\n tag: 'image',\n nested: false,\n attr: attr,\n bound: bound,\n draw: draw,\n pick: pick(),\n isect: truthy, // bounds check is sufficient\n get: getImage,\n xOffset: imageXOffset,\n yOffset: imageYOffset\n};\n","import {line} from '../path/shapes';\nimport {pickLine} from '../util/pickPath';\nimport markMultiItemPath from './markMultiItemPath';\n\nexport default markMultiItemPath('line', line, pickLine);\n","import boundStroke from '../bound/boundStroke';\nimport context from '../bound/boundContext';\nimport pathParse from '../path/parse';\nimport pathRender from '../path/render';\nimport {intersectPath} from '../util/intersect';\nimport {drawAll} from '../util/canvas/draw';\nimport {pickPath} from '../util/canvas/pick';\nimport {translateItem} from '../util/svg/transform';\n\nfunction attr(emit, item) {\n emit('transform', translateItem(item));\n emit('d', item.path);\n}\n\nfunction path(context, item) {\n var path = item.path;\n if (path == null) return true;\n\n var cache = item.pathCache;\n if (!cache || cache.path !== path) {\n (item.pathCache = cache = pathParse(path)).path = path;\n }\n pathRender(context, cache, item.x, item.y);\n}\n\nfunction bound(bounds, item) {\n return path(context(bounds), item)\n ? bounds.set(0, 0, 0, 0)\n : boundStroke(bounds, item);\n}\n\nexport default {\n type: 'path',\n tag: 'path',\n nested: false,\n attr: attr,\n bound: bound,\n draw: drawAll(path),\n pick: pickPath(path),\n isect: intersectPath(path)\n};\n","import boundStroke from '../bound/boundStroke';\nimport {rectangle} from '../path/shapes';\nimport {intersectRect} from '../util/intersect';\nimport {drawAll} from '../util/canvas/draw';\nimport {pickPath} from '../util/canvas/pick';\n\nfunction attr(emit, item) {\n emit('d', rectangle(null, item));\n}\n\nfunction bound(bounds, item) {\n var x, y;\n return boundStroke(bounds.set(\n x = item.x || 0,\n y = item.y || 0,\n (x + item.width) || 0,\n (y + item.height) || 0\n ), item);\n}\n\nfunction draw(context, item) {\n context.beginPath();\n rectangle(context, item);\n}\n\nexport default {\n type: 'rect',\n tag: 'path',\n nested: false,\n attr: attr,\n bound: bound,\n draw: drawAll(draw),\n pick: pickPath(draw),\n isect: intersectRect\n};\n","import boundStroke from '../bound/boundStroke';\nimport {intersectRule} from '../util/intersect';\nimport {visit} from '../util/visit';\nimport {pick} from '../util/canvas/pick';\nimport stroke from '../util/canvas/stroke';\nimport {translateItem} from '../util/svg/transform';\n\nfunction attr(emit, item) {\n emit('transform', translateItem(item));\n emit('x2', item.x2 != null ? item.x2 - (item.x || 0) : 0);\n emit('y2', item.y2 != null ? item.y2 - (item.y || 0) : 0);\n}\n\nfunction bound(bounds, item) {\n var x1, y1;\n return boundStroke(bounds.set(\n x1 = item.x || 0,\n y1 = item.y || 0,\n item.x2 != null ? item.x2 : x1,\n item.y2 != null ? item.y2 : y1\n ), item);\n}\n\nfunction path(context, item, opacity) {\n var x1, y1, x2, y2;\n\n if (item.stroke && stroke(context, item, opacity)) {\n x1 = item.x || 0;\n y1 = item.y || 0;\n x2 = item.x2 != null ? item.x2 : x1;\n y2 = item.y2 != null ? item.y2 : y1;\n context.beginPath();\n context.moveTo(x1, y1);\n context.lineTo(x2, y2);\n return true;\n }\n return false;\n}\n\nfunction draw(context, scene, bounds) {\n visit(scene, function(item) {\n if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n var opacity = item.opacity == null ? 1 : item.opacity;\n if (opacity && path(context, item, opacity)) {\n context.stroke();\n }\n });\n}\n\nfunction hit(context, item, x, y) {\n if (!context.isPointInStroke) return false;\n return path(context, item, 1) && context.isPointInStroke(x, y);\n}\n\nexport default {\n type: 'rule',\n tag: 'line',\n nested: false,\n attr: attr,\n bound: bound,\n draw: draw,\n pick: pick(hit),\n isect: intersectRule\n};\n","import {shape} from '../path/shapes';\nimport markItemPath from './markItemPath';\n\nexport default markItemPath('shape', shape);\n","import {symbol} from '../path/shapes';\nimport {intersectPoint} from '../util/intersect';\nimport markItemPath from './markItemPath';\n\nexport default markItemPath('symbol', symbol, intersectPoint);\n","import {context} from './canvas/context';\n\nvar currFontHeight;\n\nexport var textMetrics = {\n height: fontSize,\n measureWidth: measureWidth,\n estimateWidth: estimateWidth,\n width: estimateWidth,\n canvas: useCanvas\n};\n\nuseCanvas(true);\n\n// make dumb, simple estimate if no canvas is available\nfunction estimateWidth(item) {\n currFontHeight = fontSize(item);\n return estimate(textValue(item));\n}\n\nfunction estimate(text) {\n return ~~(0.8 * text.length * currFontHeight);\n}\n\n// measure text width if canvas is available\nfunction measureWidth(item) {\n return fontSize(item) <= 0 ? 0\n : (context.font = font(item), measure(textValue(item)));\n}\n\nfunction measure(text) {\n return context.measureText(text).width;\n}\n\nexport function fontSize(item) {\n return item.fontSize != null ? item.fontSize : 11;\n}\n\nfunction useCanvas(use) {\n textMetrics.width = (use && context) ? measureWidth : estimateWidth;\n}\n\nexport function textValue(item) {\n var s = item.text;\n if (s == null) {\n return '';\n } else {\n return item.limit > 0 ? truncate(item) : s + '';\n }\n}\n\nexport function truncate(item) {\n var limit = +item.limit,\n text = item.text + '',\n width;\n\n if (textMetrics.width === measureWidth) {\n // we are using canvas\n context.font = font(item);\n width = measure;\n } else {\n // we are relying on estimates\n currFontHeight = fontSize(item);\n width = estimate;\n }\n\n if (width(text) < limit) return text;\n\n var ellipsis = item.ellipsis || '\\u2026',\n rtl = item.dir === 'rtl',\n lo = 0,\n hi = text.length, mid;\n\n limit -= width(ellipsis);\n\n if (rtl) {\n while (lo < hi) {\n mid = (lo + hi >>> 1);\n if (width(text.slice(mid)) > limit) lo = mid + 1;\n else hi = mid;\n }\n return ellipsis + text.slice(lo);\n } else {\n while (lo < hi) {\n mid = 1 + (lo + hi >>> 1);\n if (width(text.slice(0, mid)) < limit) lo = mid;\n else hi = mid - 1;\n }\n return text.slice(0, lo) + ellipsis;\n }\n}\n\nexport function fontFamily(item, quote) {\n var font = item.font;\n return (quote && font\n ? String(font).replace(/\"/g, '\\'')\n : font) || 'sans-serif';\n}\n\nexport function font(item, quote) {\n return '' +\n (item.fontStyle ? item.fontStyle + ' ' : '') +\n (item.fontVariant ? item.fontVariant + ' ' : '') +\n (item.fontWeight ? item.fontWeight + ' ' : '') +\n fontSize(item) + 'px ' +\n fontFamily(item, quote);\n}\n\nexport function offset(item) {\n // perform our own font baseline calculation\n // why? not all browsers support SVG 1.1 'alignment-baseline' :(\n var baseline = item.baseline,\n h = fontSize(item);\n return Math.round(\n baseline === 'top' ? 0.79*h :\n baseline === 'middle' ? 0.30*h :\n baseline === 'bottom' ? -0.21*h : 0\n );\n}\n","import Bounds from '../Bounds';\nimport {DegToRad, HalfPi} from '../util/constants';\nimport {font, offset, textMetrics, textValue} from '../util/text';\nimport {intersectBoxLine} from '../util/intersect';\nimport {visit} from '../util/visit';\nimport fill from '../util/canvas/fill';\nimport {pick} from '../util/canvas/pick';\nimport stroke from '../util/canvas/stroke';\nimport {translate, rotate} from '../util/svg/transform';\n\nvar textAlign = {\n 'left': 'start',\n 'center': 'middle',\n 'right': 'end'\n};\n\nvar tempBounds = new Bounds();\n\nfunction anchorPoint(item) {\n var x = item.x || 0,\n y = item.y || 0,\n r = item.radius || 0, t;\n\n if (r) {\n t = (item.theta || 0) - HalfPi;\n x += r * Math.cos(t);\n y += r * Math.sin(t);\n }\n\n tempBounds.x1 = x;\n tempBounds.y1 = y;\n return tempBounds;\n}\n\nfunction attr(emit, item) {\n var dx = item.dx || 0,\n dy = (item.dy || 0) + offset(item),\n p = anchorPoint(item),\n x = p.x1,\n y = p.y1,\n a = item.angle || 0, t;\n\n emit('text-anchor', textAlign[item.align] || 'start');\n\n if (a) {\n t = translate(x, y) + ' ' + rotate(a);\n if (dx || dy) t += ' ' + translate(dx, dy);\n } else {\n t = translate(x + dx, y + dy);\n }\n emit('transform', t);\n}\n\nfunction bound(bounds, item, mode) {\n var h = textMetrics.height(item),\n a = item.align,\n p = anchorPoint(item),\n x = p.x1,\n y = p.y1,\n dx = item.dx || 0,\n dy = (item.dy || 0) + offset(item) - Math.round(0.8*h), // use 4/5 offset\n w;\n\n // horizontal alignment\n w = textMetrics.width(item);\n if (a === 'center') {\n dx -= (w / 2);\n } else if (a === 'right') {\n dx -= w;\n } else {\n // left by default, do nothing\n }\n\n bounds.set(dx+=x, dy+=y, dx+w, dy+h);\n if (item.angle && !mode) {\n bounds.rotate(item.angle * DegToRad, x, y);\n } else if (mode === 2) {\n return bounds.rotatedPoints(item.angle * DegToRad, x, y);\n }\n return bounds;\n}\n\nfunction draw(context, scene, bounds) {\n visit(scene, function(item) {\n var opacity, p, x, y, str;\n if (bounds && !bounds.intersects(item.bounds)) return; // bounds check\n if (!(str = textValue(item))) return; // get text string\n\n opacity = item.opacity == null ? 1 : item.opacity;\n if (opacity === 0 || item.fontSize <= 0) return;\n\n context.font = font(item);\n context.textAlign = item.align || 'left';\n\n p = anchorPoint(item);\n x = p.x1,\n y = p.y1;\n\n if (item.angle) {\n context.save();\n context.translate(x, y);\n context.rotate(item.angle * DegToRad);\n x = y = 0; // reset x, y\n }\n x += (item.dx || 0);\n y += (item.dy || 0) + offset(item);\n\n if (item.fill && fill(context, item, opacity)) {\n context.fillText(str, x, y);\n }\n if (item.stroke && stroke(context, item, opacity)) {\n context.strokeText(str, x, y);\n }\n if (item.angle) context.restore();\n });\n}\n\nfunction hit(context, item, x, y, gx, gy) {\n if (item.fontSize <= 0) return false;\n if (!item.angle) return true; // bounds sufficient if no rotation\n\n // project point into space of unrotated bounds\n var p = anchorPoint(item),\n ax = p.x1,\n ay = p.y1,\n b = bound(tempBounds, item, 1),\n a = -item.angle * DegToRad,\n cos = Math.cos(a),\n sin = Math.sin(a),\n px = cos * gx - sin * gy + (ax - cos * ax + sin * ay),\n py = sin * gx + cos * gy + (ay - sin * ax - cos * ay);\n\n return b.contains(px, py);\n}\n\nfunction intersectText(item, box) {\n var p = bound(tempBounds, item, 2);\n return intersectBoxLine(box, p[0], p[1], p[2], p[3])\n || intersectBoxLine(box, p[0], p[1], p[4], p[5])\n || intersectBoxLine(box, p[4], p[5], p[6], p[7])\n || intersectBoxLine(box, p[2], p[3], p[6], p[7]);\n}\n\nexport default {\n type: 'text',\n tag: 'text',\n nested: false,\n attr: attr,\n bound: bound,\n draw: draw,\n pick: pick(hit),\n isect: intersectText\n};\n","import {trail} from '../path/shapes';\nimport {pickTrail} from '../util/pickPath';\nimport markMultiItemPath from './markMultiItemPath';\n\nexport default markMultiItemPath('trail', trail, pickTrail);\n","import arc from './arc';\nimport area from './area';\nimport group from './group';\nimport image from './image';\nimport line from './line';\nimport path from './path';\nimport rect from './rect';\nimport rule from './rule';\nimport shape from './shape';\nimport symbol from './symbol';\nimport text from './text';\nimport trail from './trail';\n\nexport default {\n arc: arc,\n area: area,\n group: group,\n image: image,\n line: line,\n path: path,\n rect: rect,\n rule: rule,\n shape: shape,\n symbol: symbol,\n text: text,\n trail: trail\n};\n","import Bounds from '../Bounds';\nimport marks from '../marks/index';\n\nexport default function(item, func, opt) {\n var type = marks[item.mark.marktype],\n bound = func || type.bound;\n if (type.nested) item = item.mark;\n\n return bound(item.bounds || (item.bounds = new Bounds()), item, opt);\n}\n","import Bounds from '../Bounds';\nimport boundItem from './boundItem';\nimport marks from '../marks/index';\n\nvar DUMMY = {mark: null};\n\nexport default function(mark, bounds, opt) {\n var type = marks[mark.marktype],\n bound = type.bound,\n items = mark.items,\n hasItems = items && items.length,\n i, n, item, b;\n\n if (type.nested) {\n if (hasItems) {\n item = items[0];\n } else {\n // no items, fake it\n DUMMY.mark = mark;\n item = DUMMY;\n }\n b = boundItem(item, bound, opt);\n bounds = bounds && bounds.union(b) || b;\n return bounds;\n }\n\n bounds = bounds\n || mark.bounds && mark.bounds.clear()\n || new Bounds();\n\n if (hasItems) {\n for (i=0, n=items.length; i index) el.removeChild(nodes[--curr]);\n return el;\n}\n\n// generate css class name for mark\nexport function cssClass(mark) {\n return 'mark-' + mark.marktype\n + (mark.role ? ' role-' + mark.role : '')\n + (mark.name ? ' ' + mark.name : '');\n}\n","export default function(event, el) {\n var rect = el.getBoundingClientRect();\n return [\n event.clientX - rect.left - (el.clientLeft || 0),\n event.clientY - rect.top - (el.clientTop || 0)\n ];\n}\n","import marks from '../marks/index';\nimport point from './point';\n\nexport default function(item, event, el, origin) {\n var mark = item && item.mark,\n mdef, p;\n\n if (mark && (mdef = marks[mark.marktype]).tip) {\n p = point(event, el);\n p[0] -= origin[0];\n p[1] -= origin[1];\n while (item = item.mark.group) {\n p[0] -= item.x || 0;\n p[1] -= item.y || 0;\n }\n item = mdef.tip(mark.items, p);\n }\n\n return item;\n}\n","import {domCreate} from './util/dom';\nimport resolveItem from './util/resolveItem';\nimport {loader} from 'vega-loader';\n\n/**\n * Create a new Handler instance.\n * @param {object} [customLoader] - Optional loader instance for\n * href URL sanitization. If not specified, a standard loader\n * instance will be generated.\n * @param {function} [customTooltip] - Optional tooltip handler\n * function for custom tooltip display.\n * @constructor\n */\nexport default function Handler(customLoader, customTooltip) {\n this._active = null;\n this._handlers = {};\n this._loader = customLoader || loader();\n this._tooltip = customTooltip || defaultTooltip;\n}\n\n// The default tooltip display handler.\n// Sets the HTML title attribute on the visualization container.\nfunction defaultTooltip(handler, event, item, value) {\n handler.element().setAttribute('title', value || '');\n}\n\nvar prototype = Handler.prototype;\n\n/**\n * Initialize a new Handler instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {object} [obj] - Optional context object that should serve as\n * the \"this\" context for event callbacks.\n * @return {Handler} - This handler instance.\n */\nprototype.initialize = function(el, origin, obj) {\n this._el = el;\n this._obj = obj || null;\n return this.origin(origin);\n};\n\n/**\n * Returns the parent container element for a visualization.\n * @return {DOMElement} - The containing DOM element.\n */\nprototype.element = function() {\n return this._el;\n};\n\n/**\n * Returns the scene element (e.g., canvas or SVG) of the visualization\n * Subclasses must override if the first child is not the scene element.\n * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n */\nprototype.canvas = function() {\n return this._el && this._el.firstChild;\n};\n\n/**\n * Get / set the origin coordinates of the visualization.\n */\nprototype.origin = function(origin) {\n if (arguments.length) {\n this._origin = origin || [0, 0];\n return this;\n } else {\n return this._origin.slice();\n }\n};\n\n/**\n * Get / set the scenegraph root.\n */\nprototype.scene = function(scene) {\n if (!arguments.length) return this._scene;\n this._scene = scene;\n return this;\n};\n\n/**\n * Add an event handler. Subclasses should override this method.\n */\nprototype.on = function(/*type, handler*/) {};\n\n/**\n * Remove an event handler. Subclasses should override this method.\n */\nprototype.off = function(/*type, handler*/) {};\n\n/**\n * Utility method for finding the array index of an event handler.\n * @param {Array} h - An array of registered event handlers.\n * @param {string} type - The event type.\n * @param {function} handler - The event handler instance to find.\n * @return {number} - The handler's array index or -1 if not registered.\n */\nprototype._handlerIndex = function(h, type, handler) {\n for (var i = h ? h.length : 0; --i>=0;) {\n if (h[i].type === type && (!handler || h[i].handler === handler)) {\n return i;\n }\n }\n return -1;\n};\n\n/**\n * Returns an array with registered event handlers.\n * @param {string} [type] - The event type to query. Any annotations\n * are ignored; for example, for the argument \"click.foo\", \".foo\" will\n * be ignored and the method returns all \"click\" handlers. If type is\n * null or unspecified, this method returns handlers for all types.\n * @return {Array} - A new array containing all registered event handlers.\n */\nprototype.handlers = function(type) {\n var h = this._handlers, a = [], k;\n if (type) {\n a.push.apply(a, h[this.eventName(type)]);\n } else {\n for (k in h) { a.push.apply(a, h[k]); }\n }\n return a;\n};\n\n/**\n * Parses an event name string to return the specific event type.\n * For example, given \"click.foo\" returns \"click\"\n * @param {string} name - The input event type string.\n * @return {string} - A string with the event type only.\n */\nprototype.eventName = function(name) {\n var i = name.indexOf('.');\n return i < 0 ? name : name.slice(0,i);\n};\n\n/**\n * Handle hyperlink navigation in response to an item.href value.\n * @param {Event} event - The event triggering hyperlink navigation.\n * @param {Item} item - The scenegraph item.\n * @param {string} href - The URL to navigate to.\n */\nprototype.handleHref = function(event, item, href) {\n this._loader\n .sanitize(href, {context:'href'})\n .then(function(opt) {\n var e = new MouseEvent(event.type, event),\n a = domCreate(null, 'a');\n for (var name in opt) a.setAttribute(name, opt[name]);\n a.dispatchEvent(e);\n })\n .catch(function() { /* do nothing */ });\n};\n\n/**\n * Handle tooltip display in response to an item.tooltip value.\n * @param {Event} event - The event triggering tooltip display.\n * @param {Item} item - The scenegraph item.\n * @param {boolean} show - A boolean flag indicating whether\n * to show or hide a tooltip for the given item.\n */\nprototype.handleTooltip = function(event, item, show) {\n if (item && item.tooltip != null) {\n item = resolveItem(item, event, this.canvas(), this._origin);\n var value = (show && item && item.tooltip) || null;\n this._tooltip.call(this._obj, this, event, item, value);\n }\n};\n\n/**\n * Returns the size of a scenegraph item and its position relative\n * to the viewport.\n * @param {Item} item - The scenegraph item.\n * @return {object} - A bounding box object (compatible with the\n * DOMRect type) consisting of x, y, width, heigh, top, left,\n * right, and bottom properties.\n */\nprototype.getItemBoundingClientRect = function(item) {\n if (!(el = this.canvas())) return;\n\n var el, rect = el.getBoundingClientRect(),\n origin = this._origin,\n itemBounds = item.bounds,\n x = itemBounds.x1 + origin[0] + rect.left,\n y = itemBounds.y1 + origin[1] + rect.top,\n w = itemBounds.width(),\n h = itemBounds.height();\n\n // translate coordinate for each parent group\n while (item.mark && (item = item.mark.group)) {\n x += item.x || 0;\n y += item.y || 0;\n }\n\n // return DOMRect-compatible bounding box\n return {\n x: x,\n y: y,\n width: w,\n height: h,\n left: x,\n top: y,\n right: x + w,\n bottom: y + h\n };\n};\n","import ResourceLoader from './ResourceLoader';\n\n/**\n * Create a new Renderer instance.\n * @param {object} [loader] - Optional loader instance for\n * image and href URL sanitization. If not specified, a\n * standard loader instance will be generated.\n * @constructor\n */\nexport default function Renderer(loader) {\n this._el = null;\n this._bgcolor = null;\n this._loader = new ResourceLoader(loader);\n}\n\nvar prototype = Renderer.prototype;\n\n/**\n * Initialize a new Renderer instance.\n * @param {DOMElement} el - The containing DOM element for the display.\n * @param {number} width - The coordinate width of the display, in pixels.\n * @param {number} height - The coordinate height of the display, in pixels.\n * @param {Array} origin - The origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {Renderer} - This renderer instance.\n */\nprototype.initialize = function(el, width, height, origin, scaleFactor) {\n this._el = el;\n return this.resize(width, height, origin, scaleFactor);\n};\n\n/**\n * Returns the parent container element for a visualization.\n * @return {DOMElement} - The containing DOM element.\n */\nprototype.element = function() {\n return this._el;\n};\n\n/**\n * Returns the scene element (e.g., canvas or SVG) of the visualization\n * Subclasses must override if the first child is not the scene element.\n * @return {DOMElement} - The scene (e.g., canvas or SVG) element.\n */\nprototype.canvas = function() {\n return this._el && this._el.firstChild;\n};\n\n/**\n * Get / set the background color.\n */\nprototype.background = function(bgcolor) {\n if (arguments.length === 0) return this._bgcolor;\n this._bgcolor = bgcolor;\n return this;\n};\n\n/**\n * Resize the display.\n * @param {number} width - The new coordinate width of the display, in pixels.\n * @param {number} height - The new coordinate height of the display, in pixels.\n * @param {Array} origin - The new origin of the display, in pixels.\n * The coordinate system will be translated to this point.\n * @param {number} [scaleFactor=1] - Optional scaleFactor by which to multiply\n * the width and height to determine the final pixel size.\n * @return {Renderer} - This renderer instance;\n */\nprototype.resize = function(width, height, origin, scaleFactor) {\n this._width = width;\n this._height = height;\n this._origin = origin || [0, 0];\n this._scale = scaleFactor || 1;\n return this;\n};\n\n/**\n * Report a dirty item whose bounds should be redrawn.\n * This base class method does nothing. Subclasses that perform\n * incremental should implement this method.\n * @param {Item} item - The dirty item whose bounds should be redrawn.\n */\nprototype.dirty = function(/*item*/) {\n};\n\n/**\n * Render an input scenegraph, potentially with a set of dirty items.\n * This method will perform an immediate rendering with available resources.\n * The renderer may also need to perform image loading to perform a complete\n * render. This process can lead to asynchronous re-rendering of the scene\n * after this method returns. To receive notification when rendering is\n * complete, use the renderAsync method instead.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @return {Renderer} - This renderer instance.\n */\nprototype.render = function(scene) {\n var r = this;\n\n // bind arguments into a render call, and cache it\n // this function may be subsequently called for async redraw\n r._call = function() { r._render(scene); };\n\n // invoke the renderer\n r._call();\n\n // clear the cached call for garbage collection\n // async redraws will stash their own copy\n r._call = null;\n\n return r;\n};\n\n/**\n * Internal rendering method. Renderer subclasses should override this\n * method to actually perform rendering.\n * @param {object} scene - The root mark of a scenegraph to render.\n */\nprototype._render = function(/*scene*/) {\n // subclasses to override\n};\n\n/**\n * Asynchronous rendering method. Similar to render, but returns a Promise\n * that resolves when all rendering is completed. Sometimes a renderer must\n * perform image loading to get a complete rendering. The returned\n * Promise will not resolve until this process completes.\n * @param {object} scene - The root mark of a scenegraph to render.\n * @return {Promise} - A Promise that resolves when rendering is complete.\n */\nprototype.renderAsync = function(scene) {\n var r = this.render(scene);\n return this._ready\n ? this._ready.then(function() { return r; })\n : Promise.resolve(r);\n};\n\n/**\n * Internal method for asynchronous resource loading.\n * Proxies method calls to the ImageLoader, and tracks loading\n * progress to invoke a re-render once complete.\n * @param {string} method - The method name to invoke on the ImageLoader.\n * @param {string} uri - The URI for the requested resource.\n * @return {Promise} - A Promise that resolves to the requested resource.\n */\nprototype._load = function(method, uri) {\n var r = this,\n p = r._loader[method](uri);\n\n if (!r._ready) {\n // re-render the scene when loading completes\n var call = r._call;\n r._ready = r._loader.ready()\n .then(function(redraw) {\n if (redraw) call();\n r._ready = null;\n });\n }\n\n return p;\n};\n\n/**\n * Sanitize a URL to include as a hyperlink in the rendered scene.\n * This method proxies a call to ImageLoader.sanitizeURL, but also tracks\n * image loading progress and invokes a re-render once complete.\n * @param {string} uri - The URI string to sanitize.\n * @return {Promise} - A Promise that resolves to the sanitized URL.\n */\nprototype.sanitizeURL = function(uri) {\n return this._load('sanitizeURL', uri);\n};\n\n/**\n * Requests an image to include in the rendered scene.\n * This method proxies a call to ImageLoader.loadImage, but also tracks\n * image loading progress and invokes a re-render once complete.\n * @param {string} uri - The URI string of the image.\n * @return {Promise} - A Promise that resolves to the loaded Image.\n */\nprototype.loadImage = function(uri) {\n return this._load('loadImage', uri);\n};\n","export var Events = [\n 'keydown',\n 'keypress',\n 'keyup',\n 'dragenter',\n 'dragleave',\n 'dragover',\n 'mousedown',\n 'mouseup',\n 'mousemove',\n 'mouseout',\n 'mouseover',\n 'click',\n 'dblclick',\n 'wheel',\n 'mousewheel',\n 'touchstart',\n 'touchmove',\n 'touchend'\n];\n\nexport var TooltipShowEvent = 'mousemove';\n\nexport var TooltipHideEvent = 'mouseout';\n\nexport var HrefEvent = 'click';\n","import Handler from './Handler';\nimport Marks from './marks/index';\nimport {Events, HrefEvent, TooltipShowEvent, TooltipHideEvent} from './util/events';\nimport point from './util/point';\nimport {domFind} from './util/dom';\nimport {inherits} from 'vega-util';\n\nexport default function CanvasHandler(loader, tooltip) {\n Handler.call(this, loader, tooltip);\n this._down = null;\n this._touch = null;\n this._first = true;\n}\n\nvar prototype = inherits(CanvasHandler, Handler);\n\nprototype.initialize = function(el, origin, obj) {\n // add event listeners\n var canvas = this._canvas = el && domFind(el, 'canvas');\n if (canvas) {\n var that = this;\n this.events.forEach(function(type) {\n canvas.addEventListener(type, function(evt) {\n if (prototype[type]) {\n prototype[type].call(that, evt);\n } else {\n that.fire(type, evt);\n }\n });\n });\n }\n\n return Handler.prototype.initialize.call(this, el, origin, obj);\n};\n\n// return the backing canvas instance\nprototype.canvas = function() {\n return this._canvas;\n};\n\n// retrieve the current canvas context\nprototype.context = function() {\n return this._canvas.getContext('2d');\n};\n\n// supported events\nprototype.events = Events;\n\n// to keep old versions of firefox happy\nprototype.DOMMouseScroll = function(evt) {\n this.fire('mousewheel', evt);\n};\n\nfunction move(moveEvent, overEvent, outEvent) {\n return function(evt) {\n var a = this._active,\n p = this.pickEvent(evt);\n\n if (p === a) {\n // active item and picked item are the same\n this.fire(moveEvent, evt); // fire move\n } else {\n // active item and picked item are different\n if (!a || !a.exit) {\n // fire out for prior active item\n // suppress if active item was removed from scene\n this.fire(outEvent, evt);\n }\n this._active = p; // set new active item\n this.fire(overEvent, evt); // fire over for new active item\n this.fire(moveEvent, evt); // fire move for new active item\n }\n };\n}\n\nfunction inactive(type) {\n return function(evt) {\n this.fire(type, evt);\n this._active = null;\n };\n}\n\nprototype.mousemove = move('mousemove', 'mouseover', 'mouseout');\nprototype.dragover = move('dragover', 'dragenter', 'dragleave');\n\nprototype.mouseout = inactive('mouseout');\nprototype.dragleave = inactive('dragleave');\n\nprototype.mousedown = function(evt) {\n this._down = this._active;\n this.fire('mousedown', evt);\n};\n\nprototype.click = function(evt) {\n if (this._down === this._active) {\n this.fire('click', evt);\n this._down = null;\n }\n};\n\nprototype.touchstart = function(evt) {\n this._touch = this.pickEvent(evt.changedTouches[0]);\n\n if (this._first) {\n this._active = this._touch;\n this._first = false;\n }\n\n this.fire('touchstart', evt, true);\n};\n\nprototype.touchmove = function(evt) {\n this.fire('touchmove', evt, true);\n};\n\nprototype.touchend = function(evt) {\n this.fire('touchend', evt, true);\n this._touch = null;\n};\n\n// fire an event\nprototype.fire = function(type, evt, touch) {\n var a = touch ? this._touch : this._active,\n h = this._handlers[type], i, len;\n\n // set event type relative to scenegraph items\n evt.vegaType = type;\n\n // handle hyperlinks and tooltips first\n if (type === HrefEvent && a && a.href) {\n this.handleHref(evt, a, a.href);\n } else if (type === TooltipShowEvent || type === TooltipHideEvent) {\n this.handleTooltip(evt, a, type !== TooltipHideEvent);\n }\n\n // invoke all registered handlers\n if (h) {\n for (i=0, len=h.length; i= 0) {\n h.splice(i, 1);\n }\n\n return this;\n};\n\nprototype.pickEvent = function(evt) {\n var p = point(evt, this._canvas),\n o = this._origin;\n return this.pick(this._scene, p[0], p[1], p[0] - o[0], p[1] - o[1]);\n};\n\n// find the scenegraph item at the current mouse position\n// x, y -- the absolute x, y mouse coordinates on the canvas element\n// gx, gy -- the relative coordinates within the current group\nprototype.pick = function(scene, x, y, gx, gy) {\n var g = this.context(),\n mark = Marks[scene.marktype];\n return mark.pick.call(this, g, scene, x, y, gx, gy);\n};\n","import {isFunction} from 'vega-util';\n\nexport default function(context, scene) {\n var clip = scene.clip;\n\n context.save();\n context.beginPath();\n\n if (isFunction(clip)) {\n clip(context);\n } else {\n var group = scene.group;\n context.rect(0, 0, group.width || 0, group.height || 0);\n }\n\n context.clip();\n}\n","function devicePixelRatio() {\n return typeof window !== 'undefined' ? window.devicePixelRatio || 1 : 1;\n}\n\nvar pixelRatio = devicePixelRatio();\n\nexport default function(canvas, width, height, origin, scaleFactor, opt) {\n var inDOM = typeof HTMLElement !== 'undefined'\n && canvas instanceof HTMLElement\n && canvas.parentNode != null;\n\n var context = canvas.getContext('2d'),\n ratio = inDOM ? pixelRatio : scaleFactor,\n key;\n\n canvas.width = width * ratio;\n canvas.height = height * ratio;\n\n for (key in opt) {\n context[key] = opt[key];\n }\n\n if (inDOM && ratio !== 1) {\n canvas.style.width = width + 'px';\n canvas.style.height = height + 'px';\n }\n\n context.pixelRatio = ratio;\n context.setTransform(\n ratio, 0, 0, ratio,\n ratio * origin[0],\n ratio * origin[1]\n );\n\n return canvas;\n}\n","import Renderer from './Renderer';\nimport Bounds from './Bounds';\nimport marks from './marks/index';\n\nimport {domClear} from './util/dom';\nimport clip from './util/canvas/clip';\nimport resize from './util/canvas/resize';\nimport {canvas} from 'vega-canvas';\nimport {inherits} from 'vega-util';\n\nexport default function CanvasRenderer(loader) {\n Renderer.call(this, loader);\n this._redraw = false;\n this._dirty = new Bounds();\n}\n\nvar prototype = inherits(CanvasRenderer, Renderer),\n base = Renderer.prototype,\n tempBounds = new Bounds();\n\nprototype.initialize = function(el, width, height, origin, scaleFactor, options) {\n this._options = options;\n this._canvas = canvas(1, 1, options && options.type); // instantiate a small canvas\n\n if (el) {\n domClear(el, 0).appendChild(this._canvas);\n this._canvas.setAttribute('class', 'marks');\n }\n // this method will invoke resize to size the canvas appropriately\n return base.initialize.call(this, el, width, height, origin, scaleFactor);\n};\n\nprototype.resize = function(width, height, origin, scaleFactor) {\n base.resize.call(this, width, height, origin, scaleFactor);\n resize(this._canvas, this._width, this._height,\n this._origin, this._scale, this._options && this._options.context);\n this._redraw = true;\n return this;\n};\n\nprototype.canvas = function() {\n return this._canvas;\n};\n\nprototype.context = function() {\n return this._canvas ? this._canvas.getContext('2d') : null;\n};\n\nprototype.dirty = function(item) {\n var b = translate(item.bounds, item.mark.group);\n this._dirty.union(b);\n};\n\nfunction clipToBounds(g, b, origin) {\n // expand bounds by 1 pixel, then round to pixel boundaries\n b.expand(1).round();\n\n // to avoid artifacts translate if origin has fractional pixels\n b.translate(-(origin[0] % 1), -(origin[1] % 1));\n\n // set clipping path\n g.beginPath();\n g.rect(b.x1, b.y1, b.width(), b.height());\n g.clip();\n\n return b;\n}\n\nfunction translate(bounds, group) {\n if (group == null) return bounds;\n var b = tempBounds.clear().union(bounds);\n for (; group != null; group = group.mark.group) {\n b.translate(group.x || 0, group.y || 0);\n }\n return b;\n}\n\nprototype._render = function(scene) {\n var g = this.context(),\n o = this._origin,\n w = this._width,\n h = this._height,\n b = this._dirty;\n\n // setup\n g.save();\n if (this._redraw || b.empty()) {\n this._redraw = false;\n b = null;\n } else {\n b = clipToBounds(g, b, o);\n }\n\n this.clear(-o[0], -o[1], w, h);\n\n // render\n this.draw(g, scene, b);\n\n // takedown\n g.restore();\n\n this._dirty.clear();\n return this;\n};\n\nprototype.draw = function(ctx, scene, bounds) {\n var mark = marks[scene.marktype];\n if (scene.clip) clip(ctx, scene);\n mark.draw.call(this, ctx, scene, bounds);\n if (scene.clip) ctx.restore();\n};\n\nprototype.clear = function(x, y, w, h) {\n var g = this.context();\n g.clearRect(x, y, w, h);\n if (this._bgcolor != null) {\n g.fillStyle = this._bgcolor;\n g.fillRect(x, y, w, h);\n }\n};\n","import Handler from './Handler';\nimport {domFind} from './util/dom';\nimport {HrefEvent, TooltipShowEvent, TooltipHideEvent} from './util/events';\nimport {inherits} from 'vega-util';\n\nexport default function SVGHandler(loader, tooltip) {\n Handler.call(this, loader, tooltip);\n var h = this;\n h._hrefHandler = listener(h, function(evt, item) {\n if (item && item.href) h.handleHref(evt, item, item.href);\n });\n h._tooltipHandler = listener(h, function(evt, item) {\n h.handleTooltip(evt, item, evt.type !== TooltipHideEvent);\n });\n}\n\nvar prototype = inherits(SVGHandler, Handler);\n\nprototype.initialize = function(el, origin, obj) {\n var svg = this._svg;\n if (svg) {\n svg.removeEventListener(HrefEvent, this._hrefHandler);\n svg.removeEventListener(TooltipShowEvent, this._tooltipHandler);\n svg.removeEventListener(TooltipHideEvent, this._tooltipHandler);\n }\n this._svg = svg = el && domFind(el, 'svg');\n if (svg) {\n svg.addEventListener(HrefEvent, this._hrefHandler);\n svg.addEventListener(TooltipShowEvent, this._tooltipHandler);\n svg.addEventListener(TooltipHideEvent, this._tooltipHandler);\n }\n return Handler.prototype.initialize.call(this, el, origin, obj);\n};\n\nprototype.canvas = function() {\n return this._svg;\n};\n\n// wrap an event listener for the SVG DOM\nfunction listener(context, handler) {\n return function(evt) {\n var target = evt.target,\n item = target.__data__;\n evt.vegaType = evt.type;\n item = Array.isArray(item) ? item[0] : item;\n handler.call(context._obj, evt, item);\n };\n}\n\n// add an event handler\nprototype.on = function(type, handler) {\n var name = this.eventName(type),\n h = this._handlers,\n i = this._handlerIndex(h[name], type, handler);\n\n if (i < 0) {\n var x = {\n type: type,\n handler: handler,\n listener: listener(this, handler)\n };\n\n (h[name] || (h[name] = [])).push(x);\n if (this._svg) {\n this._svg.addEventListener(name, x.listener);\n }\n }\n\n return this;\n};\n\n// remove an event handler\nprototype.off = function(type, handler) {\n var name = this.eventName(type),\n h = this._handlers[name],\n i = this._handlerIndex(h, type, handler);\n\n if (i >= 0) {\n if (this._svg) {\n this._svg.removeEventListener(name, h[i].listener);\n }\n h.splice(i, 1);\n }\n\n return this;\n};\n","// generate string for an opening xml tag\n// tag: the name of the xml tag\n// attr: hash of attribute name-value pairs to include\n// raw: additional raw string to include in tag markup\nexport function openTag(tag, attr, raw) {\n var s = '<' + tag, key, val;\n if (attr) {\n for (key in attr) {\n val = attr[key];\n if (val != null) {\n s += ' ' + key + '=\"' + val + '\"';\n }\n }\n }\n if (raw) s += ' ' + raw;\n return s + '>';\n}\n\n// generate string for closing xml tag\n// tag: the name of the xml tag\nexport function closeTag(tag) {\n return '';\n}\n","export default {\n 'version': '1.1',\n 'xmlns': 'http://www.w3.org/2000/svg',\n 'xmlns:xlink': 'http://www.w3.org/1999/xlink'\n};","export var styles = {\n 'fill': 'fill',\n 'fillOpacity': 'fill-opacity',\n 'stroke': 'stroke',\n 'strokeOpacity': 'stroke-opacity',\n 'strokeWidth': 'stroke-width',\n 'strokeCap': 'stroke-linecap',\n 'strokeJoin': 'stroke-linejoin',\n 'strokeDash': 'stroke-dasharray',\n 'strokeDashOffset': 'stroke-dashoffset',\n 'strokeMiterLimit': 'stroke-miterlimit',\n 'opacity': 'opacity'\n};\n\nexport var styleProperties = Object.keys(styles);\n","import Renderer from './Renderer';\nimport {gradientRef, isGradient, patternPrefix} from './Gradient';\nimport marks from './marks/index';\nimport {domChild, domClear, domCreate, cssClass} from './util/dom';\nimport {openTag, closeTag} from './util/tags';\nimport {fontFamily, fontSize, textValue} from './util/text';\nimport {visit} from './util/visit';\nimport clip from './util/svg/clip';\nimport metadata from './util/svg/metadata';\nimport {styles, styleProperties} from './util/svg/styles';\nimport {inherits} from 'vega-util';\n\nvar ns = metadata.xmlns;\n\nexport default function SVGRenderer(loader) {\n Renderer.call(this, loader);\n this._dirtyID = 1;\n this._dirty = [];\n this._svg = null;\n this._root = null;\n this._defs = null;\n}\n\nvar prototype = inherits(SVGRenderer, Renderer);\nvar base = Renderer.prototype;\n\nprototype.initialize = function(el, width, height, padding) {\n if (el) {\n this._svg = domChild(el, 0, 'svg', ns);\n this._svg.setAttribute('class', 'marks');\n domClear(el, 1);\n // set the svg root group\n this._root = domChild(this._svg, 0, 'g', ns);\n domClear(this._svg, 1);\n }\n\n // create the svg definitions cache\n this._defs = {\n gradient: {},\n clipping: {}\n };\n\n // set background color if defined\n this.background(this._bgcolor);\n\n return base.initialize.call(this, el, width, height, padding);\n};\n\nprototype.background = function(bgcolor) {\n if (arguments.length && this._svg) {\n this._svg.style.setProperty('background-color', bgcolor);\n }\n return base.background.apply(this, arguments);\n};\n\nprototype.resize = function(width, height, origin, scaleFactor) {\n base.resize.call(this, width, height, origin, scaleFactor);\n\n if (this._svg) {\n this._svg.setAttribute('width', this._width * this._scale);\n this._svg.setAttribute('height', this._height * this._scale);\n this._svg.setAttribute('viewBox', '0 0 ' + this._width + ' ' + this._height);\n this._root.setAttribute('transform', 'translate(' + this._origin + ')');\n }\n\n this._dirty = [];\n\n return this;\n};\n\nprototype.canvas = function() {\n return this._svg;\n};\n\nprototype.svg = function() {\n if (!this._svg) return null;\n\n var attr = {\n class: 'marks',\n width: this._width * this._scale,\n height: this._height * this._scale,\n viewBox: '0 0 ' + this._width + ' ' + this._height\n };\n for (var key in metadata) {\n attr[key] = metadata[key];\n }\n\n var bg = !this._bgcolor ? ''\n : (openTag('rect', {\n width: this._width,\n height: this._height,\n style: 'fill: ' + this._bgcolor + ';'\n }) + closeTag('rect'));\n\n return openTag('svg', attr) + bg + this._svg.innerHTML + closeTag('svg');\n};\n\n\n// -- Render entry point --\n\nprototype._render = function(scene) {\n // perform spot updates and re-render markup\n if (this._dirtyCheck()) {\n if (this._dirtyAll) this._resetDefs();\n this.draw(this._root, scene);\n domClear(this._root, 1);\n }\n\n this.updateDefs();\n\n this._dirty = [];\n ++this._dirtyID;\n\n return this;\n};\n\n// -- Manage SVG definitions ('defs') block --\n\nprototype.updateDefs = function() {\n var svg = this._svg,\n defs = this._defs,\n el = defs.el,\n index = 0, id;\n\n for (id in defs.gradient) {\n if (!el) defs.el = (el = domChild(svg, 0, 'defs', ns));\n index = updateGradient(el, defs.gradient[id], index);\n }\n\n for (id in defs.clipping) {\n if (!el) defs.el = (el = domChild(svg, 0, 'defs', ns));\n index = updateClipping(el, defs.clipping[id], index);\n }\n\n // clean-up\n if (el) {\n if (index === 0) {\n svg.removeChild(el);\n defs.el = null;\n } else {\n domClear(el, index);\n }\n }\n};\n\nfunction updateGradient(el, grad, index) {\n var i, n, stop;\n\n if (grad.gradient === 'radial') {\n // SVG radial gradients automatically transform to normalized bbox\n // coordinates, in a way that is cumbersome to replicate in canvas.\n // So we wrap the radial gradient in a pattern element, allowing us\n // to mantain a circular gradient that matches what canvas provides.\n var pt = domChild(el, index++, 'pattern', ns);\n pt.setAttribute('id', patternPrefix + grad.id);\n pt.setAttribute('viewBox', '0,0,1,1');\n pt.setAttribute('width', '100%');\n pt.setAttribute('height', '100%');\n pt.setAttribute('preserveAspectRatio', 'xMidYMid slice');\n\n pt = domChild(pt, 0, 'rect', ns);\n pt.setAttribute('width', '1');\n pt.setAttribute('height', '1');\n pt.setAttribute('fill', 'url(' + href() + '#' + grad.id + ')');\n\n el = domChild(el, index++, 'radialGradient', ns);\n el.setAttribute('id', grad.id);\n el.setAttribute('fx', grad.x1);\n el.setAttribute('fy', grad.y1);\n el.setAttribute('fr', grad.r1);\n el.setAttribute('cx', grad.x2);\n el.setAttribute('cy', grad.y2);\n el.setAttribute( 'r', grad.r2);\n } else {\n el = domChild(el, index++, 'linearGradient', ns);\n el.setAttribute('id', grad.id);\n el.setAttribute('x1', grad.x1);\n el.setAttribute('x2', grad.x2);\n el.setAttribute('y1', grad.y1);\n el.setAttribute('y2', grad.y2);\n }\n\n for (i=0, n=grad.stops.length; i 1;\n}\n\n\n// -- Set attributes & styles on SVG elements ---\n\nvar element = null, // temp var for current SVG element\n values = null; // temp var for current values hash\n\n// Extra configuration for certain mark types\nvar mark_extras = {\n group: function(mdef, el, item) {\n values = el.__values__; // use parent's values hash\n\n element = el.childNodes[1];\n mdef.foreground(emit, item, this);\n\n element = el.childNodes[0];\n mdef.background(emit, item, this);\n\n var value = item.mark.interactive === false ? 'none' : null;\n if (value !== values.events) {\n element.style.setProperty('pointer-events', value);\n values.events = value;\n }\n },\n text: function(mdef, el, item) {\n var value;\n\n value = textValue(item);\n if (value !== values.text) {\n el.textContent = value;\n values.text = value;\n }\n\n setStyle(el, 'font-family', fontFamily(item));\n setStyle(el, 'font-size', fontSize(item) + 'px');\n setStyle(el, 'font-style', item.fontStyle);\n setStyle(el, 'font-variant', item.fontVariant);\n setStyle(el, 'font-weight', item.fontWeight);\n }\n};\n\nfunction setStyle(el, name, value) {\n if (value !== values[name]) {\n if (value == null) {\n el.style.removeProperty(name);\n } else {\n el.style.setProperty(name, value + '');\n }\n values[name] = value;\n }\n}\n\nprototype._update = function(mdef, el, item) {\n // set dom element and values cache\n // provides access to emit method\n element = el;\n values = el.__values__;\n\n // apply svg attributes\n mdef.attr(emit, item, this);\n\n // some marks need special treatment\n var extra = mark_extras[mdef.type];\n if (extra) extra.call(this, mdef, el, item);\n\n // apply svg css styles\n // note: element may be modified by 'extra' method\n this.style(element, item);\n};\n\nfunction emit(name, value, ns) {\n // early exit if value is unchanged\n if (value === values[name]) return;\n\n if (value != null) {\n // if value is provided, update DOM attribute\n if (ns) {\n element.setAttributeNS(ns, name, value);\n } else {\n element.setAttribute(name, value);\n }\n } else {\n // else remove DOM attribute\n if (ns) {\n element.removeAttributeNS(ns, name);\n } else {\n element.removeAttribute(name);\n }\n }\n\n // note current value for future comparison\n values[name] = value;\n}\n\nprototype.style = function(el, o) {\n if (o == null) return;\n var i, n, prop, name, value;\n\n for (i=0, n=styleProperties.length; i 0) ? openTag('defs') + defs + closeTag('defs') : '';\n};\n\nvar object;\n\nfunction emit(name, value, ns, prefixed) {\n object[prefixed || name] = value;\n}\n\nprototype.attributes = function(attr, item) {\n object = {};\n attr(emit, item, this);\n return object;\n};\n\nprototype.href = function(item) {\n var that = this,\n href = item.href,\n attr;\n\n if (href) {\n if (attr = that._hrefs && that._hrefs[href]) {\n return attr;\n } else {\n that.sanitizeURL(href).then(function(attr) {\n // rewrite to use xlink namespace\n // note that this will be deprecated in SVG 2.0\n attr['xlink:href'] = attr.href;\n attr.href = null;\n (that._hrefs || (that._hrefs = {}))[href] = attr;\n });\n }\n }\n return null;\n};\n\nprototype.mark = function(scene) {\n var renderer = this,\n mdef = marks[scene.marktype],\n tag = mdef.tag,\n defs = this._defs,\n str = '',\n style;\n\n if (tag !== 'g' && scene.interactive === false) {\n style = 'style=\"pointer-events: none;\"';\n }\n\n // render opening group tag\n str += openTag('g', {\n 'class': cssClass(scene),\n 'clip-path': scene.clip ? clip(renderer, scene, scene.group) : null\n }, style);\n\n // render contained elements\n function process(item) {\n var href = renderer.href(item);\n if (href) str += openTag('a', href);\n\n style = (tag !== 'g') ? applyStyles(item, scene, tag, defs) : null;\n str += openTag(tag, renderer.attributes(mdef.attr, item), style);\n\n if (tag === 'text') {\n str += escape_text(textValue(item));\n } else if (tag === 'g') {\n str += openTag('path', renderer.attributes(mdef.background, item),\n applyStyles(item, scene, 'bgrect', defs)) + closeTag('path');\n\n str += openTag('g', renderer.attributes(mdef.foreground, item))\n + renderer.markGroup(item)\n + closeTag('g');\n }\n\n str += closeTag(tag);\n if (href) str += closeTag('a');\n }\n\n if (mdef.nested) {\n if (scene.items && scene.items.length) process(scene.items[0]);\n } else {\n visit(scene, process);\n }\n\n // render closing group tag\n return str + closeTag('g');\n};\n\nprototype.markGroup = function(scene) {\n var renderer = this,\n str = '';\n\n visit(scene, function(item) {\n str += renderer.mark(item);\n });\n\n return str;\n};\n\nfunction applyStyles(o, mark, tag, defs) {\n if (o == null) return '';\n var i, n, prop, name, value, s = '';\n\n if (tag === 'bgrect' && mark.interactive === false) {\n s += 'pointer-events: none; ';\n }\n\n if (tag === 'text') {\n s += 'font-family: ' + fontFamily(o) + '; ';\n s += 'font-size: ' + fontSize(o) + 'px; ';\n if (o.fontStyle) s += 'font-style: ' + o.fontStyle + '; ';\n if (o.fontVariant) s += 'font-variant: ' + o.fontVariant + '; ';\n if (o.fontWeight) s += 'font-weight: ' + o.fontWeight + '; ';\n }\n\n for (i=0, n=styleProperties.length; i/g, '>');\n}\n","import CanvasHandler from './CanvasHandler';\nimport CanvasRenderer from './CanvasRenderer';\nimport SVGHandler from './SVGHandler';\nimport SVGRenderer from './SVGRenderer';\nimport SVGStringRenderer from './SVGStringRenderer';\n\nvar Canvas = 'canvas';\nvar PNG = 'png';\nvar SVG = 'svg';\nvar None = 'none';\n\nexport var RenderType = {\n Canvas: Canvas,\n PNG: PNG,\n SVG: SVG,\n None: None\n};\n\nvar modules = {};\n\nmodules[Canvas] = modules[PNG] = {\n renderer: CanvasRenderer,\n headless: CanvasRenderer,\n handler: CanvasHandler\n};\n\nmodules[SVG] = {\n renderer: SVGRenderer,\n headless: SVGStringRenderer,\n handler: SVGHandler\n};\n\nmodules[None] = {};\n\nexport function renderModule(name, _) {\n name = String(name || '').toLowerCase();\n if (arguments.length > 1) {\n modules[name] = _;\n return this;\n } else {\n return modules[name];\n }\n}\n","import Marks from './marks/index';\nimport {error} from 'vega-util';\nimport Bounds from './Bounds';\n\nexport function intersect(scene, bounds, filter) {\n const hits = [], // intersection results\n box = new Bounds().union(bounds), // defensive copy\n type = scene.marktype;\n\n return type ? intersectMark(scene, box, filter, hits)\n : type === 'group' ? intersectGroup(scene, box, filter, hits)\n : error('Intersect scene must be mark node or group item.');\n}\n\nfunction intersectMark(mark, box, filter, hits) {\n if (visitMark(mark, box, filter)) {\n const items = mark.items,\n type = mark.marktype,\n n = items.length;\n\n let i = 0;\n\n if (type === 'group') {\n for (; i re-bound all items\n // updates group bounds in response to modified group content\n pulse.visit(pulse.MOD, function(item) { view.dirty(item); });\n markBounds.clear();\n mark.items.forEach(function(item) {\n markBounds.union(boundItem(item, bound));\n });\n\n // force reflow for legends to propagate any layout changes\n // suppress other types to prevent overall layout jumpiness\n if (mark.role === LegendRole) pulse.reflow();\n }\n\n else {\n // incrementally update bounds, re-bound mark as needed\n rebound = pulse.changed(pulse.REM);\n\n pulse.visit(pulse.ADD, function(item) {\n markBounds.union(boundItem(item, bound));\n });\n\n pulse.visit(pulse.MOD, function(item) {\n rebound = rebound || markBounds.alignsWith(item.bounds);\n view.dirty(item);\n markBounds.union(boundItem(item, bound));\n });\n\n if (rebound) {\n markBounds.clear();\n mark.items.forEach(function(item) { markBounds.union(item.bounds); });\n }\n }\n\n // ensure mark bounds do not exceed any clipping region\n boundClip(mark);\n\n return pulse.modifies('bounds');\n};\n\nfunction boundItem(item, bound, opt) {\n return bound(item.bounds.clear(), item, opt);\n}\n","import {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\nvar COUNTER_NAME = ':vega_identifier:';\n\n/**\n * Adds a unique identifier to all added tuples.\n * This transform creates a new signal that serves as an id counter.\n * As a result, the id counter is shared across all instances of this\n * transform, generating unique ids across multiple data streams. In\n * addition, this signal value can be included in a snapshot of the\n * dataflow state, enabling correct resumption of id allocation.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {string} params.as - The field name for the generated identifier.\n */\nexport default function Identifier(params) {\n Transform.call(this, 0, params);\n}\n\nIdentifier.Definition = {\n \"type\": \"Identifier\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"as\", \"type\": \"string\", \"required\": true }\n ]\n};\n\nvar prototype = inherits(Identifier, Transform);\n\nprototype.transform = function(_, pulse) {\n var counter = getCounter(pulse.dataflow),\n id = counter.value,\n as = _.as;\n\n pulse.visit(pulse.ADD, function(t) {\n if (!t[as]) t[as] = ++id;\n });\n\n counter.set(this.value = id);\n return pulse;\n};\n\nfunction getCounter(view) {\n var counter = view._signals[COUNTER_NAME];\n if (!counter) {\n view._signals[COUNTER_NAME] = (counter = view.add(0));\n }\n return counter;\n}\n","import {Group} from './constants';\nimport {Transform} from 'vega-dataflow';\nimport {Item, GroupItem} from 'vega-scenegraph';\nimport {inherits} from 'vega-util';\n\n/**\n * Bind scenegraph items to a scenegraph mark instance.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.markdef - The mark definition for creating the mark.\n * This is an object of legal scenegraph mark properties which *must* include\n * the 'marktype' property.\n */\nexport default function Mark(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(Mark, Transform);\n\nprototype.transform = function(_, pulse) {\n var mark = this.value;\n\n // acquire mark on first invocation, bind context and group\n if (!mark) {\n mark = pulse.dataflow.scenegraph().mark(_.markdef, lookup(_), _.index);\n mark.group.context = _.context;\n if (!_.context.group) _.context.group = mark.group;\n mark.source = this;\n mark.clip = _.clip;\n mark.interactive = _.interactive;\n this.value = mark;\n }\n\n // initialize entering items\n var Init = mark.marktype === Group ? GroupItem : Item;\n pulse.visit(pulse.ADD, function(item) { Init.call(item, mark); });\n\n // update clipping and/or interactive status\n if (_.modified('clip') || _.modified('interactive')) {\n mark.clip = _.clip;\n mark.interactive = !!_.interactive;\n mark.zdirty = true; // force scenegraph re-eval\n pulse.reflow();\n }\n\n // bind items array to scenegraph mark\n mark.items = pulse.source;\n return pulse;\n};\n\nfunction lookup(_) {\n var g = _.groups, p = _.parent;\n return g && g.size === 1 ? g.get(Object.keys(g.object)[0])\n : g && p ? g.lookup(p)\n : null;\n}\n","import {Top, Bottom} from './constants';\nimport {Transform} from 'vega-dataflow';\nimport {Bounds} from 'vega-scenegraph';\nimport {inherits, peek} from 'vega-util';\n\n/**\n * Analyze items for overlap, changing opacity to hide items with\n * overlapping bounding boxes. This transform will preserve at least\n * two items (e.g., first and last) even if overlap persists.\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator\n * function for sorting items.\n * @param {object} [params.method] - The overlap removal method to apply.\n * One of 'parity' (default, hide every other item until there is no\n * more overlap) or 'greedy' (sequentially scan and hide and items that\n * overlap with the last visible item).\n * @param {object} [params.boundScale] - A scale whose range should be used\n * to bound the items. Items exceeding the bounds of the scale range\n * will be treated as overlapping. If null or undefined, no bounds check\n * will be applied.\n * @param {object} [params.boundOrient] - The orientation of the scale\n * (top, bottom, left, or right) used to bound items. This parameter is\n * ignored if boundScale is null or undefined.\n * @param {object} [params.boundTolerance] - The tolerance in pixels for\n * bound inclusion testing (default 1). This specifies by how many pixels\n * an item's bounds may exceed the scale range bounds and not be culled.\n * @constructor\n */\nexport default function Overlap(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(Overlap, Transform);\n\nvar methods = {\n parity: function(items) {\n return items.filter((item, i) => i % 2 ? (item.opacity = 0) : 1);\n },\n greedy: function(items, sep) {\n var a;\n return items.filter((b, i) => {\n if (!i || !intersect(a.bounds, b.bounds, sep)) {\n a = b;\n return 1;\n } else {\n return b.opacity = 0;\n }\n });\n }\n};\n\n// compute bounding box intersection\n// including padding pixels of separation\nfunction intersect(a, b, sep) {\n return sep > Math.max(\n b.x1 - a.x2,\n a.x1 - b.x2,\n b.y1 - a.y2,\n a.y1 - b.y2\n );\n}\n\nfunction hasOverlap(items, pad) {\n for (var i=1, n=items.length, a=items[0].bounds, b; i 1 && b.height() > 1;\n}\n\nfunction boundTest(scale, orient, tolerance) {\n var range = scale.range(),\n b = new Bounds();\n\n if (orient === Top || orient === Bottom) {\n b.set(range[0], -Infinity, range[1], +Infinity);\n } else {\n b.set(-Infinity, range[0], +Infinity, range[1]);\n }\n b.expand(tolerance || 1);\n\n return item => b.encloses(item.bounds);\n}\n\n// reset all items to be fully opaque\nfunction reset(source) {\n source.forEach(item => item.opacity = 1);\n return source;\n}\n\n// add all tuples to mod, fork pulse if parameters were modified\n// fork prevents cross-stream tuple pollution (e.g., pulse from scale)\nfunction reflow(pulse, _) {\n return pulse.reflow(_.modified()).modifies('opacity');\n}\n\nprototype.transform = function(_, pulse) {\n var reduce = methods[_.method] || methods.parity,\n source = pulse.materialize(pulse.SOURCE).source,\n sep = _.separation || 0,\n items, test, bounds;\n\n if (!source || !source.length) return;\n\n if (!_.method) {\n // early exit if method is falsy\n if (_.modified('method')) {\n reset(source);\n pulse = reflow(pulse, _);\n }\n return pulse;\n }\n\n if (_.sort) {\n source = source.slice().sort(_.sort);\n }\n\n // skip labels with no content\n source = source.filter(hasBounds);\n\n items = reset(source);\n pulse = reflow(pulse, _);\n\n if (items.length >= 3 && hasOverlap(items, sep)) {\n do {\n items = reduce(items, sep);\n } while (items.length >= 3 && hasOverlap(items, sep));\n\n if (items.length < 3 && !peek(source).opacity) {\n if (items.length > 1) peek(items).opacity = 0;\n peek(source).opacity = 1;\n }\n }\n\n if (_.boundScale && _.boundTolerance >= 0) {\n test = boundTest(_.boundScale, _.boundOrient, +_.boundTolerance);\n source.forEach(item => {\n if (!test(item)) item.opacity = 0;\n });\n }\n\n // re-calculate mark bounds\n bounds = items[0].mark.bounds.clear();\n source.forEach(item => {\n if (item.opacity) bounds.union(item.bounds);\n });\n\n return pulse;\n};\n","import {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Queue modified scenegraph items for rendering.\n * @constructor\n */\nexport default function Render(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(Render, Transform);\n\nprototype.transform = function(_, pulse) {\n var view = pulse.dataflow;\n\n pulse.visit(pulse.ALL, function(item) { view.dirty(item); });\n\n // set z-index dirty flag as needed\n if (pulse.fields && pulse.fields['zindex']) {\n var item = pulse.source && pulse.source[0];\n if (item) item.mark.zdirty = true;\n }\n};\n","import {Bounds} from 'vega-scenegraph';\n\nexport const tempBounds = new Bounds();\n\nexport function set(item, property, value) {\n return item[property] === value ? 0\n : (item[property] = value, 1);\n}","import {Top, Bottom, Left, Right} from '../constants';\nimport {set, tempBounds} from './util';\nimport {boundStroke} from 'vega-scenegraph';\n\nconst AxisOffset = 0.5;\n\nexport function isYAxis(mark) {\n var orient = mark.items[0].datum.orient;\n return orient === Left || orient === Right;\n}\n\nfunction axisIndices(datum) {\n var index = +datum.grid;\n return [\n datum.ticks ? index++ : -1, // ticks index\n datum.labels ? index++ : -1, // labels index\n index + (+datum.domain) // title index\n ];\n}\n\nexport function axisLayout(view, axis, width, height) {\n var item = axis.items[0],\n datum = item.datum,\n orient = datum.orient,\n indices = axisIndices(datum),\n range = item.range,\n offset = item.offset,\n position = item.position,\n minExtent = item.minExtent,\n maxExtent = item.maxExtent,\n title = datum.title && item.items[indices[2]].items[0],\n titlePadding = item.titlePadding,\n bounds = item.bounds,\n x = 0, y = 0, i, s;\n\n tempBounds.clear().union(bounds);\n bounds.clear();\n if ((i=indices[0]) > -1) bounds.union(item.items[i].bounds);\n if ((i=indices[1]) > -1) bounds.union(item.items[i].bounds);\n\n // position axis group and title\n switch (orient) {\n case Top:\n x = position || 0;\n y = -offset;\n s = Math.max(minExtent, Math.min(maxExtent, -bounds.y1));\n if (title) s = axisTitleLayout(title, s, titlePadding, 0, -1, bounds);\n bounds.add(0, -s).add(range, 0);\n break;\n case Left:\n x = -offset;\n y = position || 0;\n s = Math.max(minExtent, Math.min(maxExtent, -bounds.x1));\n if (title) s = axisTitleLayout(title, s, titlePadding, 1, -1, bounds);\n bounds.add(-s, 0).add(0, range);\n break;\n case Right:\n x = width + offset;\n y = position || 0;\n s = Math.max(minExtent, Math.min(maxExtent, bounds.x2));\n if (title) s = axisTitleLayout(title, s, titlePadding, 1, 1, bounds);\n bounds.add(0, 0).add(s, range);\n break;\n case Bottom:\n x = position || 0;\n y = height + offset;\n s = Math.max(minExtent, Math.min(maxExtent, bounds.y2));\n if (title) s = axisTitleLayout(title, s, titlePadding, 0, 1, bounds);\n bounds.add(0, 0).add(range, s);\n break;\n default:\n x = item.x;\n y = item.y;\n }\n\n // update bounds\n boundStroke(bounds.translate(x, y), item);\n\n if (set(item, 'x', x + AxisOffset) | set(item, 'y', y + AxisOffset)) {\n item.bounds = tempBounds;\n view.dirty(item);\n item.bounds = bounds;\n view.dirty(item);\n }\n\n return item.mark.bounds.clear().union(bounds);\n}\n\nfunction axisTitleLayout(title, offset, pad, isYAxis, sign, bounds) {\n var b = title.bounds, dx = 0, dy = 0;\n\n if (title.auto) {\n offset += pad;\n\n isYAxis\n ? dx = (title.x || 0) - (title.x = sign * offset)\n : dy = (title.y || 0) - (title.y = sign * offset);\n\n b.translate(-dx, -dy);\n title.mark.bounds.set(b.x1, b.y1, b.x2, b.y2);\n\n if (isYAxis) {\n bounds.add(0, b.y1).add(0, b.y2);\n offset += b.width();\n } else {\n bounds.add(b.x1, 0).add(b.x2, 0);\n offset += b.height();\n }\n } else {\n bounds.union(b);\n }\n\n return offset;\n}\n","import {\n All, Each, Flush, Column, X, Y, Row, Middle, End,\n Group, AxisRole, LegendRole,\n RowHeader, RowFooter, RowTitle,\n ColHeader, ColFooter, ColTitle\n} from '../constants';\nimport {tempBounds} from './util';\nimport {Bounds} from 'vega-scenegraph';\nimport {isObject} from 'vega-util';\n\nfunction gridLayoutGroups(group) {\n var groups = group.items,\n n = groups.length,\n i = 0, mark, items;\n\n var views = {\n marks: [],\n rowheaders: [],\n rowfooters: [],\n colheaders: [],\n colfooters: [],\n rowtitle: null,\n coltitle: null\n };\n\n // layout axes, gather legends, collect bounds\n for (; i 1) {\n for (i=0; i 0) dx[i] += x / 2;\n }\n }\n\n // perform vertical centering\n if (alignRow && get(opt.center, Row) && ncols !== 1) {\n for (i=0; i 0) dy[i] += y / 2;\n }\n }\n\n // position grid relative to anchor\n for (i=0; i limit) {\n view.warn('Grid headers exceed limit: ' + limit);\n headers = headers.slice(0, limit);\n }\n\n // apply offset\n init += offset;\n\n // clear mark bounds for all headers\n for (j=0, m=headers.length; j= 0 && (g = groups[k]) == null; k-=back);\n\n // assign coordinates and update bounds\n if (isX) {\n x = band == null ? g.x : Math.round(g.bounds.x1 + band * g.bounds.width());\n y = init;\n } else {\n x = init;\n y = band == null ? g.y : Math.round(g.bounds.y1 + band * g.bounds.height());\n }\n b.union(h.bounds.translate(x - (h.x || 0), y - (h.y || 0)));\n h.x = x;\n h.y = y;\n view.dirty(h);\n\n // update current edge of layout bounds\n edge = agg(edge, b[bf]);\n }\n\n return edge;\n}\n\nfunction layoutTitle(view, g, offset, isX, bounds, band) {\n if (!g) return;\n view.dirty(g);\n\n // compute title coordinates\n var x = offset, y = offset;\n isX\n ? (x = Math.round(bounds.x1 + band * bounds.width()))\n : (y = Math.round(bounds.y1 + band * bounds.height()));\n\n // assign coordinates and update bounds\n g.bounds.translate(x - (g.x || 0), y - (g.y || 0));\n g.mark.bounds.clear().union(g.bounds);\n g.x = x;\n g.y = y;\n\n // queue title for redraw\n view.dirty(g);\n}\n","import {\n Symbols, Start, Middle, End, Top, Bottom, Left, Right,\n TopLeft, TopRight, BottomLeft, BottomRight, None,\n Each, Flush\n} from '../constants';\nimport {boundStroke} from 'vega-scenegraph';\n\n// utility for looking up legend layout configuration\nfunction lookup(config, orient) {\n const opt = config[orient] || {};\n return (key, d) => opt[key] != null ? opt[key]\n : config[key] != null ? config[key]\n : d;\n}\n\n// if legends specify offset directly, use the maximum specified value\nfunction offsets(legends, value) {\n var max = -Infinity;\n legends.forEach(item => {\n if (item.offset != null) max = Math.max(max, item.offset);\n });\n return max > -Infinity ? max : value;\n}\n\nexport function legendParams(g, orient, config, xb, yb, w, h) {\n const _ = lookup(config, orient),\n offset = offsets(g, _('offset', 0)),\n anchor = _('anchor', Start),\n mult = anchor === End ? 1 : anchor === Middle ? 0.5 : 0;\n\n const p = {\n align: Each,\n bounds: _('bounds', Flush),\n columns: _('direction') === 'vertical' ? 1 : g.length,\n padding: _('margin', 8),\n center: _('center'),\n nodirty: true\n };\n\n switch (orient) {\n case Left:\n p.anchor = {\n x: Math.floor(xb.x1) - offset, column: End,\n y: mult * (h || xb.height() + 2 * xb.y1), row: anchor\n };\n break;\n case Right:\n p.anchor = {\n x: Math.ceil(xb.x2) + offset,\n y: mult * (h || xb.height() + 2 * xb.y1), row: anchor\n };\n break;\n case Top:\n p.anchor = {\n y: Math.floor(yb.y1) - offset, row: End,\n x: mult * (w || yb.width() + 2 * yb.x1), column: anchor\n };\n break;\n case Bottom:\n p.anchor = {\n y: Math.ceil(yb.y2) + offset,\n x: mult * (w || yb.width() + 2 * yb.x1), column: anchor\n };\n break;\n case TopLeft:\n p.anchor = {x: offset, y: offset};\n break;\n case TopRight:\n p.anchor = {x: w - offset, y: offset, column: End};\n break;\n case BottomLeft:\n p.anchor = {x: offset, y: h - offset, row: End};\n break;\n case BottomRight:\n p.anchor = {x: w - offset, y: h - offset, column: End, row: End};\n break;\n }\n\n return p;\n}\n\nexport function legendLayout(view, legend) {\n var item = legend.items[0],\n datum = item.datum,\n orient = item.orient,\n bounds = item.bounds,\n x = item.x, y = item.y, w, h;\n\n // cache current bounds for later comparison\n item._bounds\n ? item._bounds.clear().union(bounds)\n : item._bounds = bounds.clone();\n bounds.clear();\n\n // adjust legend to accommodate padding and title\n legendGroupLayout(view, item, item.items[0].items[0]);\n\n // aggregate bounds to determine size, and include origin\n bounds = legendBounds(item, bounds);\n w = 2 * item.padding;\n h = 2 * item.padding;\n if (!bounds.empty()) {\n w = Math.ceil(bounds.width() + w);\n h = Math.ceil(bounds.height() + h);\n }\n\n if (datum.type === Symbols) {\n legendEntryLayout(item.items[0].items[0].items[0].items);\n }\n\n if (orient !== None) {\n item.x = x = 0;\n item.y = y = 0;\n }\n item.width = w;\n item.height = h;\n boundStroke(bounds.set(x, y, x + w, y + h), item);\n item.mark.bounds.clear().union(bounds);\n\n return item;\n}\n\nfunction legendBounds(item, b) {\n // aggregate item bounds\n item.items.forEach(_ => b.union(_.bounds));\n\n // anchor to legend origin\n b.x1 = item.padding;\n b.y1 = item.padding;\n\n return b;\n}\n\nfunction legendGroupLayout(view, item, entry) {\n var pad = item.padding,\n ex = pad - entry.x,\n ey = pad - entry.y;\n\n if (!item.datum.title) {\n if (ex || ey) translate(view, entry, ex, ey);\n } else {\n var title = item.items[1].items[0],\n anchor = title.anchor,\n tpad = item.titlePadding || 0,\n tx = pad - title.x,\n ty = pad - title.y;\n\n switch (title.orient) {\n case Left:\n ex += Math.ceil(title.bounds.width()) + tpad;\n break;\n case Right:\n case Bottom:\n break;\n default:\n ey += title.fontSize + tpad;\n }\n if (ex || ey) translate(view, entry, ex, ey);\n\n switch (title.orient) {\n case Left:\n ty += legendTitleOffset(item, entry, title, anchor, 0, 1);\n break;\n case Right:\n tx += legendTitleOffset(item, entry, title, End, 1, 0) + tpad;\n ty += legendTitleOffset(item, entry, title, anchor, 0, 1);\n break;\n case Bottom:\n tx += legendTitleOffset(item, entry, title, anchor, 1, 0);\n ty += legendTitleOffset(item, entry, title, End, 0, 0, 1) + tpad;\n break;\n default:\n tx += legendTitleOffset(item, entry, title, anchor, 1, 0);\n }\n if (tx || ty) translate(view, title, tx, ty);\n\n // translate legend if title pushes into negative coordinates\n if ((tx = Math.round(title.bounds.x1 - pad)) < 0) {\n translate(view, entry, -tx, 0);\n translate(view, title, -tx, 0);\n }\n }\n}\n\nfunction legendTitleOffset(item, entry, title, anchor, x, lr, noBar) {\n const grad = item.datum.type !== 'symbol',\n vgrad = title.datum.vgrad,\n e = grad && (lr || !vgrad) && !noBar ? entry.items[0] : entry,\n s = e.bounds[x ? 'x2' : 'y2'] - item.padding,\n u = vgrad && lr ? s : 0,\n v = vgrad && lr ? 0 : s;\n\n return Math.round(anchor === Start ? u : anchor === End ? v : 0.5 * s);\n}\n\nfunction translate(view, item, dx, dy) {\n item.x += dx;\n item.y += dy;\n item.bounds.translate(dx, dy);\n item.mark.bounds.translate(dx, dy);\n view.dirty(item);\n}\n\nfunction legendEntryLayout(entries) {\n // get max widths for each column\n var widths = entries.reduce(function(w, g) {\n w[g.column] = Math.max(g.bounds.x2 - g.x, w[g.column] || 0);\n return w;\n }, {});\n\n // set dimensions of legend entry groups\n entries.forEach(function(g) {\n g.width = widths[g.column];\n g.height = g.bounds.y2 - g.y;\n });\n}\n","import {Top, Bottom, Left, Right, Start, End, Group} from '../constants';\nimport {set, tempBounds} from './util';\n\nexport function titleLayout(view, title, width, height, viewBounds) {\n var item = title.items[0],\n frame = item.frame,\n orient = item.orient,\n anchor = item.anchor,\n offset = item.offset,\n bounds = item.bounds,\n vertical = (orient === Left || orient === Right),\n start = 0,\n end = vertical ? height : width,\n x = 0, y = 0, pos;\n\n if (frame !== Group) {\n orient === Left ? (start = viewBounds.y2, end = viewBounds.y1)\n : orient === Right ? (start = viewBounds.y1, end = viewBounds.y2)\n : (start = viewBounds.x1, end = viewBounds.x2);\n } else if (orient === Left) {\n start = height, end = 0;\n }\n\n pos = (anchor === Start) ? start\n : (anchor === End) ? end\n : (start + end) / 2;\n\n tempBounds.clear().union(bounds);\n\n // position title text\n switch (orient) {\n case Top:\n x = pos;\n y = viewBounds.y1 - offset;\n break;\n case Left:\n x = viewBounds.x1 - offset;\n y = pos;\n break;\n case Right:\n x = viewBounds.x2 + offset;\n y = pos;\n break;\n case Bottom:\n x = pos;\n y = viewBounds.y2 + offset;\n break;\n default:\n x = item.x;\n y = item.y;\n }\n\n bounds.translate(x - (item.x || 0), y - (item.y || 0));\n if (set(item, 'x', x) | set(item, 'y', y)) {\n item.bounds = tempBounds;\n view.dirty(item);\n item.bounds = bounds;\n view.dirty(item);\n }\n\n // update bounds\n return title.bounds.clear().union(bounds);\n}\n","import {\n AxisRole, LegendRole, TitleRole, FrameRole, ScopeRole,\n RowHeader, RowFooter, RowTitle, ColHeader, ColFooter, ColTitle,\n Top, Bottom, Left, Right,\n Fit, FitX, FitY, Pad, None, Padding\n} from './constants';\n\nimport {axisLayout, isYAxis} from './layout/axis';\nimport {gridLayout, trellisLayout} from './layout/grid';\nimport {legendLayout, legendParams} from './layout/legend';\nimport {titleLayout} from './layout/title';\n\nimport {Transform} from 'vega-dataflow';\nimport {Bounds} from 'vega-scenegraph';\nimport {inherits} from 'vega-util';\n\n/**\n * Layout view elements such as axes and legends.\n * Also performs size adjustments.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.mark - Scenegraph mark of groups to layout.\n */\nexport default function ViewLayout(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(ViewLayout, Transform);\n\nprototype.transform = function(_, pulse) {\n // TODO incremental update, output?\n var view = pulse.dataflow;\n _.mark.items.forEach(function(group) {\n if (_.layout) trellisLayout(view, group, _.layout);\n layoutGroup(view, group, _);\n });\n if (_.modified()) pulse.reflow();\n return pulse;\n};\n\nfunction layoutGroup(view, group, _) {\n var items = group.items,\n width = Math.max(0, group.width || 0),\n height = Math.max(0, group.height || 0),\n viewBounds = new Bounds().set(0, 0, width, height),\n xBounds = viewBounds.clone(),\n yBounds = viewBounds.clone(),\n legends = [], title,\n mark, orient, b, i, n;\n\n // layout axes, gather legends, collect bounds\n for (i=0, n=items.length; i {\n orient = item.orient || Right;\n if (orient !== None) (l[orient] || (l[orient] = [])).push(item);\n });\n\n // perform grid layout for each orient group\n for (let orient in l) {\n const g = l[orient];\n gridLayout(view, g, legendParams(\n g, orient, _.legends, xBounds, yBounds, width, height\n ));\n }\n\n // update view bounds\n legends.forEach(item => {\n const b = item.bounds;\n\n if (!b.equals(item._bounds)) {\n item.bounds = item._bounds;\n view.dirty(item); // dirty previous location\n item.bounds = b;\n view.dirty(item);\n }\n\n if (_.autosize && _.autosize.type === Fit) {\n // For autosize fit, incorporate the orthogonal dimension only.\n // Legends that overrun the chart area will then be clipped;\n // otherwise the chart area gets reduced to nothing!\n switch(item.orient) {\n case Left:\n case Right:\n viewBounds.add(b.x1, 0).add(b.x2, 0);\n break;\n case Top:\n case Bottom:\n viewBounds.add(0, b.y1).add(0, b.y2);\n }\n } else {\n viewBounds.union(b);\n }\n });\n }\n\n // combine bounding boxes\n viewBounds.union(xBounds).union(yBounds);\n\n // layout title, adjust bounds\n if (title) {\n viewBounds.union(titleLayout(view, title, width, height, viewBounds));\n }\n\n // perform size adjustment\n viewSizeLayout(view, group, viewBounds, _);\n}\n\nfunction viewSizeLayout(view, group, viewBounds, _) {\n var auto = _.autosize || {},\n type = auto.type,\n viewWidth = view._width,\n viewHeight = view._height,\n padding = view.padding();\n\n if (view._autosize < 1 || !type) return;\n\n var width = Math.max(0, group.width || 0),\n left = Math.max(0, Math.ceil(-viewBounds.x1)),\n right = Math.max(0, Math.ceil(viewBounds.x2 - width)),\n height = Math.max(0, group.height || 0),\n top = Math.max(0, Math.ceil(-viewBounds.y1)),\n bottom = Math.max(0, Math.ceil(viewBounds.y2 - height));\n\n if (auto.contains === Padding) {\n viewWidth -= padding.left + padding.right;\n viewHeight -= padding.top + padding.bottom;\n }\n\n if (type === None) {\n left = 0;\n top = 0;\n width = viewWidth;\n height = viewHeight;\n }\n\n else if (type === Fit) {\n width = Math.max(0, viewWidth - left - right);\n height = Math.max(0, viewHeight - top - bottom);\n }\n\n else if (type === FitX) {\n width = Math.max(0, viewWidth - left - right);\n viewHeight = height + top + bottom;\n }\n\n else if (type === FitY) {\n viewWidth = width + left + right;\n height = Math.max(0, viewHeight - top - bottom);\n }\n\n else if (type === Pad) {\n viewWidth = width + left + right;\n viewHeight = height + top + bottom;\n }\n\n view._resizeView(\n viewWidth, viewHeight,\n width, height,\n [left, top],\n auto.resize\n );\n}\n","export default function(count, paddingInner, paddingOuter) {\n var space = count - paddingInner + paddingOuter * 2;\n return count ? (space > 0 ? space : 1) : 0;\n}\n","export const Identity = 'identity';\n\nexport const Linear = 'linear';\nexport const Log = 'log';\nexport const Pow = 'pow';\nexport const Sqrt = 'sqrt';\nexport const Symlog = 'symlog';\n\nexport const Time = 'time';\nexport const UTC = 'utc';\n\nexport const Sequential = 'sequential';\nexport const Diverging = 'diverging';\n\nexport const Quantile = 'quantile';\nexport const Quantize = 'quantize';\nexport const Threshold = 'threshold';\n\nexport const Ordinal = 'ordinal';\nexport const Point = 'point';\nexport const Band = 'band';\nexport const BinOrdinal = 'bin-ordinal';\n\nexport function isValidScaleType(type) {\n switch (type) {\n case Identity:\n case Linear:\n case Log:\n case Pow:\n case Sqrt:\n case Symlog:\n case Time:\n case UTC:\n case Sequential:\n case Quantile:\n case Quantize:\n case Threshold:\n case Ordinal:\n case Point:\n case Band:\n case BinOrdinal:\n return true;\n }\n return false;\n}\n\nexport function isTemporal(key) {\n return key === Time || key === UTC;\n}\n\nexport function isBinned(key) {\n return key === BinOrdinal;\n}\n\nexport function isQuantile(key) {\n return key === Quantile;\n}\n\nexport function isSequential(key) {\n return key && key.startsWith(Sequential);\n}\n\nexport function isDiverging(key) {\n return key && key.startsWith(Diverging);\n}\n\nexport function isInterpolating(key) {\n return isSequential(key) || isDiverging(key);\n}\n\nexport function isLogarithmic(key) {\n return key === Log || key.endsWith('-log');\n}\n\nexport function isContinuous(key) {\n switch (key) {\n case Linear:\n case Log:\n case Pow:\n case Sqrt:\n case Symlog:\n case Time:\n case UTC:\n case Sequential:\n return true;\n }\n return false;\n}\n\nexport function isDiscrete(key) {\n return key === BinOrdinal\n || key === Ordinal\n || key === Band\n || key === Point;\n}\n\nexport function isDiscretizing(key) {\n return key === BinOrdinal\n || key === Quantile\n || key === Quantize\n || key === Threshold;\n}\n","import {UTC} from './types';\n\nimport {\n timeMillisecond, utcMillisecond,\n timeSecond, utcSecond,\n timeMinute, utcMinute,\n timeHour, utcHour,\n timeDay, utcDay,\n timeWeek, utcWeek,\n timeMonth, utcMonth,\n timeYear, utcYear\n} from 'd3-time';\n\nvar time = {\n millisecond: timeMillisecond,\n second: timeSecond,\n minute: timeMinute,\n hour: timeHour,\n day: timeDay,\n week: timeWeek,\n month: timeMonth,\n year: timeYear\n};\n\nvar utc = {\n millisecond: utcMillisecond,\n second: utcSecond,\n minute: utcMinute,\n hour: utcHour,\n day: utcDay,\n week: utcWeek,\n month: utcMonth,\n year: utcYear\n}\n\nexport function timeInterval(unit, type) {\n const t = (type === UTC ? utc : time);\n return t.hasOwnProperty(unit) && t[unit];\n}\n","export default function(scale) {\n return function(_) {\n var lo = _[0],\n hi = _[1],\n t;\n\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n\n return [\n scale.invert(lo),\n scale.invert(hi)\n ];\n }\n}\n","export default function(scale) {\n return function(_) {\n var range = scale.range(),\n lo = _[0],\n hi = _[1],\n min = -1, max, t, i, n;\n\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n\n for (i=0, n=range.length; i= lo && range[i] <= hi) {\n if (min < 0) min = i;\n max = i;\n }\n }\n\n if (min < 0) return undefined;\n\n lo = scale.invertExtent(range[min]);\n hi = scale.invertExtent(range[max]);\n\n return [\n lo[0] === undefined ? lo[1] : lo[0],\n hi[1] === undefined ? hi[0] : hi[1]\n ];\n }\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(x) {\n return x === null ? NaN : +x;\n}\n","import number from \"./number.js\";\n\nexport default function quantile(values, p, valueof = number) {\n if (!(n = values.length)) return;\n if ((p = +p) <= 0 || n < 2) return +valueof(values[0], 0, values);\n if (p >= 1) return +valueof(values[n - 1], n - 1, values);\n var n,\n i = (n - 1) * p,\n i0 = Math.floor(i),\n value0 = +valueof(values[i0], i0, values),\n value1 = +valueof(values[i0 + 1], i0 + 1, values);\n return value0 + (value1 - value0) * (i - i0);\n}\n","export function initRange(domain, range) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.range(domain); break;\n default: this.range(range).domain(domain); break;\n }\n return this;\n}\n\nexport function initInterpolator(domain, interpolator) {\n switch (arguments.length) {\n case 0: break;\n case 1: this.interpolator(domain); break;\n default: this.interpolator(interpolator).domain(domain); break;\n }\n return this;\n}\n","import {initRange} from \"./init\";\n\nexport const implicit = Symbol(\"implicit\");\n\nexport default function ordinal() {\n var index = new Map(),\n domain = [],\n range = [],\n unknown = implicit;\n\n function scale(d) {\n var key = d + \"\", i = index.get(key);\n if (!i) {\n if (unknown !== implicit) return unknown;\n index.set(key, i = domain.push(d));\n }\n return range[(i - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [], index = new Map();\n for (const value of _) {\n const key = value + \"\";\n if (index.has(key)) continue;\n index.set(key, domain.push(value));\n }\n return scale;\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), scale) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return ordinal(domain, range).unknown(unknown);\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","export default function(constructor, factory, prototype) {\n constructor.prototype = factory.prototype = prototype;\n prototype.constructor = constructor;\n}\n\nexport function extend(parent, definition) {\n var prototype = Object.create(parent.prototype);\n for (var key in definition) prototype[key] = definition[key];\n return prototype;\n}\n","import define, {extend} from \"./define\";\n\nexport function Color() {}\n\nexport var darker = 0.7;\nexport var brighter = 1 / darker;\n\nvar reI = \"\\\\s*([+-]?\\\\d+)\\\\s*\",\n reN = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)\\\\s*\",\n reP = \"\\\\s*([+-]?\\\\d*\\\\.?\\\\d+(?:[eE][+-]?\\\\d+)?)%\\\\s*\",\n reHex3 = /^#([0-9a-f]{3})$/,\n reHex6 = /^#([0-9a-f]{6})$/,\n reRgbInteger = new RegExp(\"^rgb\\\\(\" + [reI, reI, reI] + \"\\\\)$\"),\n reRgbPercent = new RegExp(\"^rgb\\\\(\" + [reP, reP, reP] + \"\\\\)$\"),\n reRgbaInteger = new RegExp(\"^rgba\\\\(\" + [reI, reI, reI, reN] + \"\\\\)$\"),\n reRgbaPercent = new RegExp(\"^rgba\\\\(\" + [reP, reP, reP, reN] + \"\\\\)$\"),\n reHslPercent = new RegExp(\"^hsl\\\\(\" + [reN, reP, reP] + \"\\\\)$\"),\n reHslaPercent = new RegExp(\"^hsla\\\\(\" + [reN, reP, reP, reN] + \"\\\\)$\");\n\nvar named = {\n aliceblue: 0xf0f8ff,\n antiquewhite: 0xfaebd7,\n aqua: 0x00ffff,\n aquamarine: 0x7fffd4,\n azure: 0xf0ffff,\n beige: 0xf5f5dc,\n bisque: 0xffe4c4,\n black: 0x000000,\n blanchedalmond: 0xffebcd,\n blue: 0x0000ff,\n blueviolet: 0x8a2be2,\n brown: 0xa52a2a,\n burlywood: 0xdeb887,\n cadetblue: 0x5f9ea0,\n chartreuse: 0x7fff00,\n chocolate: 0xd2691e,\n coral: 0xff7f50,\n cornflowerblue: 0x6495ed,\n cornsilk: 0xfff8dc,\n crimson: 0xdc143c,\n cyan: 0x00ffff,\n darkblue: 0x00008b,\n darkcyan: 0x008b8b,\n darkgoldenrod: 0xb8860b,\n darkgray: 0xa9a9a9,\n darkgreen: 0x006400,\n darkgrey: 0xa9a9a9,\n darkkhaki: 0xbdb76b,\n darkmagenta: 0x8b008b,\n darkolivegreen: 0x556b2f,\n darkorange: 0xff8c00,\n darkorchid: 0x9932cc,\n darkred: 0x8b0000,\n darksalmon: 0xe9967a,\n darkseagreen: 0x8fbc8f,\n darkslateblue: 0x483d8b,\n darkslategray: 0x2f4f4f,\n darkslategrey: 0x2f4f4f,\n darkturquoise: 0x00ced1,\n darkviolet: 0x9400d3,\n deeppink: 0xff1493,\n deepskyblue: 0x00bfff,\n dimgray: 0x696969,\n dimgrey: 0x696969,\n dodgerblue: 0x1e90ff,\n firebrick: 0xb22222,\n floralwhite: 0xfffaf0,\n forestgreen: 0x228b22,\n fuchsia: 0xff00ff,\n gainsboro: 0xdcdcdc,\n ghostwhite: 0xf8f8ff,\n gold: 0xffd700,\n goldenrod: 0xdaa520,\n gray: 0x808080,\n green: 0x008000,\n greenyellow: 0xadff2f,\n grey: 0x808080,\n honeydew: 0xf0fff0,\n hotpink: 0xff69b4,\n indianred: 0xcd5c5c,\n indigo: 0x4b0082,\n ivory: 0xfffff0,\n khaki: 0xf0e68c,\n lavender: 0xe6e6fa,\n lavenderblush: 0xfff0f5,\n lawngreen: 0x7cfc00,\n lemonchiffon: 0xfffacd,\n lightblue: 0xadd8e6,\n lightcoral: 0xf08080,\n lightcyan: 0xe0ffff,\n lightgoldenrodyellow: 0xfafad2,\n lightgray: 0xd3d3d3,\n lightgreen: 0x90ee90,\n lightgrey: 0xd3d3d3,\n lightpink: 0xffb6c1,\n lightsalmon: 0xffa07a,\n lightseagreen: 0x20b2aa,\n lightskyblue: 0x87cefa,\n lightslategray: 0x778899,\n lightslategrey: 0x778899,\n lightsteelblue: 0xb0c4de,\n lightyellow: 0xffffe0,\n lime: 0x00ff00,\n limegreen: 0x32cd32,\n linen: 0xfaf0e6,\n magenta: 0xff00ff,\n maroon: 0x800000,\n mediumaquamarine: 0x66cdaa,\n mediumblue: 0x0000cd,\n mediumorchid: 0xba55d3,\n mediumpurple: 0x9370db,\n mediumseagreen: 0x3cb371,\n mediumslateblue: 0x7b68ee,\n mediumspringgreen: 0x00fa9a,\n mediumturquoise: 0x48d1cc,\n mediumvioletred: 0xc71585,\n midnightblue: 0x191970,\n mintcream: 0xf5fffa,\n mistyrose: 0xffe4e1,\n moccasin: 0xffe4b5,\n navajowhite: 0xffdead,\n navy: 0x000080,\n oldlace: 0xfdf5e6,\n olive: 0x808000,\n olivedrab: 0x6b8e23,\n orange: 0xffa500,\n orangered: 0xff4500,\n orchid: 0xda70d6,\n palegoldenrod: 0xeee8aa,\n palegreen: 0x98fb98,\n paleturquoise: 0xafeeee,\n palevioletred: 0xdb7093,\n papayawhip: 0xffefd5,\n peachpuff: 0xffdab9,\n peru: 0xcd853f,\n pink: 0xffc0cb,\n plum: 0xdda0dd,\n powderblue: 0xb0e0e6,\n purple: 0x800080,\n rebeccapurple: 0x663399,\n red: 0xff0000,\n rosybrown: 0xbc8f8f,\n royalblue: 0x4169e1,\n saddlebrown: 0x8b4513,\n salmon: 0xfa8072,\n sandybrown: 0xf4a460,\n seagreen: 0x2e8b57,\n seashell: 0xfff5ee,\n sienna: 0xa0522d,\n silver: 0xc0c0c0,\n skyblue: 0x87ceeb,\n slateblue: 0x6a5acd,\n slategray: 0x708090,\n slategrey: 0x708090,\n snow: 0xfffafa,\n springgreen: 0x00ff7f,\n steelblue: 0x4682b4,\n tan: 0xd2b48c,\n teal: 0x008080,\n thistle: 0xd8bfd8,\n tomato: 0xff6347,\n turquoise: 0x40e0d0,\n violet: 0xee82ee,\n wheat: 0xf5deb3,\n white: 0xffffff,\n whitesmoke: 0xf5f5f5,\n yellow: 0xffff00,\n yellowgreen: 0x9acd32\n};\n\ndefine(Color, color, {\n displayable: function() {\n return this.rgb().displayable();\n },\n hex: function() {\n return this.rgb().hex();\n },\n toString: function() {\n return this.rgb() + \"\";\n }\n});\n\nexport default function color(format) {\n var m;\n format = (format + \"\").trim().toLowerCase();\n return (m = reHex3.exec(format)) ? (m = parseInt(m[1], 16), new Rgb((m >> 8 & 0xf) | (m >> 4 & 0x0f0), (m >> 4 & 0xf) | (m & 0xf0), ((m & 0xf) << 4) | (m & 0xf), 1)) // #f00\n : (m = reHex6.exec(format)) ? rgbn(parseInt(m[1], 16)) // #ff0000\n : (m = reRgbInteger.exec(format)) ? new Rgb(m[1], m[2], m[3], 1) // rgb(255, 0, 0)\n : (m = reRgbPercent.exec(format)) ? new Rgb(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, 1) // rgb(100%, 0%, 0%)\n : (m = reRgbaInteger.exec(format)) ? rgba(m[1], m[2], m[3], m[4]) // rgba(255, 0, 0, 1)\n : (m = reRgbaPercent.exec(format)) ? rgba(m[1] * 255 / 100, m[2] * 255 / 100, m[3] * 255 / 100, m[4]) // rgb(100%, 0%, 0%, 1)\n : (m = reHslPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, 1) // hsl(120, 50%, 50%)\n : (m = reHslaPercent.exec(format)) ? hsla(m[1], m[2] / 100, m[3] / 100, m[4]) // hsla(120, 50%, 50%, 1)\n : named.hasOwnProperty(format) ? rgbn(named[format])\n : format === \"transparent\" ? new Rgb(NaN, NaN, NaN, 0)\n : null;\n}\n\nfunction rgbn(n) {\n return new Rgb(n >> 16 & 0xff, n >> 8 & 0xff, n & 0xff, 1);\n}\n\nfunction rgba(r, g, b, a) {\n if (a <= 0) r = g = b = NaN;\n return new Rgb(r, g, b, a);\n}\n\nexport function rgbConvert(o) {\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Rgb;\n o = o.rgb();\n return new Rgb(o.r, o.g, o.b, o.opacity);\n}\n\nexport function rgb(r, g, b, opacity) {\n return arguments.length === 1 ? rgbConvert(r) : new Rgb(r, g, b, opacity == null ? 1 : opacity);\n}\n\nexport function Rgb(r, g, b, opacity) {\n this.r = +r;\n this.g = +g;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Rgb, rgb, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Rgb(this.r * k, this.g * k, this.b * k, this.opacity);\n },\n rgb: function() {\n return this;\n },\n displayable: function() {\n return (0 <= this.r && this.r <= 255)\n && (0 <= this.g && this.g <= 255)\n && (0 <= this.b && this.b <= 255)\n && (0 <= this.opacity && this.opacity <= 1);\n },\n hex: function() {\n return \"#\" + hex(this.r) + hex(this.g) + hex(this.b);\n },\n toString: function() {\n var a = this.opacity; a = isNaN(a) ? 1 : Math.max(0, Math.min(1, a));\n return (a === 1 ? \"rgb(\" : \"rgba(\")\n + Math.max(0, Math.min(255, Math.round(this.r) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.g) || 0)) + \", \"\n + Math.max(0, Math.min(255, Math.round(this.b) || 0))\n + (a === 1 ? \")\" : \", \" + a + \")\");\n }\n}));\n\nfunction hex(value) {\n value = Math.max(0, Math.min(255, Math.round(value) || 0));\n return (value < 16 ? \"0\" : \"\") + value.toString(16);\n}\n\nfunction hsla(h, s, l, a) {\n if (a <= 0) h = s = l = NaN;\n else if (l <= 0 || l >= 1) h = s = NaN;\n else if (s <= 0) h = NaN;\n return new Hsl(h, s, l, a);\n}\n\nexport function hslConvert(o) {\n if (o instanceof Hsl) return new Hsl(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Color)) o = color(o);\n if (!o) return new Hsl;\n if (o instanceof Hsl) return o;\n o = o.rgb();\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n min = Math.min(r, g, b),\n max = Math.max(r, g, b),\n h = NaN,\n s = max - min,\n l = (max + min) / 2;\n if (s) {\n if (r === max) h = (g - b) / s + (g < b) * 6;\n else if (g === max) h = (b - r) / s + 2;\n else h = (r - g) / s + 4;\n s /= l < 0.5 ? max + min : 2 - max - min;\n h *= 60;\n } else {\n s = l > 0 && l < 1 ? 0 : h;\n }\n return new Hsl(h, s, l, o.opacity);\n}\n\nexport function hsl(h, s, l, opacity) {\n return arguments.length === 1 ? hslConvert(h) : new Hsl(h, s, l, opacity == null ? 1 : opacity);\n}\n\nfunction Hsl(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hsl, hsl, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Hsl(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = this.h % 360 + (this.h < 0) * 360,\n s = isNaN(h) || isNaN(this.s) ? 0 : this.s,\n l = this.l,\n m2 = l + (l < 0.5 ? l : 1 - l) * s,\n m1 = 2 * l - m2;\n return new Rgb(\n hsl2rgb(h >= 240 ? h - 240 : h + 120, m1, m2),\n hsl2rgb(h, m1, m2),\n hsl2rgb(h < 120 ? h + 240 : h - 120, m1, m2),\n this.opacity\n );\n },\n displayable: function() {\n return (0 <= this.s && this.s <= 1 || isNaN(this.s))\n && (0 <= this.l && this.l <= 1)\n && (0 <= this.opacity && this.opacity <= 1);\n }\n}));\n\n/* From FvD 13.37, CSS Color Module Level 3 */\nfunction hsl2rgb(h, m1, m2) {\n return (h < 60 ? m1 + (m2 - m1) * h / 60\n : h < 180 ? m2\n : h < 240 ? m1 + (m2 - m1) * (240 - h) / 60\n : m1) * 255;\n}\n","export var deg2rad = Math.PI / 180;\nexport var rad2deg = 180 / Math.PI;\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\n// https://beta.observablehq.com/@mbostock/lab-and-rgb\nvar K = 18,\n Xn = 0.96422,\n Yn = 1,\n Zn = 0.82521,\n t0 = 4 / 29,\n t1 = 6 / 29,\n t2 = 3 * t1 * t1,\n t3 = t1 * t1 * t1;\n\nfunction labConvert(o) {\n if (o instanceof Lab) return new Lab(o.l, o.a, o.b, o.opacity);\n if (o instanceof Hcl) {\n if (isNaN(o.h)) return new Lab(o.l, 0, 0, o.opacity);\n var h = o.h * deg2rad;\n return new Lab(o.l, Math.cos(h) * o.c, Math.sin(h) * o.c, o.opacity);\n }\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = rgb2lrgb(o.r),\n g = rgb2lrgb(o.g),\n b = rgb2lrgb(o.b),\n y = xyz2lab((0.2225045 * r + 0.7168786 * g + 0.0606169 * b) / Yn), x, z;\n if (r === g && g === b) x = z = y; else {\n x = xyz2lab((0.4360747 * r + 0.3850649 * g + 0.1430804 * b) / Xn);\n z = xyz2lab((0.0139322 * r + 0.0971045 * g + 0.7141733 * b) / Zn);\n }\n return new Lab(116 * y - 16, 500 * (x - y), 200 * (y - z), o.opacity);\n}\n\nexport function gray(l, opacity) {\n return new Lab(l, 0, 0, opacity == null ? 1 : opacity);\n}\n\nexport default function lab(l, a, b, opacity) {\n return arguments.length === 1 ? labConvert(l) : new Lab(l, a, b, opacity == null ? 1 : opacity);\n}\n\nexport function Lab(l, a, b, opacity) {\n this.l = +l;\n this.a = +a;\n this.b = +b;\n this.opacity = +opacity;\n}\n\ndefine(Lab, lab, extend(Color, {\n brighter: function(k) {\n return new Lab(this.l + K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n darker: function(k) {\n return new Lab(this.l - K * (k == null ? 1 : k), this.a, this.b, this.opacity);\n },\n rgb: function() {\n var y = (this.l + 16) / 116,\n x = isNaN(this.a) ? y : y + this.a / 500,\n z = isNaN(this.b) ? y : y - this.b / 200;\n x = Xn * lab2xyz(x);\n y = Yn * lab2xyz(y);\n z = Zn * lab2xyz(z);\n return new Rgb(\n lrgb2rgb( 3.1338561 * x - 1.6168667 * y - 0.4906146 * z),\n lrgb2rgb(-0.9787684 * x + 1.9161415 * y + 0.0334540 * z),\n lrgb2rgb( 0.0719453 * x - 0.2289914 * y + 1.4052427 * z),\n this.opacity\n );\n }\n}));\n\nfunction xyz2lab(t) {\n return t > t3 ? Math.pow(t, 1 / 3) : t / t2 + t0;\n}\n\nfunction lab2xyz(t) {\n return t > t1 ? t * t * t : t2 * (t - t0);\n}\n\nfunction lrgb2rgb(x) {\n return 255 * (x <= 0.0031308 ? 12.92 * x : 1.055 * Math.pow(x, 1 / 2.4) - 0.055);\n}\n\nfunction rgb2lrgb(x) {\n return (x /= 255) <= 0.04045 ? x / 12.92 : Math.pow((x + 0.055) / 1.055, 2.4);\n}\n\nfunction hclConvert(o) {\n if (o instanceof Hcl) return new Hcl(o.h, o.c, o.l, o.opacity);\n if (!(o instanceof Lab)) o = labConvert(o);\n if (o.a === 0 && o.b === 0) return new Hcl(NaN, 0, o.l, o.opacity);\n var h = Math.atan2(o.b, o.a) * rad2deg;\n return new Hcl(h < 0 ? h + 360 : h, Math.sqrt(o.a * o.a + o.b * o.b), o.l, o.opacity);\n}\n\nexport function lch(l, c, h, opacity) {\n return arguments.length === 1 ? hclConvert(l) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function hcl(h, c, l, opacity) {\n return arguments.length === 1 ? hclConvert(h) : new Hcl(h, c, l, opacity == null ? 1 : opacity);\n}\n\nexport function Hcl(h, c, l, opacity) {\n this.h = +h;\n this.c = +c;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Hcl, hcl, extend(Color, {\n brighter: function(k) {\n return new Hcl(this.h, this.c, this.l + K * (k == null ? 1 : k), this.opacity);\n },\n darker: function(k) {\n return new Hcl(this.h, this.c, this.l - K * (k == null ? 1 : k), this.opacity);\n },\n rgb: function() {\n return labConvert(this).rgb();\n }\n}));\n","import define, {extend} from \"./define\";\nimport {Color, rgbConvert, Rgb, darker, brighter} from \"./color\";\nimport {deg2rad, rad2deg} from \"./math\";\n\nvar A = -0.14861,\n B = +1.78277,\n C = -0.29227,\n D = -0.90649,\n E = +1.97294,\n ED = E * D,\n EB = E * B,\n BC_DA = B * C - D * A;\n\nfunction cubehelixConvert(o) {\n if (o instanceof Cubehelix) return new Cubehelix(o.h, o.s, o.l, o.opacity);\n if (!(o instanceof Rgb)) o = rgbConvert(o);\n var r = o.r / 255,\n g = o.g / 255,\n b = o.b / 255,\n l = (BC_DA * b + ED * r - EB * g) / (BC_DA + ED - EB),\n bl = b - l,\n k = (E * (g - l) - C * bl) / D,\n s = Math.sqrt(k * k + bl * bl) / (E * l * (1 - l)), // NaN if l=0 or l=1\n h = s ? Math.atan2(k, bl) * rad2deg - 120 : NaN;\n return new Cubehelix(h < 0 ? h + 360 : h, s, l, o.opacity);\n}\n\nexport default function cubehelix(h, s, l, opacity) {\n return arguments.length === 1 ? cubehelixConvert(h) : new Cubehelix(h, s, l, opacity == null ? 1 : opacity);\n}\n\nexport function Cubehelix(h, s, l, opacity) {\n this.h = +h;\n this.s = +s;\n this.l = +l;\n this.opacity = +opacity;\n}\n\ndefine(Cubehelix, cubehelix, extend(Color, {\n brighter: function(k) {\n k = k == null ? brighter : Math.pow(brighter, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n darker: function(k) {\n k = k == null ? darker : Math.pow(darker, k);\n return new Cubehelix(this.h, this.s, this.l * k, this.opacity);\n },\n rgb: function() {\n var h = isNaN(this.h) ? 0 : (this.h + 120) * deg2rad,\n l = +this.l,\n a = isNaN(this.s) ? 0 : this.s * l * (1 - l),\n cosh = Math.cos(h),\n sinh = Math.sin(h);\n return new Rgb(\n 255 * (l + a * (A * cosh + B * sinh)),\n 255 * (l + a * (C * cosh + D * sinh)),\n 255 * (l + a * (E * cosh)),\n this.opacity\n );\n }\n}));\n","export function basis(t1, v0, v1, v2, v3) {\n var t2 = t1 * t1, t3 = t2 * t1;\n return ((1 - 3 * t1 + 3 * t2 - t3) * v0\n + (4 - 6 * t2 + 3 * t3) * v1\n + (1 + 3 * t1 + 3 * t2 - 3 * t3) * v2\n + t3 * v3) / 6;\n}\n\nexport default function(values) {\n var n = values.length - 1;\n return function(t) {\n var i = t <= 0 ? (t = 0) : t >= 1 ? (t = 1, n - 1) : Math.floor(t * n),\n v1 = values[i],\n v2 = values[i + 1],\n v0 = i > 0 ? values[i - 1] : 2 * v1 - v2,\n v3 = i < n - 1 ? values[i + 2] : 2 * v2 - v1;\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","import {basis} from \"./basis\";\n\nexport default function(values) {\n var n = values.length;\n return function(t) {\n var i = Math.floor(((t %= 1) < 0 ? ++t : t) * n),\n v0 = values[(i + n - 1) % n],\n v1 = values[i % n],\n v2 = values[(i + 1) % n],\n v3 = values[(i + 2) % n];\n return basis((t - i / n) * n, v0, v1, v2, v3);\n };\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","import constant from \"./constant\";\n\nfunction linear(a, d) {\n return function(t) {\n return a + t * d;\n };\n}\n\nfunction exponential(a, b, y) {\n return a = Math.pow(a, y), b = Math.pow(b, y) - a, y = 1 / y, function(t) {\n return Math.pow(a + t * b, y);\n };\n}\n\nexport function hue(a, b) {\n var d = b - a;\n return d ? linear(a, d > 180 || d < -180 ? d - 360 * Math.round(d / 360) : d) : constant(isNaN(a) ? b : a);\n}\n\nexport function gamma(y) {\n return (y = +y) === 1 ? nogamma : function(a, b) {\n return b - a ? exponential(a, b, y) : constant(isNaN(a) ? b : a);\n };\n}\n\nexport default function nogamma(a, b) {\n var d = b - a;\n return d ? linear(a, d) : constant(isNaN(a) ? b : a);\n}\n","import {rgb as colorRgb} from \"d3-color\";\nimport basis from \"./basis\";\nimport basisClosed from \"./basisClosed\";\nimport nogamma, {gamma} from \"./color\";\n\nexport default (function rgbGamma(y) {\n var color = gamma(y);\n\n function rgb(start, end) {\n var r = color((start = colorRgb(start)).r, (end = colorRgb(end)).r),\n g = color(start.g, end.g),\n b = color(start.b, end.b),\n opacity = nogamma(start.opacity, end.opacity);\n return function(t) {\n start.r = r(t);\n start.g = g(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n rgb.gamma = rgbGamma;\n\n return rgb;\n})(1);\n\nfunction rgbSpline(spline) {\n return function(colors) {\n var n = colors.length,\n r = new Array(n),\n g = new Array(n),\n b = new Array(n),\n i, color;\n for (i = 0; i < n; ++i) {\n color = colorRgb(colors[i]);\n r[i] = color.r || 0;\n g[i] = color.g || 0;\n b[i] = color.b || 0;\n }\n r = spline(r);\n g = spline(g);\n b = spline(b);\n color.opacity = 1;\n return function(t) {\n color.r = r(t);\n color.g = g(t);\n color.b = b(t);\n return color + \"\";\n };\n };\n}\n\nexport var rgbBasis = rgbSpline(basis);\nexport var rgbBasisClosed = rgbSpline(basisClosed);\n","import value from \"./value\";\n\nexport default function(a, b) {\n var nb = b ? b.length : 0,\n na = a ? Math.min(nb, a.length) : 0,\n x = new Array(na),\n c = new Array(nb),\n i;\n\n for (i = 0; i < na; ++i) x[i] = value(a[i], b[i]);\n for (; i < nb; ++i) c[i] = b[i];\n\n return function(t) {\n for (i = 0; i < na; ++i) c[i] = x[i](t);\n return c;\n };\n}\n","export default function(a, b) {\n var d = new Date;\n return a = +a, b -= a, function(t) {\n return d.setTime(a + b * t), d;\n };\n}\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return a + b * t;\n };\n}\n","import value from \"./value\";\n\nexport default function(a, b) {\n var i = {},\n c = {},\n k;\n\n if (a === null || typeof a !== \"object\") a = {};\n if (b === null || typeof b !== \"object\") b = {};\n\n for (k in b) {\n if (k in a) {\n i[k] = value(a[k], b[k]);\n } else {\n c[k] = b[k];\n }\n }\n\n return function(t) {\n for (k in i) c[k] = i[k](t);\n return c;\n };\n}\n","import number from \"./number\";\n\nvar reA = /[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g,\n reB = new RegExp(reA.source, \"g\");\n\nfunction zero(b) {\n return function() {\n return b;\n };\n}\n\nfunction one(b) {\n return function(t) {\n return b(t) + \"\";\n };\n}\n\nexport default function(a, b) {\n var bi = reA.lastIndex = reB.lastIndex = 0, // scan index for next number in b\n am, // current match in a\n bm, // current match in b\n bs, // string preceding current number in b, if any\n i = -1, // index in s\n s = [], // string constants and placeholders\n q = []; // number interpolators\n\n // Coerce inputs to strings.\n a = a + \"\", b = b + \"\";\n\n // Interpolate pairs of numbers in a & b.\n while ((am = reA.exec(a))\n && (bm = reB.exec(b))) {\n if ((bs = bm.index) > bi) { // a string precedes the next number in b\n bs = b.slice(bi, bs);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n if ((am = am[0]) === (bm = bm[0])) { // numbers in a & b match\n if (s[i]) s[i] += bm; // coalesce with previous string\n else s[++i] = bm;\n } else { // interpolate non-matching numbers\n s[++i] = null;\n q.push({i: i, x: number(am, bm)});\n }\n bi = reB.lastIndex;\n }\n\n // Add remains of b.\n if (bi < b.length) {\n bs = b.slice(bi);\n if (s[i]) s[i] += bs; // coalesce with previous string\n else s[++i] = bs;\n }\n\n // Special optimization for only a single match.\n // Otherwise, interpolate each of the numbers and rejoin the string.\n return s.length < 2 ? (q[0]\n ? one(q[0].x)\n : zero(b))\n : (b = q.length, function(t) {\n for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n });\n}\n","import {color} from \"d3-color\";\nimport rgb from \"./rgb\";\nimport array from \"./array\";\nimport date from \"./date\";\nimport number from \"./number\";\nimport object from \"./object\";\nimport string from \"./string\";\nimport constant from \"./constant\";\n\nexport default function(a, b) {\n var t = typeof b, c;\n return b == null || t === \"boolean\" ? constant(b)\n : (t === \"number\" ? number\n : t === \"string\" ? ((c = color(b)) ? (b = c, rgb) : string)\n : b instanceof color ? rgb\n : b instanceof Date ? date\n : Array.isArray(b) ? array\n : typeof b.valueOf !== \"function\" && typeof b.toString !== \"function\" || isNaN(b) ? object\n : number)(a, b);\n}\n","export default function(range) {\n var n = range.length;\n return function(t) {\n return range[Math.max(0, Math.min(n - 1, Math.floor(t * n)))];\n };\n}\n","import {hue} from \"./color\";\n\nexport default function(a, b) {\n var i = hue(+a, +b);\n return function(t) {\n var x = i(t);\n return x - 360 * Math.floor(x / 360);\n };\n}\n","export default function(a, b) {\n return a = +a, b -= a, function(t) {\n return Math.round(a + b * t);\n };\n}\n","var degrees = 180 / Math.PI;\n\nexport var identity = {\n translateX: 0,\n translateY: 0,\n rotate: 0,\n skewX: 0,\n scaleX: 1,\n scaleY: 1\n};\n\nexport default function(a, b, c, d, e, f) {\n var scaleX, scaleY, skewX;\n if (scaleX = Math.sqrt(a * a + b * b)) a /= scaleX, b /= scaleX;\n if (skewX = a * c + b * d) c -= a * skewX, d -= b * skewX;\n if (scaleY = Math.sqrt(c * c + d * d)) c /= scaleY, d /= scaleY, skewX /= scaleY;\n if (a * d < b * c) a = -a, b = -b, skewX = -skewX, scaleX = -scaleX;\n return {\n translateX: e,\n translateY: f,\n rotate: Math.atan2(b, a) * degrees,\n skewX: Math.atan(skewX) * degrees,\n scaleX: scaleX,\n scaleY: scaleY\n };\n}\n","import decompose, {identity} from \"./decompose\";\n\nvar cssNode,\n cssRoot,\n cssView,\n svgNode;\n\nexport function parseCss(value) {\n if (value === \"none\") return identity;\n if (!cssNode) cssNode = document.createElement(\"DIV\"), cssRoot = document.documentElement, cssView = document.defaultView;\n cssNode.style.transform = value;\n value = cssView.getComputedStyle(cssRoot.appendChild(cssNode), null).getPropertyValue(\"transform\");\n cssRoot.removeChild(cssNode);\n value = value.slice(7, -1).split(\",\");\n return decompose(+value[0], +value[1], +value[2], +value[3], +value[4], +value[5]);\n}\n\nexport function parseSvg(value) {\n if (value == null) return identity;\n if (!svgNode) svgNode = document.createElementNS(\"http://www.w3.org/2000/svg\", \"g\");\n svgNode.setAttribute(\"transform\", value);\n if (!(value = svgNode.transform.baseVal.consolidate())) return identity;\n value = value.matrix;\n return decompose(value.a, value.b, value.c, value.d, value.e, value.f);\n}\n","import number from \"../number\";\nimport {parseCss, parseSvg} from \"./parse\";\n\nfunction interpolateTransform(parse, pxComma, pxParen, degParen) {\n\n function pop(s) {\n return s.length ? s.pop() + \" \" : \"\";\n }\n\n function translate(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(\"translate(\", null, pxComma, null, pxParen);\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb || yb) {\n s.push(\"translate(\" + xb + pxComma + yb + pxParen);\n }\n }\n\n function rotate(a, b, s, q) {\n if (a !== b) {\n if (a - b > 180) b += 360; else if (b - a > 180) a += 360; // shortest path\n q.push({i: s.push(pop(s) + \"rotate(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"rotate(\" + b + degParen);\n }\n }\n\n function skewX(a, b, s, q) {\n if (a !== b) {\n q.push({i: s.push(pop(s) + \"skewX(\", null, degParen) - 2, x: number(a, b)});\n } else if (b) {\n s.push(pop(s) + \"skewX(\" + b + degParen);\n }\n }\n\n function scale(xa, ya, xb, yb, s, q) {\n if (xa !== xb || ya !== yb) {\n var i = s.push(pop(s) + \"scale(\", null, \",\", null, \")\");\n q.push({i: i - 4, x: number(xa, xb)}, {i: i - 2, x: number(ya, yb)});\n } else if (xb !== 1 || yb !== 1) {\n s.push(pop(s) + \"scale(\" + xb + \",\" + yb + \")\");\n }\n }\n\n return function(a, b) {\n var s = [], // string constants and placeholders\n q = []; // number interpolators\n a = parse(a), b = parse(b);\n translate(a.translateX, a.translateY, b.translateX, b.translateY, s, q);\n rotate(a.rotate, b.rotate, s, q);\n skewX(a.skewX, b.skewX, s, q);\n scale(a.scaleX, a.scaleY, b.scaleX, b.scaleY, s, q);\n a = b = null; // gc\n return function(t) {\n var i = -1, n = q.length, o;\n while (++i < n) s[(o = q[i]).i] = o.x(t);\n return s.join(\"\");\n };\n };\n}\n\nexport var interpolateTransformCss = interpolateTransform(parseCss, \"px, \", \"px)\", \"deg)\");\nexport var interpolateTransformSvg = interpolateTransform(parseSvg, \", \", \")\", \")\");\n","var rho = Math.SQRT2,\n rho2 = 2,\n rho4 = 4,\n epsilon2 = 1e-12;\n\nfunction cosh(x) {\n return ((x = Math.exp(x)) + 1 / x) / 2;\n}\n\nfunction sinh(x) {\n return ((x = Math.exp(x)) - 1 / x) / 2;\n}\n\nfunction tanh(x) {\n return ((x = Math.exp(2 * x)) - 1) / (x + 1);\n}\n\n// p0 = [ux0, uy0, w0]\n// p1 = [ux1, uy1, w1]\nexport default function(p0, p1) {\n var ux0 = p0[0], uy0 = p0[1], w0 = p0[2],\n ux1 = p1[0], uy1 = p1[1], w1 = p1[2],\n dx = ux1 - ux0,\n dy = uy1 - uy0,\n d2 = dx * dx + dy * dy,\n i,\n S;\n\n // Special case for u0 ≅ u1.\n if (d2 < epsilon2) {\n S = Math.log(w1 / w0) / rho;\n i = function(t) {\n return [\n ux0 + t * dx,\n uy0 + t * dy,\n w0 * Math.exp(rho * t * S)\n ];\n }\n }\n\n // General case.\n else {\n var d1 = Math.sqrt(d2),\n b0 = (w1 * w1 - w0 * w0 + rho4 * d2) / (2 * w0 * rho2 * d1),\n b1 = (w1 * w1 - w0 * w0 - rho4 * d2) / (2 * w1 * rho2 * d1),\n r0 = Math.log(Math.sqrt(b0 * b0 + 1) - b0),\n r1 = Math.log(Math.sqrt(b1 * b1 + 1) - b1);\n S = (r1 - r0) / rho;\n i = function(t) {\n var s = t * S,\n coshr0 = cosh(r0),\n u = w0 / (rho2 * d1) * (coshr0 * tanh(rho * s + r0) - sinh(r0));\n return [\n ux0 + u * dx,\n uy0 + u * dy,\n w0 * coshr0 / cosh(rho * s + r0)\n ];\n }\n }\n\n i.duration = S * 1000;\n\n return i;\n}\n","import {hsl as colorHsl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hsl(hue) {\n return function(start, end) {\n var h = hue((start = colorHsl(start)).h, (end = colorHsl(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hsl(hue);\nexport var hslLong = hsl(color);\n","import {lab as colorLab} from \"d3-color\";\nimport color from \"./color\";\n\nexport default function lab(start, end) {\n var l = color((start = colorLab(start)).l, (end = colorLab(end)).l),\n a = color(start.a, end.a),\n b = color(start.b, end.b),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.l = l(t);\n start.a = a(t);\n start.b = b(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n}\n","import {hcl as colorHcl} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction hcl(hue) {\n return function(start, end) {\n var h = hue((start = colorHcl(start)).h, (end = colorHcl(end)).h),\n c = color(start.c, end.c),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.c = c(t);\n start.l = l(t);\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n}\n\nexport default hcl(hue);\nexport var hclLong = hcl(color);\n","import {cubehelix as colorCubehelix} from \"d3-color\";\nimport color, {hue} from \"./color\";\n\nfunction cubehelix(hue) {\n return (function cubehelixGamma(y) {\n y = +y;\n\n function cubehelix(start, end) {\n var h = hue((start = colorCubehelix(start)).h, (end = colorCubehelix(end)).h),\n s = color(start.s, end.s),\n l = color(start.l, end.l),\n opacity = color(start.opacity, end.opacity);\n return function(t) {\n start.h = h(t);\n start.s = s(t);\n start.l = l(Math.pow(t, y));\n start.opacity = opacity(t);\n return start + \"\";\n };\n }\n\n cubehelix.gamma = cubehelixGamma;\n\n return cubehelix;\n })(1);\n}\n\nexport default cubehelix(hue);\nexport var cubehelixLong = cubehelix(color);\n","export default function piecewise(interpolate, values) {\n var i = 0, n = values.length - 1, v = values[0], I = new Array(n < 0 ? 0 : n);\n while (i < n) I[i] = interpolate(v, v = values[++i]);\n return function(t) {\n var i = Math.max(0, Math.min(n - 1, Math.floor(t *= n)));\n return I[i](t - i);\n };\n}\n","export default function(interpolator, n) {\n var samples = new Array(n);\n for (var i = 0; i < n; ++i) samples[i] = interpolator(i / (n - 1));\n return samples;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(x) {\n return +x;\n}\n","import {bisect} from \"d3-array\";\nimport {interpolate as interpolateValue, interpolateNumber, interpolateRound} from \"d3-interpolate\";\nimport constant from \"./constant\";\nimport number from \"./number\";\n\nvar unit = [0, 1];\n\nexport function identity(x) {\n return x;\n}\n\nfunction normalize(a, b) {\n return (b -= (a = +a))\n ? function(x) { return (x - a) / b; }\n : constant(isNaN(b) ? NaN : 0.5);\n}\n\nfunction clamper(domain) {\n var a = domain[0], b = domain[domain.length - 1], t;\n if (a > b) t = a, a = b, b = t;\n return function(x) { return Math.max(a, Math.min(b, x)); };\n}\n\n// normalize(a, b)(x) takes a domain value x in [a,b] and returns the corresponding parameter t in [0,1].\n// interpolate(a, b)(t) takes a parameter t in [0,1] and returns the corresponding range value x in [a,b].\nfunction bimap(domain, range, interpolate) {\n var d0 = domain[0], d1 = domain[1], r0 = range[0], r1 = range[1];\n if (d1 < d0) d0 = normalize(d1, d0), r0 = interpolate(r1, r0);\n else d0 = normalize(d0, d1), r0 = interpolate(r0, r1);\n return function(x) { return r0(d0(x)); };\n}\n\nfunction polymap(domain, range, interpolate) {\n var j = Math.min(domain.length, range.length) - 1,\n d = new Array(j),\n r = new Array(j),\n i = -1;\n\n // Reverse descending domains.\n if (domain[j] < domain[0]) {\n domain = domain.slice().reverse();\n range = range.slice().reverse();\n }\n\n while (++i < j) {\n d[i] = normalize(domain[i], domain[i + 1]);\n r[i] = interpolate(range[i], range[i + 1]);\n }\n\n return function(x) {\n var i = bisect(domain, x, 1, j) - 1;\n return r[i](d[i](x));\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .range(source.range())\n .interpolate(source.interpolate())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport function transformer() {\n var domain = unit,\n range = unit,\n interpolate = interpolateValue,\n transform,\n untransform,\n unknown,\n clamp = identity,\n piecewise,\n output,\n input;\n\n function rescale() {\n piecewise = Math.min(domain.length, range.length) > 2 ? polymap : bimap;\n output = input = null;\n return scale;\n }\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (output || (output = piecewise(domain.map(transform), range, interpolate)))(transform(clamp(x)));\n }\n\n scale.invert = function(y) {\n return clamp(untransform((input || (input = piecewise(range, domain.map(transform), interpolateNumber)))(y)));\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_, number), clamp === identity || (clamp = clamper(domain)), rescale()) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.rangeRound = function(_) {\n return range = Array.from(_), interpolate = interpolateRound, rescale();\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = _ ? clamper(domain) : identity, scale) : clamp !== identity;\n };\n\n scale.interpolate = function(_) {\n return arguments.length ? (interpolate = _, rescale()) : interpolate;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t, u) {\n transform = t, untransform = u;\n return rescale();\n };\n}\n\nexport default function continuous(transform, untransform) {\n return transformer()(transform, untransform);\n}\n","// Computes the decimal coefficient and exponent of the specified number x with\n// significant digits p, where x is positive and p is in [1, 21] or undefined.\n// For example, formatDecimal(1.23) returns [\"123\", 0].\nexport default function(x, p) {\n if ((i = (x = p ? x.toExponential(p - 1) : x.toExponential()).indexOf(\"e\")) < 0) return null; // NaN, ±Infinity\n var i, coefficient = x.slice(0, i);\n\n // The string returned by toExponential either has the form \\d\\.\\d+e[-+]\\d+\n // (e.g., 1.2e+3) or the form \\de[-+]\\d+ (e.g., 1e+3).\n return [\n coefficient.length > 1 ? coefficient[0] + coefficient.slice(2) : coefficient,\n +x.slice(i + 1)\n ];\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x) {\n return x = formatDecimal(Math.abs(x)), x ? x[1] : NaN;\n}\n","export default function(grouping, thousands) {\n return function(value, width) {\n var i = value.length,\n t = [],\n j = 0,\n g = grouping[0],\n length = 0;\n\n while (i > 0 && g > 0) {\n if (length + g + 1 > width) g = Math.max(1, width - length);\n t.push(value.substring(i -= g, i + g));\n if ((length += g + 1) > width) break;\n g = grouping[j = (j + 1) % grouping.length];\n }\n\n return t.reverse().join(thousands);\n };\n}\n","export default function(numerals) {\n return function(value) {\n return value.replace(/[0-9]/g, function(i) {\n return numerals[+i];\n });\n };\n}\n","// [[fill]align][sign][symbol][0][width][,][.precision][~][type]\nvar re = /^(?:(.)?([<>=^]))?([+\\-( ])?([$#])?(0)?(\\d+)?(,)?(\\.\\d+)?(~)?([a-z%])?$/i;\n\nexport default function formatSpecifier(specifier) {\n return new FormatSpecifier(specifier);\n}\n\nformatSpecifier.prototype = FormatSpecifier.prototype; // instanceof\n\nfunction FormatSpecifier(specifier) {\n if (!(match = re.exec(specifier))) throw new Error(\"invalid format: \" + specifier);\n var match;\n this.fill = match[1] || \" \";\n this.align = match[2] || \">\";\n this.sign = match[3] || \"-\";\n this.symbol = match[4] || \"\";\n this.zero = !!match[5];\n this.width = match[6] && +match[6];\n this.comma = !!match[7];\n this.precision = match[8] && +match[8].slice(1);\n this.trim = !!match[9];\n this.type = match[10] || \"\";\n}\n\nFormatSpecifier.prototype.toString = function() {\n return this.fill\n + this.align\n + this.sign\n + this.symbol\n + (this.zero ? \"0\" : \"\")\n + (this.width == null ? \"\" : Math.max(1, this.width | 0))\n + (this.comma ? \",\" : \"\")\n + (this.precision == null ? \"\" : \".\" + Math.max(0, this.precision | 0))\n + (this.trim ? \"~\" : \"\")\n + this.type;\n};\n","// Trims insignificant zeros, e.g., replaces 1.2000k with 1.2k.\nexport default function(s) {\n out: for (var n = s.length, i = 1, i0 = -1, i1; i < n; ++i) {\n switch (s[i]) {\n case \".\": i0 = i1 = i; break;\n case \"0\": if (i0 === 0) i0 = i; i1 = i; break;\n default: if (i0 > 0) { if (!+s[i]) break out; i0 = 0; } break;\n }\n }\n return i0 > 0 ? s.slice(0, i0) + s.slice(i1 + 1) : s;\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport var prefixExponent;\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1],\n i = exponent - (prefixExponent = Math.max(-8, Math.min(8, Math.floor(exponent / 3))) * 3) + 1,\n n = coefficient.length;\n return i === n ? coefficient\n : i > n ? coefficient + new Array(i - n + 1).join(\"0\")\n : i > 0 ? coefficient.slice(0, i) + \".\" + coefficient.slice(i)\n : \"0.\" + new Array(1 - i).join(\"0\") + formatDecimal(x, Math.max(0, p + i - 1))[0]; // less than 1y!\n}\n","import formatDecimal from \"./formatDecimal\";\n\nexport default function(x, p) {\n var d = formatDecimal(x, p);\n if (!d) return x + \"\";\n var coefficient = d[0],\n exponent = d[1];\n return exponent < 0 ? \"0.\" + new Array(-exponent).join(\"0\") + coefficient\n : coefficient.length > exponent + 1 ? coefficient.slice(0, exponent + 1) + \".\" + coefficient.slice(exponent + 1)\n : coefficient + new Array(exponent - coefficient.length + 2).join(\"0\");\n}\n","import formatPrefixAuto from \"./formatPrefixAuto\";\nimport formatRounded from \"./formatRounded\";\n\nexport default {\n \"%\": function(x, p) { return (x * 100).toFixed(p); },\n \"b\": function(x) { return Math.round(x).toString(2); },\n \"c\": function(x) { return x + \"\"; },\n \"d\": function(x) { return Math.round(x).toString(10); },\n \"e\": function(x, p) { return x.toExponential(p); },\n \"f\": function(x, p) { return x.toFixed(p); },\n \"g\": function(x, p) { return x.toPrecision(p); },\n \"o\": function(x) { return Math.round(x).toString(8); },\n \"p\": function(x, p) { return formatRounded(x * 100, p); },\n \"r\": formatRounded,\n \"s\": formatPrefixAuto,\n \"X\": function(x) { return Math.round(x).toString(16).toUpperCase(); },\n \"x\": function(x) { return Math.round(x).toString(16); }\n};\n","export default function(x) {\n return x;\n}\n","import exponent from \"./exponent\";\nimport formatGroup from \"./formatGroup\";\nimport formatNumerals from \"./formatNumerals\";\nimport formatSpecifier from \"./formatSpecifier\";\nimport formatTrim from \"./formatTrim\";\nimport formatTypes from \"./formatTypes\";\nimport {prefixExponent} from \"./formatPrefixAuto\";\nimport identity from \"./identity\";\n\nvar prefixes = [\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"µ\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"];\n\nexport default function(locale) {\n var group = locale.grouping && locale.thousands ? formatGroup(locale.grouping, locale.thousands) : identity,\n currency = locale.currency,\n decimal = locale.decimal,\n numerals = locale.numerals ? formatNumerals(locale.numerals) : identity,\n percent = locale.percent || \"%\";\n\n function newFormat(specifier) {\n specifier = formatSpecifier(specifier);\n\n var fill = specifier.fill,\n align = specifier.align,\n sign = specifier.sign,\n symbol = specifier.symbol,\n zero = specifier.zero,\n width = specifier.width,\n comma = specifier.comma,\n precision = specifier.precision,\n trim = specifier.trim,\n type = specifier.type;\n\n // The \"n\" type is an alias for \",g\".\n if (type === \"n\") comma = true, type = \"g\";\n\n // The \"\" type, and any invalid type, is an alias for \".12~g\".\n else if (!formatTypes[type]) precision == null && (precision = 12), trim = true, type = \"g\";\n\n // If zero fill is specified, padding goes after sign and before digits.\n if (zero || (fill === \"0\" && align === \"=\")) zero = true, fill = \"0\", align = \"=\";\n\n // Compute the prefix and suffix.\n // For SI-prefix, the suffix is lazily computed.\n var prefix = symbol === \"$\" ? currency[0] : symbol === \"#\" && /[boxX]/.test(type) ? \"0\" + type.toLowerCase() : \"\",\n suffix = symbol === \"$\" ? currency[1] : /[%p]/.test(type) ? percent : \"\";\n\n // What format function should we use?\n // Is this an integer type?\n // Can this type generate exponential notation?\n var formatType = formatTypes[type],\n maybeSuffix = /[defgprs%]/.test(type);\n\n // Set the default precision if not specified,\n // or clamp the specified precision to the supported range.\n // For significant precision, it must be in [1, 21].\n // For fixed precision, it must be in [0, 20].\n precision = precision == null ? 6\n : /[gprs]/.test(type) ? Math.max(1, Math.min(21, precision))\n : Math.max(0, Math.min(20, precision));\n\n function format(value) {\n var valuePrefix = prefix,\n valueSuffix = suffix,\n i, n, c;\n\n if (type === \"c\") {\n valueSuffix = formatType(value) + valueSuffix;\n value = \"\";\n } else {\n value = +value;\n\n // Perform the initial formatting.\n var valueNegative = value < 0;\n value = formatType(Math.abs(value), precision);\n\n // Trim insignificant zeros.\n if (trim) value = formatTrim(value);\n\n // If a negative value rounds to zero during formatting, treat as positive.\n if (valueNegative && +value === 0) valueNegative = false;\n\n // Compute the prefix and suffix.\n valuePrefix = (valueNegative ? (sign === \"(\" ? sign : \"-\") : sign === \"-\" || sign === \"(\" ? \"\" : sign) + valuePrefix;\n valueSuffix = (type === \"s\" ? prefixes[8 + prefixExponent / 3] : \"\") + valueSuffix + (valueNegative && sign === \"(\" ? \")\" : \"\");\n\n // Break the formatted value into the integer “value” part that can be\n // grouped, and fractional or exponential “suffix” part that is not.\n if (maybeSuffix) {\n i = -1, n = value.length;\n while (++i < n) {\n if (c = value.charCodeAt(i), 48 > c || c > 57) {\n valueSuffix = (c === 46 ? decimal + value.slice(i + 1) : value.slice(i)) + valueSuffix;\n value = value.slice(0, i);\n break;\n }\n }\n }\n }\n\n // If the fill character is not \"0\", grouping is applied before padding.\n if (comma && !zero) value = group(value, Infinity);\n\n // Compute the padding.\n var length = valuePrefix.length + value.length + valueSuffix.length,\n padding = length < width ? new Array(width - length + 1).join(fill) : \"\";\n\n // If the fill character is \"0\", grouping is applied after padding.\n if (comma && zero) value = group(padding + value, padding.length ? width - valueSuffix.length : Infinity), padding = \"\";\n\n // Reconstruct the final output based on the desired alignment.\n switch (align) {\n case \"<\": value = valuePrefix + value + valueSuffix + padding; break;\n case \"=\": value = valuePrefix + padding + value + valueSuffix; break;\n case \"^\": value = padding.slice(0, length = padding.length >> 1) + valuePrefix + value + valueSuffix + padding.slice(length); break;\n default: value = padding + valuePrefix + value + valueSuffix; break;\n }\n\n return numerals(value);\n }\n\n format.toString = function() {\n return specifier + \"\";\n };\n\n return format;\n }\n\n function formatPrefix(specifier, value) {\n var f = newFormat((specifier = formatSpecifier(specifier), specifier.type = \"f\", specifier)),\n e = Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3,\n k = Math.pow(10, -e),\n prefix = prefixes[8 + e / 3];\n return function(value) {\n return f(k * value) + prefix;\n };\n }\n\n return {\n format: newFormat,\n formatPrefix: formatPrefix\n };\n}\n","import formatLocale from \"./locale\";\n\nvar locale;\nexport var format;\nexport var formatPrefix;\n\ndefaultLocale({\n decimal: \".\",\n thousands: \",\",\n grouping: [3],\n currency: [\"$\", \"\"]\n});\n\nexport default function defaultLocale(definition) {\n locale = formatLocale(definition);\n format = locale.format;\n formatPrefix = locale.formatPrefix;\n return locale;\n}\n","import exponent from \"./exponent\";\n\nexport default function(step) {\n return Math.max(0, -exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent\";\n\nexport default function(step, value) {\n return Math.max(0, Math.max(-8, Math.min(8, Math.floor(exponent(value) / 3))) * 3 - exponent(Math.abs(step)));\n}\n","import exponent from \"./exponent\";\n\nexport default function(step, max) {\n step = Math.abs(step), max = Math.abs(max) - step;\n return Math.max(0, exponent(max) - exponent(step)) + 1;\n}\n","import {tickStep} from \"d3-array\";\nimport {format, formatPrefix, formatSpecifier, precisionFixed, precisionPrefix, precisionRound} from \"d3-format\";\n\nexport default function(start, stop, count, specifier) {\n var step = tickStep(start, stop, count),\n precision;\n specifier = formatSpecifier(specifier == null ? \",f\" : specifier);\n switch (specifier.type) {\n case \"s\": {\n var value = Math.max(Math.abs(start), Math.abs(stop));\n if (specifier.precision == null && !isNaN(precision = precisionPrefix(step, value))) specifier.precision = precision;\n return formatPrefix(specifier, value);\n }\n case \"\":\n case \"e\":\n case \"g\":\n case \"p\":\n case \"r\": {\n if (specifier.precision == null && !isNaN(precision = precisionRound(step, Math.max(Math.abs(start), Math.abs(stop))))) specifier.precision = precision - (specifier.type === \"e\");\n break;\n }\n case \"f\":\n case \"%\": {\n if (specifier.precision == null && !isNaN(precision = precisionFixed(step))) specifier.precision = precision - (specifier.type === \"%\") * 2;\n break;\n }\n }\n return format(specifier);\n}\n","import {ticks, tickIncrement} from \"d3-array\";\nimport continuous, {copy, identity} from \"./continuous\";\nimport {initRange} from \"./init\";\nimport tickFormat from \"./tickFormat\";\n\nexport function linearish(scale) {\n var domain = scale.domain;\n\n scale.ticks = function(count) {\n var d = domain();\n return ticks(d[0], d[d.length - 1], count == null ? 10 : count);\n };\n\n scale.tickFormat = function(count, specifier) {\n var d = domain();\n return tickFormat(d[0], d[d.length - 1], count == null ? 10 : count, specifier);\n };\n\n scale.nice = function(count) {\n if (count == null) count = 10;\n\n var d = domain(),\n i0 = 0,\n i1 = d.length - 1,\n start = d[i0],\n stop = d[i1],\n step;\n\n if (stop < start) {\n step = start, start = stop, stop = step;\n step = i0, i0 = i1, i1 = step;\n }\n\n step = tickIncrement(start, stop, count);\n\n if (step > 0) {\n start = Math.floor(start / step) * step;\n stop = Math.ceil(stop / step) * step;\n step = tickIncrement(start, stop, count);\n } else if (step < 0) {\n start = Math.ceil(start * step) / step;\n stop = Math.floor(stop * step) / step;\n step = tickIncrement(start, stop, count);\n }\n\n if (step > 0) {\n d[i0] = Math.floor(start / step) * step;\n d[i1] = Math.ceil(stop / step) * step;\n domain(d);\n } else if (step < 0) {\n d[i0] = Math.ceil(start * step) / step;\n d[i1] = Math.floor(stop * step) / step;\n domain(d);\n }\n\n return scale;\n };\n\n return scale;\n}\n\nexport default function linear() {\n var scale = continuous(identity, identity);\n\n scale.copy = function() {\n return copy(scale, linear());\n };\n\n initRange.apply(scale, arguments);\n\n return linearish(scale);\n}\n","import {linearish} from \"./linear\";\nimport number from \"./number\";\n\nexport default function identity(domain) {\n var unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : x;\n }\n\n scale.invert = scale;\n\n scale.domain = scale.range = function(_) {\n return arguments.length ? (domain = Array.from(_, number), scale) : domain.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return identity(domain).unknown(unknown);\n };\n\n domain = arguments.length ? Array.from(domain, number) : [0, 1];\n\n return linearish(scale);\n}\n","export default function(domain, interval) {\n domain = domain.slice();\n\n var i0 = 0,\n i1 = domain.length - 1,\n x0 = domain[i0],\n x1 = domain[i1],\n t;\n\n if (x1 < x0) {\n t = i0, i0 = i1, i1 = t;\n t = x0, x0 = x1, x1 = t;\n }\n\n domain[i0] = interval.floor(x0);\n domain[i1] = interval.ceil(x1);\n return domain;\n}\n","import {ticks} from \"d3-array\";\nimport {format} from \"d3-format\";\nimport nice from \"./nice\";\nimport {copy, transformer} from \"./continuous\";\nimport {initRange} from \"./init\";\n\nfunction transformLog(x) {\n return Math.log(x);\n}\n\nfunction transformExp(x) {\n return Math.exp(x);\n}\n\nfunction transformLogn(x) {\n return -Math.log(-x);\n}\n\nfunction transformExpn(x) {\n return -Math.exp(-x);\n}\n\nfunction pow10(x) {\n return isFinite(x) ? +(\"1e\" + x) : x < 0 ? 0 : x;\n}\n\nfunction powp(base) {\n return base === 10 ? pow10\n : base === Math.E ? Math.exp\n : function(x) { return Math.pow(base, x); };\n}\n\nfunction logp(base) {\n return base === Math.E ? Math.log\n : base === 10 && Math.log10\n || base === 2 && Math.log2\n || (base = Math.log(base), function(x) { return Math.log(x) / base; });\n}\n\nfunction reflect(f) {\n return function(x) {\n return -f(-x);\n };\n}\n\nexport function loggish(transform) {\n var scale = transform(transformLog, transformExp),\n domain = scale.domain,\n base = 10,\n logs,\n pows;\n\n function rescale() {\n logs = logp(base), pows = powp(base);\n if (domain()[0] < 0) {\n logs = reflect(logs), pows = reflect(pows);\n transform(transformLogn, transformExpn);\n } else {\n transform(transformLog, transformExp);\n }\n return scale;\n }\n\n scale.base = function(_) {\n return arguments.length ? (base = +_, rescale()) : base;\n };\n\n scale.domain = function(_) {\n return arguments.length ? (domain(_), rescale()) : domain();\n };\n\n scale.ticks = function(count) {\n var d = domain(),\n u = d[0],\n v = d[d.length - 1],\n r;\n\n if (r = v < u) i = u, u = v, v = i;\n\n var i = logs(u),\n j = logs(v),\n p,\n k,\n t,\n n = count == null ? 10 : +count,\n z = [];\n\n if (!(base % 1) && j - i < n) {\n i = Math.round(i) - 1, j = Math.round(j) + 1;\n if (u > 0) for (; i < j; ++i) {\n for (k = 1, p = pows(i); k < base; ++k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n } else for (; i < j; ++i) {\n for (k = base - 1, p = pows(i); k >= 1; --k) {\n t = p * k;\n if (t < u) continue;\n if (t > v) break;\n z.push(t);\n }\n }\n } else {\n z = ticks(i, j, Math.min(j - i, n)).map(pows);\n }\n\n return r ? z.reverse() : z;\n };\n\n scale.tickFormat = function(count, specifier) {\n if (specifier == null) specifier = base === 10 ? \".0e\" : \",\";\n if (typeof specifier !== \"function\") specifier = format(specifier);\n if (count === Infinity) return specifier;\n if (count == null) count = 10;\n var k = Math.max(1, base * count / scale.ticks().length); // TODO fast estimate?\n return function(d) {\n var i = d / pows(Math.round(logs(d)));\n if (i * base < base - 0.5) i *= base;\n return i <= k ? specifier(d) : \"\";\n };\n };\n\n scale.nice = function() {\n return domain(nice(domain(), {\n floor: function(x) { return pows(Math.floor(logs(x))); },\n ceil: function(x) { return pows(Math.ceil(logs(x))); }\n }));\n };\n\n return scale;\n}\n\nexport default function log() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, log()).base(scale.base());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n","import {linearish} from \"./linear\";\nimport {copy, transformer} from \"./continuous\";\nimport {initRange} from \"./init\";\n\nfunction transformSymlog(c) {\n return function(x) {\n return Math.sign(x) * Math.log1p(Math.abs(x / c));\n };\n}\n\nfunction transformSymexp(c) {\n return function(x) {\n return Math.sign(x) * Math.expm1(Math.abs(x)) * c;\n };\n}\n\nexport function symlogish(transform) {\n var c = 1, scale = transform(transformSymlog(c), transformSymexp(c));\n\n scale.constant = function(_) {\n return arguments.length ? transform(transformSymlog(c = +_), transformSymexp(c)) : c;\n };\n\n return linearish(scale);\n}\n\nexport default function symlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, symlog()).constant(scale.constant());\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {linearish} from \"./linear\";\nimport {copy, identity, transformer} from \"./continuous\";\nimport {initRange} from \"./init\";\n\nfunction transformPow(exponent) {\n return function(x) {\n return x < 0 ? -Math.pow(-x, exponent) : Math.pow(x, exponent);\n };\n}\n\nfunction transformSqrt(x) {\n return x < 0 ? -Math.sqrt(-x) : Math.sqrt(x);\n}\n\nfunction transformSquare(x) {\n return x < 0 ? -x * x : x * x;\n}\n\nexport function powish(transform) {\n var scale = transform(identity, identity),\n exponent = 1;\n\n function rescale() {\n return exponent === 1 ? transform(identity, identity)\n : exponent === 0.5 ? transform(transformSqrt, transformSquare)\n : transform(transformPow(exponent), transformPow(1 / exponent));\n }\n\n scale.exponent = function(_) {\n return arguments.length ? (exponent = +_, rescale()) : exponent;\n };\n\n return linearish(scale);\n}\n\nexport default function pow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, pow()).exponent(scale.exponent());\n };\n\n initRange.apply(scale, arguments);\n\n return scale;\n}\n\nexport function sqrt() {\n return pow.apply(null, arguments).exponent(0.5);\n}\n","import {ascending, bisect, quantile as threshold} from \"d3-array\";\nimport {initRange} from \"./init\";\n\nexport default function quantile() {\n var domain = [],\n range = [],\n thresholds = [],\n unknown;\n\n function rescale() {\n var i = 0, n = Math.max(1, range.length);\n thresholds = new Array(n - 1);\n while (++i < n) thresholds[i - 1] = threshold(domain, i / n);\n return scale;\n }\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : range[bisect(thresholds, x)];\n }\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN] : [\n i > 0 ? thresholds[i - 1] : domain[0],\n i < thresholds.length ? thresholds[i] : domain[domain.length - 1]\n ];\n };\n\n scale.domain = function(_) {\n if (!arguments.length) return domain.slice();\n domain = [];\n for (let d of _) if (d != null && !isNaN(d = +d)) domain.push(d);\n domain.sort(ascending);\n return rescale();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), rescale()) : range.slice();\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.quantiles = function() {\n return thresholds.slice();\n };\n\n scale.copy = function() {\n return quantile()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {linearish} from \"./linear\";\nimport {initRange} from \"./init\";\n\nexport default function quantize() {\n var x0 = 0,\n x1 = 1,\n n = 1,\n domain = [0.5],\n range = [0, 1],\n unknown;\n\n function scale(x) {\n return x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n function rescale() {\n var i = -1;\n domain = new Array(n);\n while (++i < n) domain[i] = ((i + 1) * x1 - (i - n) * x0) / (n + 1);\n return scale;\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, x0 = +x0, x1 = +x1, rescale()) : [x0, x1];\n };\n\n scale.range = function(_) {\n return arguments.length ? (n = (range = Array.from(_)).length - 1, rescale()) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return i < 0 ? [NaN, NaN]\n : i < 1 ? [x0, domain[0]]\n : i >= n ? [domain[n - 1], x1]\n : [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : scale;\n };\n\n scale.thresholds = function() {\n return domain.slice();\n };\n\n scale.copy = function() {\n return quantize()\n .domain([x0, x1])\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(linearish(scale), arguments);\n}\n","import {bisect} from \"d3-array\";\nimport {initRange} from \"./init\";\n\nexport default function threshold() {\n var domain = [0.5],\n range = [0, 1],\n unknown,\n n = 1;\n\n function scale(x) {\n return x <= x ? range[bisect(domain, x, 0, n)] : unknown;\n }\n\n scale.domain = function(_) {\n return arguments.length ? (domain = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : domain.slice();\n };\n\n scale.range = function(_) {\n return arguments.length ? (range = Array.from(_), n = Math.min(domain.length, range.length - 1), scale) : range.slice();\n };\n\n scale.invertExtent = function(y) {\n var i = range.indexOf(y);\n return [domain[i - 1], domain[i]];\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n scale.copy = function() {\n return threshold()\n .domain(domain)\n .range(range)\n .unknown(unknown);\n };\n\n return initRange.apply(scale, arguments);\n}\n","import {bisector, tickStep} from \"d3-array\";\nimport {timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond} from \"d3-time\";\nimport {timeFormat} from \"d3-time-format\";\nimport continuous, {copy, identity} from \"./continuous\";\nimport {initRange} from \"./init\";\nimport nice from \"./nice\";\n\nvar durationSecond = 1000,\n durationMinute = durationSecond * 60,\n durationHour = durationMinute * 60,\n durationDay = durationHour * 24,\n durationWeek = durationDay * 7,\n durationMonth = durationDay * 30,\n durationYear = durationDay * 365;\n\nfunction date(t) {\n return new Date(t);\n}\n\nfunction number(t) {\n return t instanceof Date ? +t : +new Date(+t);\n}\n\nexport function calendar(year, month, week, day, hour, minute, second, millisecond, format) {\n var scale = continuous(identity, identity),\n invert = scale.invert,\n domain = scale.domain;\n\n var formatMillisecond = format(\".%L\"),\n formatSecond = format(\":%S\"),\n formatMinute = format(\"%I:%M\"),\n formatHour = format(\"%I %p\"),\n formatDay = format(\"%a %d\"),\n formatWeek = format(\"%b %d\"),\n formatMonth = format(\"%B\"),\n formatYear = format(\"%Y\");\n\n var tickIntervals = [\n [second, 1, durationSecond],\n [second, 5, 5 * durationSecond],\n [second, 15, 15 * durationSecond],\n [second, 30, 30 * durationSecond],\n [minute, 1, durationMinute],\n [minute, 5, 5 * durationMinute],\n [minute, 15, 15 * durationMinute],\n [minute, 30, 30 * durationMinute],\n [ hour, 1, durationHour ],\n [ hour, 3, 3 * durationHour ],\n [ hour, 6, 6 * durationHour ],\n [ hour, 12, 12 * durationHour ],\n [ day, 1, durationDay ],\n [ day, 2, 2 * durationDay ],\n [ week, 1, durationWeek ],\n [ month, 1, durationMonth ],\n [ month, 3, 3 * durationMonth ],\n [ year, 1, durationYear ]\n ];\n\n function tickFormat(date) {\n return (second(date) < date ? formatMillisecond\n : minute(date) < date ? formatSecond\n : hour(date) < date ? formatMinute\n : day(date) < date ? formatHour\n : month(date) < date ? (week(date) < date ? formatDay : formatWeek)\n : year(date) < date ? formatMonth\n : formatYear)(date);\n }\n\n function tickInterval(interval, start, stop, step) {\n if (interval == null) interval = 10;\n\n // If a desired tick count is specified, pick a reasonable tick interval\n // based on the extent of the domain and a rough estimate of tick size.\n // Otherwise, assume interval is already a time interval and use it.\n if (typeof interval === \"number\") {\n var target = Math.abs(stop - start) / interval,\n i = bisector(function(i) { return i[2]; }).right(tickIntervals, target);\n if (i === tickIntervals.length) {\n step = tickStep(start / durationYear, stop / durationYear, interval);\n interval = year;\n } else if (i) {\n i = tickIntervals[target / tickIntervals[i - 1][2] < tickIntervals[i][2] / target ? i - 1 : i];\n step = i[1];\n interval = i[0];\n } else {\n step = Math.max(tickStep(start, stop, interval), 1);\n interval = millisecond;\n }\n }\n\n return step == null ? interval : interval.every(step);\n }\n\n scale.invert = function(y) {\n return new Date(invert(y));\n };\n\n scale.domain = function(_) {\n return arguments.length ? domain(Array.from(_, number)) : domain().map(date);\n };\n\n scale.ticks = function(interval, step) {\n var d = domain(),\n t0 = d[0],\n t1 = d[d.length - 1],\n r = t1 < t0,\n t;\n if (r) t = t0, t0 = t1, t1 = t;\n t = tickInterval(interval, t0, t1, step);\n t = t ? t.range(t0, t1 + 1) : []; // inclusive stop\n return r ? t.reverse() : t;\n };\n\n scale.tickFormat = function(count, specifier) {\n return specifier == null ? tickFormat : format(specifier);\n };\n\n scale.nice = function(interval, step) {\n var d = domain();\n return (interval = tickInterval(interval, d[0], d[d.length - 1], step))\n ? domain(nice(d, interval))\n : scale;\n };\n\n scale.copy = function() {\n return copy(scale, calendar(year, month, week, day, hour, minute, second, millisecond, format));\n };\n\n return scale;\n}\n\nexport default function() {\n return initRange.apply(calendar(timeYear, timeMonth, timeWeek, timeDay, timeHour, timeMinute, timeSecond, timeMillisecond, timeFormat).domain([new Date(2000, 0, 1), new Date(2000, 0, 2)]), arguments);\n}\n","import {calendar} from \"./time\";\nimport {utcFormat} from \"d3-time-format\";\nimport {utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcMillisecond} from \"d3-time\";\nimport {initRange} from \"./init\";\n\nexport default function() {\n return initRange.apply(calendar(utcYear, utcMonth, utcWeek, utcDay, utcHour, utcMinute, utcSecond, utcMillisecond, utcFormat).domain([Date.UTC(2000, 0, 1), Date.UTC(2000, 0, 2)]), arguments);\n}\n","import {identity} from \"./continuous\";\nimport {initInterpolator} from \"./init\";\nimport {linearish} from \"./linear\";\nimport {loggish} from \"./log\";\nimport {symlogish} from \"./symlog\";\nimport {powish} from \"./pow\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 1,\n t0,\n t1,\n k10,\n transform,\n interpolator = identity,\n clamp = false,\n unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : interpolator(k10 === 0 ? 0.5 : (x = (transform(x) - t0) * k10, clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0), scale) : [x0, x1];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), k10 = t0 === t1 ? 0 : 1 / (t1 - t0);\n return scale;\n };\n}\n\nexport function copy(source, target) {\n return target\n .domain(source.domain())\n .interpolator(source.interpolator())\n .clamp(source.clamp())\n .unknown(source.unknown());\n}\n\nexport default function sequential() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, sequential());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialLog() {\n var scale = loggish(transformer()).domain([1, 10]);\n\n scale.copy = function() {\n return copy(scale, sequentialLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, sequentialPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function sequentialSqrt() {\n return sequentialPow.apply(null, arguments).exponent(0.5);\n}\n","import {identity} from \"./continuous\";\nimport {initInterpolator} from \"./init\";\nimport {linearish} from \"./linear\";\nimport {loggish} from \"./log\";\nimport {copy} from \"./sequential\";\nimport {symlogish} from \"./symlog\";\nimport {powish} from \"./pow\";\n\nfunction transformer() {\n var x0 = 0,\n x1 = 0.5,\n x2 = 1,\n t0,\n t1,\n t2,\n k10,\n k21,\n interpolator = identity,\n transform,\n clamp = false,\n unknown;\n\n function scale(x) {\n return isNaN(x = +x) ? unknown : (x = 0.5 + ((x = +transform(x)) - t1) * (x < t1 ? k10 : k21), interpolator(clamp ? Math.max(0, Math.min(1, x)) : x));\n }\n\n scale.domain = function(_) {\n return arguments.length ? ([x0, x1, x2] = _, t0 = transform(x0 = +x0), t1 = transform(x1 = +x1), t2 = transform(x2 = +x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1), scale) : [x0, x1, x2];\n };\n\n scale.clamp = function(_) {\n return arguments.length ? (clamp = !!_, scale) : clamp;\n };\n\n scale.interpolator = function(_) {\n return arguments.length ? (interpolator = _, scale) : interpolator;\n };\n\n scale.unknown = function(_) {\n return arguments.length ? (unknown = _, scale) : unknown;\n };\n\n return function(t) {\n transform = t, t0 = t(x0), t1 = t(x1), t2 = t(x2), k10 = t0 === t1 ? 0 : 0.5 / (t1 - t0), k21 = t1 === t2 ? 0 : 0.5 / (t2 - t1);\n return scale;\n };\n}\n\nexport default function diverging() {\n var scale = linearish(transformer()(identity));\n\n scale.copy = function() {\n return copy(scale, diverging());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingLog() {\n var scale = loggish(transformer()).domain([0.1, 1, 10]);\n\n scale.copy = function() {\n return copy(scale, divergingLog()).base(scale.base());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSymlog() {\n var scale = symlogish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingSymlog()).constant(scale.constant());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingPow() {\n var scale = powish(transformer());\n\n scale.copy = function() {\n return copy(scale, divergingPow()).exponent(scale.exponent());\n };\n\n return initInterpolator.apply(scale, arguments);\n}\n\nexport function divergingSqrt() {\n return divergingPow.apply(null, arguments).exponent(0.5);\n}\n","import bandSpace from './bandSpace';\nimport {range as sequence, bisectRight} from 'd3-array';\nimport {scaleOrdinal as ordinal} from 'd3-scale';\n\nexport function band() {\n var scale = ordinal().unknown(undefined),\n domain = scale.domain,\n ordinalRange = scale.range,\n range = [0, 1],\n step,\n bandwidth,\n round = false,\n paddingInner = 0,\n paddingOuter = 0,\n align = 0.5;\n\n delete scale.unknown;\n\n function rescale() {\n var n = domain().length,\n reverse = range[1] < range[0],\n start = range[reverse - 0],\n stop = range[1 - reverse],\n space = bandSpace(n, paddingInner, paddingOuter);\n\n step = (stop - start) / (space || 1);\n if (round) {\n step = Math.floor(step);\n }\n start += (stop - start - step * (n - paddingInner)) * align;\n bandwidth = step * (1 - paddingInner);\n if (round) {\n start = Math.round(start);\n bandwidth = Math.round(bandwidth);\n }\n var values = sequence(n).map(function(i) { return start + step * i; });\n return ordinalRange(reverse ? values.reverse() : values);\n }\n\n scale.domain = function(_) {\n if (arguments.length) {\n domain(_);\n return rescale();\n } else {\n return domain();\n }\n };\n\n scale.range = function(_) {\n if (arguments.length) {\n range = [+_[0], +_[1]];\n return rescale();\n } else {\n return range.slice();\n }\n };\n\n scale.rangeRound = function(_) {\n range = [+_[0], +_[1]];\n round = true;\n return rescale();\n };\n\n scale.bandwidth = function() {\n return bandwidth;\n };\n\n scale.step = function() {\n return step;\n };\n\n scale.round = function(_) {\n if (arguments.length) {\n round = !!_;\n return rescale();\n } else {\n return round;\n }\n };\n\n scale.padding = function(_) {\n if (arguments.length) {\n paddingOuter = Math.max(0, Math.min(1, _));\n paddingInner = paddingOuter;\n return rescale();\n } else {\n return paddingInner;\n }\n };\n\n scale.paddingInner = function(_) {\n if (arguments.length) {\n paddingInner = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return paddingInner;\n }\n };\n\n scale.paddingOuter = function(_) {\n if (arguments.length) {\n paddingOuter = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return paddingOuter;\n }\n };\n\n scale.align = function(_) {\n if (arguments.length) {\n align = Math.max(0, Math.min(1, _));\n return rescale();\n } else {\n return align;\n }\n };\n\n scale.invertRange = function(_) {\n // bail if range has null or undefined values\n if (_[0] == null || _[1] == null) return;\n\n var lo = +_[0],\n hi = +_[1],\n reverse = range[1] < range[0],\n values = reverse ? ordinalRange().reverse() : ordinalRange(),\n n = values.length - 1, a, b, t;\n\n // bail if either range endpoint is invalid\n if (lo !== lo || hi !== hi) return;\n\n // order range inputs, bail if outside of scale range\n if (hi < lo) {\n t = lo;\n lo = hi;\n hi = t;\n }\n if (hi < values[0] || lo > range[1-reverse]) return;\n\n // binary search to index into scale range\n a = Math.max(0, bisectRight(values, lo) - 1);\n b = lo===hi ? a : bisectRight(values, hi) - 1;\n\n // increment index a if lo is within padding gap\n if (lo - values[a] > bandwidth + 1e-10) ++a;\n\n if (reverse) {\n // map + swap\n t = a;\n a = n - b;\n b = n - t;\n }\n return (a > b) ? undefined : domain().slice(a, b+1);\n };\n\n scale.invert = function(_) {\n var value = scale.invertRange([_, _]);\n return value ? value[0] : value;\n };\n\n scale.copy = function() {\n return band()\n .domain(domain())\n .range(range)\n .round(round)\n .paddingInner(paddingInner)\n .paddingOuter(paddingOuter)\n .align(align);\n };\n\n return rescale();\n}\n\nfunction pointish(scale) {\n var copy = scale.copy;\n\n scale.padding = scale.paddingOuter;\n delete scale.paddingInner;\n\n scale.copy = function() {\n return pointish(copy());\n };\n\n return scale;\n}\n\nexport function point() {\n return pointish(band().paddingInner(1));\n}\n","var map = Array.prototype.map;\n\nexport function numbers(_) {\n return map.call(_, function(x) { return +x; });\n}\n","export var slice = Array.prototype.slice;\n","import {bisect} from 'd3-array';\nimport {tickFormat} from 'd3-scale';\nimport {peek} from 'vega-util';\nimport {numbers} from './numbers';\nimport {slice} from './slice';\n\nexport function scaleBinOrdinal() {\n var domain = [],\n range = [];\n\n function scale(x) {\n return x == null || x !== x\n ? undefined\n : range[(bisect(domain, x) - 1) % range.length];\n }\n\n scale.domain = function(_) {\n if (arguments.length) {\n domain = numbers(_);\n return scale;\n } else {\n return domain.slice();\n }\n };\n\n scale.range = function(_) {\n if (arguments.length) {\n range = slice.call(_);\n return scale;\n } else {\n return range.slice();\n }\n };\n\n scale.tickFormat = function(count, specifier) {\n return tickFormat(domain[0], peek(domain), count == null ? 10 : count, specifier);\n };\n\n scale.copy = function() {\n return scaleBinOrdinal().domain(scale.domain()).range(scale.range());\n };\n\n return scale;\n}","import invertRange from './scales/invertRange';\nimport invertRangeExtent from './scales/invertRangeExtent';\n\nimport {\n Identity,\n Linear, Log, Pow, Sqrt, Symlog,\n Time, UTC, Sequential, Diverging,\n Quantile, Quantize, Threshold,\n BinOrdinal, Ordinal, Band, Point\n} from './scales/types';\n\nimport {\n band as scaleBand,\n point as scalePoint\n} from './scales/scaleBand';\n\nimport {\n scaleBinOrdinal\n} from './scales/scaleBinOrdinal';\n\nimport * as $ from 'd3-scale';\n\n/**\n * Augment scales with their type and needed inverse methods.\n */\nfunction create(type, constructor) {\n return function scale() {\n var s = constructor();\n\n if (!s.invertRange) {\n s.invertRange = s.invert ? invertRange(s)\n : s.invertExtent ? invertRangeExtent(s)\n : undefined;\n }\n\n s.type = type;\n return s;\n };\n}\n\nexport default function scale(type, scale) {\n if (arguments.length > 1) {\n scales[type] = create(type, scale);\n return this;\n } else {\n return scales.hasOwnProperty(type) ? scales[type] : undefined;\n }\n}\n\nvar scales = {\n // identity scale\n [Identity]: $.scaleIdentity,\n\n // continuous scales\n [Linear]: $.scaleLinear,\n [Log]: $.scaleLog,\n [Pow]: $.scalePow,\n [Sqrt]: $.scaleSqrt,\n [Symlog]: $.scaleSymlog,\n [Time]: $.scaleTime,\n [UTC]: $.scaleUtc,\n\n // sequential scales\n [Sequential]: $.scaleSequential, // backwards compat\n [Sequential+'-'+Linear]: $.scaleSequential,\n [Sequential+'-'+Log]: $.scaleSequentialLog,\n [Sequential+'-'+Pow]: $.scaleSequentialPow,\n [Sequential+'-'+Sqrt]: $.scaleSequentialSqrt,\n [Sequential+'-'+Symlog]: $.scaleSequentialSymlog,\n\n // diverging scales\n [Diverging+'-'+Linear]: $.scaleDiverging,\n [Diverging+'-'+Log]: $.scaleDivergingLog,\n [Diverging+'-'+Pow]: $.scaleDivergingPow,\n [Diverging+'-'+Sqrt]: $.scaleDivergingSqrt,\n [Diverging+'-'+Symlog]: $.scaleDivergingSymlog,\n\n // discretizing scales\n [Quantile]: $.scaleQuantile,\n [Quantize]: $.scaleQuantize,\n [Threshold]: $.scaleThreshold,\n\n // discrete scales\n [BinOrdinal]: scaleBinOrdinal,\n [Ordinal]: $.scaleOrdinal,\n [Band]: scaleBand,\n [Point]: scalePoint\n};\n\nfor (var key in scales) {\n scale(key, scales[key]);\n}\n","import getScale from './scales';\nimport {constant, peek} from 'vega-util';\nimport * as $ from 'd3-interpolate';\n\nconst scaleProps = ['clamp', 'base', 'constant', 'exponent'];\n\nexport function interpolateRange(interpolator, range) {\n var start = range[0],\n span = peek(range) - start;\n return function(i) { return interpolator(start + i * span); };\n}\n\nexport function interpolateColors(colors, type, gamma) {\n return $.piecewise(interpolate(type || 'rgb', gamma), colors);\n}\n\nexport function quantizeInterpolator(interpolator, count) {\n var samples = new Array(count),\n n = count + 1;\n for (var i = 0; i < count;) samples[i] = interpolator(++i / n);\n return samples;\n}\n\nexport function scaleCopy(scale) {\n const t = scale.type,\n s = scale.copy();\n s.type = t;\n return s;\n}\n\nexport function scaleFraction(scale, min, max) {\n var delta = max - min, i, t, s;\n\n if (!delta || !isFinite(delta)) {\n return constant(0.5);\n } else {\n i = (t = scale.type).indexOf('-');\n t = i < 0 ? t : t.slice(i + 1);\n s = getScale(t)().domain([min, max]).range([0, 1]);\n scaleProps.forEach(m => scale[m] ? s[m](scale[m]()) : 0);\n return s;\n }\n}\n\nexport function interpolate(type, gamma) {\n var interp = $[method(type)];\n return (gamma != null && interp && interp.gamma)\n ? interp.gamma(gamma)\n : interp;\n}\n\nfunction method(type) {\n return 'interpolate' + type.toLowerCase()\n .split('-')\n .map(function(s) { return s[0].toUpperCase() + s.slice(1); })\n .join('');\n}\n","export const continuous = {\n blues: 'cfe1f2bed8eca8cee58fc1de74b2d75ba3cf4592c63181bd206fb2125ca40a4a90',\n greens: 'd3eecdc0e6baabdda594d3917bc77d60ba6c46ab5e329a512089430e7735036429',\n greys: 'e2e2e2d4d4d4c4c4c4b1b1b19d9d9d8888887575756262624d4d4d3535351e1e1e',\n oranges: 'fdd8b3fdc998fdb87bfda55efc9244f87f2cf06b18e4580bd14904b93d029f3303',\n purples: 'e2e1efd4d4e8c4c5e0b4b3d6a3a0cc928ec3827cb97566ae684ea25c3696501f8c',\n reds: 'fdc9b4fcb49afc9e80fc8767fa7051f6573fec3f2fdc2a25c81b1db21218970b13',\n\n blueGreen: 'd5efedc1e8e0a7ddd18bd2be70c6a958ba9144ad77319c5d2089460e7736036429',\n bluePurple: 'ccddecbad0e4a8c2dd9ab0d4919cc98d85be8b6db28a55a6873c99822287730f71',\n greenBlue: 'd3eecec5e8c3b1e1bb9bd8bb82cec269c2ca51b2cd3c9fc7288abd1675b10b60a1',\n orangeRed: 'fddcaffdcf9bfdc18afdad77fb9562f67d53ee6545e24932d32d1ebf130da70403',\n purpleBlue: 'dbdaebc8cee4b1c3de97b7d87bacd15b9fc93a90c01e7fb70b70ab056199045281',\n purpleBlueGreen: 'dbd8eac8cee4b0c3de93b7d872acd1549fc83892bb1c88a3097f8702736b016353',\n purpleRed: 'dcc9e2d3b3d7ce9eccd186c0da6bb2e14da0e23189d91e6fc61159ab07498f023a',\n redPurple: 'fccfccfcbec0faa9b8f98faff571a5ec539ddb3695c41b8aa908808d0179700174',\n yellowGreen: 'e4f4acd1eca0b9e2949ed68880c97c62bb6e47aa5e3297502083440e723b036034',\n yellowOrangeBrown: 'feeaa1fedd84fecc63feb746fca031f68921eb7215db5e0bc54c05ab3d038f3204',\n yellowOrangeRed: 'fee087fed16ffebd59fea849fd903efc7335f9522bee3423de1b20ca0b22af0225',\n\n blueOrange: '134b852f78b35da2cb9dcae1d2e5eff2f0ebfce0bafbbf74e8932fc5690d994a07',\n brownBlueGreen: '704108a0651ac79548e3c78af3e6c6eef1eac9e9e48ed1c74da79e187a72025147',\n purpleGreen: '5b1667834792a67fb6c9aed3e6d6e8eff0efd9efd5aedda971bb75368e490e5e29',\n purpleOrange: '4114696647968f83b7b9b4d6dadbebf3eeeafce0bafbbf74e8932fc5690d994a07',\n redBlue: '8c0d25bf363adf745ef4ae91fbdbc9f2efeed2e5ef9dcae15da2cb2f78b3134b85',\n redGrey: '8c0d25bf363adf745ef4ae91fcdccbfaf4f1e2e2e2c0c0c0969696646464343434',\n yellowGreenBlue: 'eff9bddbf1b4bde5b594d5b969c5be45b4c22c9ec02182b82163aa23479c1c3185',\n redYellowBlue: 'a50026d4322cf16e43fcac64fedd90faf8c1dcf1ecabd6e875abd04a74b4313695',\n redYellowGreen: 'a50026d4322cf16e43fcac63fedd8df9f7aed7ee8ea4d86e64bc6122964f006837',\n pinkYellowGreen: '8e0152c0267edd72adf0b3d6faddedf5f3efe1f2cab6de8780bb474f9125276419',\n spectral: '9e0142d13c4bf0704afcac63fedd8dfbf8b0e0f3a1a9dda269bda94288b55e4fa2',\n\n viridis: '440154470e61481a6c482575472f7d443a834144873d4e8a39568c35608d31688e2d708e2a788e27818e23888e21918d1f988b1fa08822a8842ab07f35b77943bf7154c56866cc5d7ad1518fd744a5db36bcdf27d2e21be9e51afde725',\n magma: '0000040404130b0924150e3720114b2c11603b0f704a107957157e651a80721f817f24828c29819a2e80a8327db6377ac43c75d1426fde4968e95462f1605df76f5cfa7f5efc8f65fe9f6dfeaf78febf84fece91fddea0fcedaffcfdbf',\n inferno: '0000040403130c0826170c3b240c4f330a5f420a68500d6c5d126e6b176e781c6d86216b932667a12b62ae305cbb3755c73e4cd24644dd513ae65c30ed6925f3771af8850ffb9506fca50afcb519fac62df6d645f2e661f3f484fcffa4',\n plasma: '0d088723069033059742039d5002a25d01a66a00a87801a88405a7900da49c179ea72198b12a90ba3488c33d80cb4779d35171da5a69e16462e76e5bed7953f2834cf68f44fa9a3dfca636fdb32ffec029fcce25f9dc24f5ea27f0f921',\n\n rainbow: '6e40aa883eb1a43db3bf3cafd83fa4ee4395fe4b83ff576eff6659ff7847ff8c38f3a130e2b72fcfcc36bee044aff05b8ff4576ff65b52f6673af27828ea8d1ddfa319d0b81cbecb23abd82f96e03d82e14c6edb5a5dd0664dbf6e40aa',\n sinebow: 'ff4040fc582af47218e78d0bd5a703bfbf00a7d5038de70b72f41858fc2a40ff402afc5818f4720be78d03d5a700bfbf03a7d50b8de71872f42a58fc4040ff582afc7218f48d0be7a703d5bf00bfd503a7e70b8df41872fc2a58ff4040',\n\n browns: 'eedbbdecca96e9b97ae4a865dc9856d18954c7784cc0673fb85536ad44339f3632',\n tealBlues: 'bce4d89dd3d181c3cb65b3c245a2b9368fae347da0306a932c5985',\n teals: 'bbdfdfa2d4d58ac9c975bcbb61b0af4da5a43799982b8b8c1e7f7f127273006667',\n warmGreys: 'dcd4d0cec5c1c0b8b4b3aaa7a59c9998908c8b827f7e7673726866665c5a59504e',\n\n goldGreen: 'f4d166d5ca60b6c35c98bb597cb25760a6564b9c533f8f4f33834a257740146c36',\n goldOrange: 'f4d166f8be5cf8aa4cf5983bf3852aef701be2621fd65322c54923b142239e3a26',\n goldRed: 'f4d166f6be59f9aa51fc964ef6834bee734ae56249db5247cf4244c43141b71d3e',\n\n lightGreyRed: 'efe9e6e1dad7d5cbc8c8bdb9bbaea9cd967ddc7b43e15f19df4011dc000b',\n lightGreyTeal: 'e4eaead6dcddc8ced2b7c2c7a6b4bc64b0bf22a6c32295c11f85be1876bc',\n lightMulti: 'e0f1f2c4e9d0b0de9fd0e181f6e072f6c053f3993ef77440ef4a3c',\n lightOrange: 'f2e7daf7d5baf9c499fab184fa9c73f68967ef7860e8645bde515bd43d5b',\n lightTealBlue: 'e3e9e0c0dccf9aceca7abfc859afc0389fb9328dad2f7ca0276b95255988',\n\n darkBlue: '3232322d46681a5c930074af008cbf05a7ce25c0dd38daed50f3faffffff',\n darkGold: '3c3c3c584b37725e348c7631ae8b2bcfa424ecc31ef9de30fff184ffffff',\n darkGreen: '3a3a3a215748006f4d048942489e4276b340a6c63dd2d836ffeb2cffffaa',\n darkMulti: '3737371f5287197d8c29a86995ce3fffe800ffffff',\n darkRed: '3434347036339e3c38cc4037e75d1eec8620eeab29f0ce32ffeb2c'\n};\n\nexport const discrete = {\n category10: '1f77b4ff7f0e2ca02cd627289467bd8c564be377c27f7f7fbcbd2217becf',\n category20: '1f77b4aec7e8ff7f0effbb782ca02c98df8ad62728ff98969467bdc5b0d58c564bc49c94e377c2f7b6d27f7f7fc7c7c7bcbd22dbdb8d17becf9edae5',\n category20b: '393b795254a36b6ecf9c9ede6379398ca252b5cf6bcedb9c8c6d31bd9e39e7ba52e7cb94843c39ad494ad6616be7969c7b4173a55194ce6dbdde9ed6',\n category20c: '3182bd6baed69ecae1c6dbefe6550dfd8d3cfdae6bfdd0a231a35474c476a1d99bc7e9c0756bb19e9ac8bcbddcdadaeb636363969696bdbdbdd9d9d9',\n tableau10: '4c78a8f58518e4575672b7b254a24beeca3bb279a2ff9da69d755dbab0ac',\n tableau20: '4c78a89ecae9f58518ffbf7954a24b88d27ab79a20f2cf5b43989483bcb6e45756ff9d9879706ebab0acd67195fcbfd2b279a2d6a5c99e765fd8b5a5',\n accent: '7fc97fbeaed4fdc086ffff99386cb0f0027fbf5b17666666',\n dark2: '1b9e77d95f027570b3e7298a66a61ee6ab02a6761d666666',\n paired: 'a6cee31f78b4b2df8a33a02cfb9a99e31a1cfdbf6fff7f00cab2d66a3d9affff99b15928',\n pastel1: 'fbb4aeb3cde3ccebc5decbe4fed9a6ffffcce5d8bdfddaecf2f2f2',\n pastel2: 'b3e2cdfdcdaccbd5e8f4cae4e6f5c9fff2aef1e2cccccccc',\n set1: 'e41a1c377eb84daf4a984ea3ff7f00ffff33a65628f781bf999999',\n set2: '66c2a5fc8d628da0cbe78ac3a6d854ffd92fe5c494b3b3b3',\n set3: '8dd3c7ffffb3bebadafb807280b1d3fdb462b3de69fccde5d9d9d9bc80bdccebc5ffed6f'\n};\n","import {discrete, continuous} from './palettes';\nimport {interpolateColors} from './interpolate';\n\nfunction colors(palette) {\n var n = palette.length / 6 | 0, c = new Array(n), i = 0;\n while (i < n) c[i] = '#' + palette.slice(i * 6, ++i * 6);\n return c;\n}\n\nfunction apply(_, f) {\n for (let k in _) scheme(k, f(_[k]));\n}\n\nconst schemes = {};\napply(discrete, colors);\napply(continuous, _ => interpolateColors(colors(_)));\n\nexport function scheme(name, scheme) {\n name = name && name.toLowerCase();\n if (arguments.length > 1) {\n schemes[name] = scheme;\n return this;\n } else {\n return schemes[name];\n }\n}\n","import {isLogarithmic, timeInterval, Time} from 'vega-scale';\nimport {error, isNumber, isObject, isString, peek, span} from 'vega-util';\nimport {timeFormat} from 'd3-time-format';\nimport {\n format as numberFormat,\n formatSpecifier\n} from 'd3-format';\n\n/**\n * Determine the tick count or interval function.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} count - The desired tick count or interval specifier.\n * @param {number} minStep - The desired minimum step between tick values.\n * @return {*} - The tick count or interval function.\n */\nexport function tickCount(scale, count, minStep) {\n var step;\n\n if (isNumber(count) && minStep != null) {\n count = Math.min(count, ~~(span(scale.domain()) / minStep) || 1);\n }\n\n if (isObject(count)) {\n step = count.step;\n count = count.interval;\n }\n\n if (isString(count)) {\n count = timeInterval(count, scale.type)\n || error('Only time and utc scales accept interval strings.');\n if (step) count = count.every(step);\n }\n\n return count;\n}\n\n/**\n * Filter a set of candidate tick values, ensuring that only tick values\n * that lie within the scale range are included.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {Array<*>} ticks - The candidate tick values.\n * @param {*} count - The tick count or interval function.\n * @return {Array<*>} - The filtered tick values.\n */\nexport function validTicks(scale, ticks, count) {\n var range = scale.range(),\n lo = Math.floor(range[0]),\n hi = Math.ceil(peek(range));\n\n if (lo > hi) {\n range = hi;\n hi = lo;\n lo = range;\n }\n\n ticks = ticks.filter(function(v) {\n v = scale(v);\n return lo <= v && v <= hi;\n });\n\n if (count > 0 && ticks.length > 1) {\n var endpoints = [ticks[0], peek(ticks)];\n while (ticks.length > count && ticks.length >= 3) {\n ticks = ticks.filter(function(_, i) { return !(i % 2); });\n }\n if (ticks.length < 3) {\n ticks = endpoints;\n }\n }\n\n return ticks;\n}\n\n/**\n * Generate tick values for the given scale and approximate tick count or\n * interval value. If the scale has a 'ticks' method, it will be used to\n * generate the ticks, with the count argument passed as a parameter. If the\n * scale lacks a 'ticks' method, the full scale domain will be returned.\n * @param {Scale} scale - The scale for which to generate tick values.\n * @param {*} [count] - The approximate number of desired ticks.\n * @return {Array<*>} - The generated tick values.\n */\nexport function tickValues(scale, count) {\n return scale.bins ? validTicks(scale, binValues(scale.bins, count))\n : scale.ticks ? scale.ticks(count)\n : scale.domain();\n}\n\n/**\n * Generate tick values for an array of bin values.\n * @param {Array<*>} bins - An array of bin boundaries.\n * @param {Number} [count] - The approximate number of desired ticks.\n * @return {Array<*>} - The generated tick values.\n */\nfunction binValues(bins, count) {\n var n = bins.length,\n stride = ~~(n / (count || n));\n\n return stride < 2\n ? bins.slice()\n : bins.filter(function(x, i) { return !(i % stride); });\n}\n\n/**\n * Generate a label format function for a scale. If the scale has a\n * 'tickFormat' method, it will be used to generate the formatter, with the\n * count and specifier arguments passed as parameters. If the scale lacks a\n * 'tickFormat' method, the returned formatter performs simple string coercion.\n * If the input scale is a logarithmic scale and the format specifier does not\n * indicate a desired decimal precision, a special variable precision formatter\n * that automatically trims trailing zeroes will be generated.\n * @param {Scale} scale - The scale for which to generate the label formatter.\n * @param {*} [count] - The approximate number of desired ticks.\n * @param {string} [specifier] - The format specifier. Must be a legal d3\n * specifier string (see https://github.com/d3/d3-format#formatSpecifier).\n * @return {function(*):string} - The generated label formatter.\n */\nexport function tickFormat(scale, count, specifier, formatType) {\n var format = scale.tickFormat ? scale.tickFormat(count, specifier)\n : specifier && formatType === Time ? timeFormat(specifier)\n : specifier ? numberFormat(specifier)\n : String;\n\n if (isLogarithmic(scale.type)) {\n var logfmt = variablePrecision(specifier);\n format = scale.bins ? logfmt : filter(format, logfmt);\n }\n\n return format;\n}\n\nfunction filter(sourceFormat, targetFormat) {\n return function(_) {\n return sourceFormat(_) ? targetFormat(_) : '';\n };\n}\n\nfunction variablePrecision(specifier) {\n var s = formatSpecifier(specifier || ',');\n\n if (s.precision == null) {\n s.precision = 12;\n switch (s.type) {\n case '%': s.precision -= 2; break;\n case 'e': s.precision -= 1; break;\n }\n return trimZeroes(\n numberFormat(s), // number format\n numberFormat('.1f')(1)[1] // decimal point character\n );\n } else {\n return numberFormat(s);\n }\n}\n\nfunction trimZeroes(format, decimalChar) {\n return function(x) {\n var str = format(x),\n dec = str.indexOf(decimalChar),\n idx, end;\n\n if (dec < 0) return str;\n\n idx = rightmostDigit(str, dec);\n end = idx < str.length ? str.slice(idx) : '';\n while (--idx > dec) if (str[idx] !== '0') { ++idx; break; }\n\n return str.slice(0, idx) + end;\n };\n}\n\nfunction rightmostDigit(str, dec) {\n var i = str.lastIndexOf('e'), c;\n if (i > 0) return i;\n for (i=str.length; --i > dec;) {\n c = str.charCodeAt(i);\n if (c >= 48 && c <= 57) return i + 1; // is digit\n }\n}\n","import {tickCount, tickFormat, tickValues, validTicks} from './ticks';\nimport {Transform, ingest} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Generates axis ticks for visualizing a spatial scale.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Scale} params.scale - The scale to generate ticks for.\n * @param {*} [params.count=10] - The approximate number of ticks, or\n * desired tick interval, to use.\n * @param {Array<*>} [params.values] - The exact tick values to use.\n * These must be legal domain values for the provided scale.\n * If provided, the count argument is ignored.\n * @param {function(*):string} [params.formatSpecifier] - A format specifier\n * to use in conjunction with scale.tickFormat. Legal values are\n * any valid d3 4.0 format specifier.\n * @param {function(*):string} [params.format] - The format function to use.\n * If provided, the formatSpecifier argument is ignored.\n */\nexport default function AxisTicks(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(AxisTicks, Transform);\n\nprototype.transform = function(_, pulse) {\n if (this.value && !_.modified()) {\n return pulse.StopPropagation;\n }\n\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n ticks = this.value,\n scale = _.scale,\n tally = _.count == null ? (_.values ? _.values.length : 10) : _.count,\n count = tickCount(scale, tally, _.minstep),\n format = _.format || tickFormat(scale, count, _.formatSpecifier, _.formatType),\n values = _.values ? validTicks(scale, _.values, count) : tickValues(scale, count);\n\n if (ticks) out.rem = ticks;\n\n ticks = values.map(function(value, i) {\n return ingest({\n index: i / (values.length - 1 || 1),\n value: value,\n label: format(value)\n });\n });\n\n if (_.extra && ticks.length) {\n // add an extra tick pegged to the initial domain value\n // this is used to generate axes with 'binned' domains\n ticks.push(ingest({\n index: -1,\n extra: {value: ticks[0].value},\n label: ''\n }));\n }\n\n out.source = ticks;\n out.add = ticks;\n this.value = ticks;\n\n return out;\n};\n","import {Transform, ingest, tupleid} from 'vega-dataflow';\nimport {error, fastmap, inherits, isArray} from 'vega-util';\n\n/**\n * Joins a set of data elements against a set of visual items.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): object} [params.item] - An item generator function.\n * @param {function(object): *} [params.key] - The key field associating data and visual items.\n */\nexport default function DataJoin(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(DataJoin, Transform);\n\nfunction defaultItemCreate() {\n return ingest({});\n}\n\nfunction isExit(t) {\n return t.exit;\n}\n\nprototype.transform = function(_, pulse) {\n var df = pulse.dataflow,\n out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n item = _.item || defaultItemCreate,\n key = _.key || tupleid,\n map = this.value;\n\n // prevent transient (e.g., hover) requests from\n // cascading across marks derived from marks\n if (isArray(out.encode)) {\n out.encode = null;\n }\n\n if (map && (_.modified('key') || pulse.modified(key))) {\n error('DataJoin does not support modified key function or fields.');\n }\n\n if (!map) {\n pulse = pulse.addAll();\n this.value = map = fastmap().test(isExit);\n map.lookup = function(t) { return map.get(key(t)); };\n }\n\n pulse.visit(pulse.ADD, function(t) {\n var k = key(t),\n x = map.get(k);\n\n if (x) {\n if (x.exit) {\n map.empty--;\n out.add.push(x);\n } else {\n out.mod.push(x);\n }\n } else {\n map.set(k, (x = item(t)));\n out.add.push(x);\n }\n\n x.datum = t;\n x.exit = false;\n });\n\n pulse.visit(pulse.MOD, function(t) {\n var k = key(t),\n x = map.get(k);\n\n if (x) {\n x.datum = t;\n out.mod.push(x);\n }\n });\n\n pulse.visit(pulse.REM, function(t) {\n var k = key(t),\n x = map.get(k);\n\n if (t === x.datum && !x.exit) {\n out.rem.push(x);\n x.exit = true;\n ++map.empty;\n }\n });\n\n if (pulse.changed(pulse.ADD_MOD)) out.modifies('datum');\n\n if (_.clean && map.empty > df.cleanThreshold) df.runAfter(map.clean);\n\n return out;\n};\n","import {Transform} from 'vega-dataflow';\nimport {falsy, inherits, isArray} from 'vega-util';\n\n/**\n * Invokes encoding functions for visual items.\n * @constructor\n * @param {object} params - The parameters to the encoding functions. This\n * parameter object will be passed through to all invoked encoding functions.\n * @param {object} [params.mod=false] - Flag indicating if tuples in the input\n * mod set that are unmodified by encoders should be included in the output.\n * @param {object} param.encoders - The encoding functions\n * @param {function(object, object): boolean} [param.encoders.update] - Update encoding set\n * @param {function(object, object): boolean} [param.encoders.enter] - Enter encoding set\n * @param {function(object, object): boolean} [param.encoders.exit] - Exit encoding set\n */\nexport default function Encode(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(Encode, Transform);\n\nprototype.transform = function(_, pulse) {\n var out = pulse.fork(pulse.ADD_REM),\n fmod = _.mod || false,\n encoders = _.encoders,\n encode = pulse.encode;\n\n // if an array, the encode directive includes additional sets\n // that must be defined in order for the primary set to be invoked\n // e.g., only run the update set if the hover set is defined\n if (isArray(encode)) {\n if (out.changed() || encode.every(function(e) { return encoders[e]; })) {\n encode = encode[0];\n out.encode = null; // consume targeted encode directive\n } else {\n return pulse.StopPropagation;\n }\n }\n\n // marshall encoder functions\n var reenter = encode === 'enter',\n update = encoders.update || falsy,\n enter = encoders.enter || falsy,\n exit = encoders.exit || falsy,\n set = (encode && !reenter ? encoders[encode] : update) || falsy;\n\n if (pulse.changed(pulse.ADD)) {\n pulse.visit(pulse.ADD, function(t) { enter(t, _); update(t, _); });\n out.modifies(enter.output);\n out.modifies(update.output);\n if (set !== falsy && set !== update) {\n pulse.visit(pulse.ADD, function(t) { set(t, _); });\n out.modifies(set.output);\n }\n }\n\n if (pulse.changed(pulse.REM) && exit !== falsy) {\n pulse.visit(pulse.REM, function(t) { exit(t, _); });\n out.modifies(exit.output);\n }\n\n if (reenter || set !== falsy) {\n var flag = pulse.MOD | (_.modified() ? pulse.REFLOW : 0);\n if (reenter) {\n pulse.visit(flag, function(t) {\n var mod = enter(t, _) || fmod;\n if (set(t, _) || mod) out.mod.push(t);\n });\n if (out.mod.length) out.modifies(enter.output);\n } else {\n pulse.visit(flag, function(t) {\n if (set(t, _) || fmod) out.mod.push(t);\n });\n }\n if (out.mod.length) out.modifies(set.output);\n }\n\n return out.changed() ? out : pulse.StopPropagation;\n};\n","export var Symbols = 'symbol';\nexport var Discrete = 'discrete';\nexport var Gradient = 'gradient';\n","import {Symbols, Discrete} from './legend-types';\nimport {tickFormat, tickValues} from './ticks';\n\nimport {\n Quantile,\n Quantize,\n Threshold,\n tickFormat as spanFormat,\n Time\n} from 'vega-scale';\nimport {peek} from 'vega-util';\n\nconst symbols = {\n [Quantile]: 'quantiles',\n [Quantize]: 'thresholds',\n [Threshold]: 'domain'\n};\n\nconst formats = {\n [Quantile]: 'quantiles',\n [Quantize]: 'domain'\n};\n\nexport function labelValues(scale, count) {\n return scale.bins ? binValues(scale.bins)\n : symbols[scale.type] ? thresholdValues(scale[symbols[scale.type]]())\n : tickValues(scale, count);\n}\n\nexport function thresholdFormat(scale, specifier) {\n var _ = scale[formats[scale.type]](),\n n = _.length,\n d = n > 1 ? _[1] - _[0] : _[0], i;\n\n for (i=1; i} [params.values] - The exact tick values to use.\n * These must be legal domain values for the provided scale.\n * If provided, the count argument is ignored.\n * @param {string} [params.formatSpecifier] - A format specifier\n * to use in conjunction with scale.tickFormat. Legal values are\n * any valid D3 format specifier string.\n * @param {function(*):string} [params.format] - The format function to use.\n * If provided, the formatSpecifier argument is ignored.\n */\nexport default function LegendEntries(params) {\n Transform.call(this, [], params);\n}\n\nvar prototype = inherits(LegendEntries, Transform);\n\nprototype.transform = function(_, pulse) {\n if (this.value != null && !_.modified()) {\n return pulse.StopPropagation;\n }\n\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n items = this.value,\n type = _.type || Symbols,\n scale = _.scale,\n count = tickCount(scale, _.count == null ? 5 : _.count, _.minstep),\n format = _.format || labelFormat(scale, count, type, _.formatSpecifier, _.formatType),\n values = _.values || labelValues(scale, count, type),\n domain, fraction, size, offset;\n\n if (items) out.rem = items;\n\n if (type === Symbols) {\n if (isFunction(size = _.size)) {\n // if first value maps to size zero, remove from list (vega#717)\n if (!_.values && scale(values[0]) === 0) {\n values = values.slice(1);\n }\n // compute size offset for legend entries\n offset = values.reduce(function(max, value) {\n return Math.max(max, size(value, _));\n }, 0);\n } else {\n size = constant(offset = size || 8);\n }\n\n items = values.map(function(value, index) {\n return ingest({\n index: index,\n label: format(value, index, values),\n value: value,\n offset: offset,\n size: size(value, _)\n });\n });\n }\n\n else if (type === Gradient) {\n domain = scale.domain(),\n fraction = scaleFraction(scale, domain[0], peek(domain));\n\n // if automatic label generation produces 2 or fewer values,\n // use the domain end points instead (fixes vega/vega#1364)\n if (values.length < 3 && !_.values && domain[0] !== peek(domain)) {\n values = [domain[0], peek(domain)];\n }\n\n items = values.map(function(value, index) {\n return ingest({\n index: index,\n label: format(value, index, values),\n value: value,\n perc: fraction(value)\n });\n });\n }\n\n else {\n size = values.length - 1;\n fraction = labelFraction(scale);\n\n items = values.map(function(value, index) {\n return ingest({\n index: index,\n label: format(value, index, values),\n value: value,\n perc: index ? fraction(value) : 0,\n perc2: index === size ? 1 : fraction(values[index+1])\n });\n });\n }\n\n out.source = items;\n out.add = items;\n this.value = items;\n\n return out;\n};\n","import {Transform} from 'vega-dataflow';\nimport {error, fastmap, inherits} from 'vega-util';\n\nvar Paths = fastmap({\n 'line': line,\n 'line-radial': lineR,\n 'arc': arc,\n 'arc-radial': arcR,\n 'curve': curve,\n 'curve-radial': curveR,\n 'orthogonal-horizontal': orthoX,\n 'orthogonal-vertical': orthoY,\n 'orthogonal-radial': orthoR,\n 'diagonal-horizontal': diagonalX,\n 'diagonal-vertical': diagonalY,\n 'diagonal-radial': diagonalR\n});\n\nfunction sourceX(t) { return t.source.x; }\nfunction sourceY(t) { return t.source.y; }\nfunction targetX(t) { return t.target.x; }\nfunction targetY(t) { return t.target.y; }\n\n /**\n * Layout paths linking source and target elements.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nexport default function LinkPath(params) {\n Transform.call(this, {}, params);\n}\n\nLinkPath.Definition = {\n \"type\": \"LinkPath\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"sourceX\", \"type\": \"field\", \"default\": \"source.x\" },\n { \"name\": \"sourceY\", \"type\": \"field\", \"default\": \"source.y\" },\n { \"name\": \"targetX\", \"type\": \"field\", \"default\": \"target.x\" },\n { \"name\": \"targetY\", \"type\": \"field\", \"default\": \"target.y\" },\n { \"name\": \"orient\", \"type\": \"enum\", \"default\": \"vertical\",\n \"values\": [\"horizontal\", \"vertical\", \"radial\"] },\n { \"name\": \"shape\", \"type\": \"enum\", \"default\": \"line\",\n \"values\": [\"line\", \"arc\", \"curve\", \"diagonal\", \"orthogonal\"] },\n { \"name\": \"require\", \"type\": \"signal\" },\n { \"name\": \"as\", \"type\": \"string\", \"default\": \"path\" }\n ]\n};\n\nvar prototype = inherits(LinkPath, Transform);\n\nprototype.transform = function(_, pulse) {\n var sx = _.sourceX || sourceX,\n sy = _.sourceY || sourceY,\n tx = _.targetX || targetX,\n ty = _.targetY || targetY,\n as = _.as || 'path',\n orient = _.orient || 'vertical',\n shape = _.shape || 'line',\n path = Paths.get(shape + '-' + orient) || Paths.get(shape);\n\n if (!path) {\n error('LinkPath unsupported type: ' + _.shape\n + (_.orient ? '-' + _.orient : ''));\n }\n\n pulse.visit(pulse.SOURCE, function(t) {\n t[as] = path(sx(t), sy(t), tx(t), ty(t));\n });\n\n return pulse.reflow(_.modified()).modifies(as);\n};\n\n// -- Link Path Generation Methods -----\n\nfunction line(sx, sy, tx, ty) {\n return 'M' + sx + ',' + sy +\n 'L' + tx + ',' + ty;\n}\n\nfunction lineR(sa, sr, ta, tr) {\n return line(\n sr * Math.cos(sa), sr * Math.sin(sa),\n tr * Math.cos(ta), tr * Math.sin(ta)\n );\n}\n\nfunction arc(sx, sy, tx, ty) {\n var dx = tx - sx,\n dy = ty - sy,\n rr = Math.sqrt(dx * dx + dy * dy) / 2,\n ra = 180 * Math.atan2(dy, dx) / Math.PI;\n return 'M' + sx + ',' + sy +\n 'A' + rr + ',' + rr +\n ' ' + ra + ' 0 1' +\n ' ' + tx + ',' + ty;\n}\n\nfunction arcR(sa, sr, ta, tr) {\n return arc(\n sr * Math.cos(sa), sr * Math.sin(sa),\n tr * Math.cos(ta), tr * Math.sin(ta)\n );\n}\n\nfunction curve(sx, sy, tx, ty) {\n var dx = tx - sx,\n dy = ty - sy,\n ix = 0.2 * (dx + dy),\n iy = 0.2 * (dy - dx);\n return 'M' + sx + ',' + sy +\n 'C' + (sx+ix) + ',' + (sy+iy) +\n ' ' + (tx+iy) + ',' + (ty-ix) +\n ' ' + tx + ',' + ty;\n}\n\nfunction curveR(sa, sr, ta, tr) {\n return curve(\n sr * Math.cos(sa), sr * Math.sin(sa),\n tr * Math.cos(ta), tr * Math.sin(ta)\n );\n}\n\nfunction orthoX(sx, sy, tx, ty) {\n return 'M' + sx + ',' + sy +\n 'V' + ty + 'H' + tx;\n}\n\nfunction orthoY(sx, sy, tx, ty) {\n return 'M' + sx + ',' + sy +\n 'H' + tx + 'V' + ty;\n}\n\nfunction orthoR(sa, sr, ta, tr) {\n var sc = Math.cos(sa),\n ss = Math.sin(sa),\n tc = Math.cos(ta),\n ts = Math.sin(ta),\n sf = Math.abs(ta - sa) > Math.PI ? ta <= sa : ta > sa;\n return 'M' + (sr*sc) + ',' + (sr*ss) +\n 'A' + sr + ',' + sr + ' 0 0,' + (sf?1:0) +\n ' ' + (sr*tc) + ',' + (sr*ts) +\n 'L' + (tr*tc) + ',' + (tr*ts);\n}\n\nfunction diagonalX(sx, sy, tx, ty) {\n var m = (sx + tx) / 2;\n return 'M' + sx + ',' + sy +\n 'C' + m + ',' + sy +\n ' ' + m + ',' + ty +\n ' ' + tx + ',' + ty;\n}\n\nfunction diagonalY(sx, sy, tx, ty) {\n var m = (sy + ty) / 2;\n return 'M' + sx + ',' + sy +\n 'C' + sx + ',' + m +\n ' ' + tx + ',' + m +\n ' ' + tx + ',' + ty;\n}\n\nfunction diagonalR(sa, sr, ta, tr) {\n var sc = Math.cos(sa),\n ss = Math.sin(sa),\n tc = Math.cos(ta),\n ts = Math.sin(ta),\n mr = (sr + tr) / 2;\n return 'M' + (sr*sc) + ',' + (sr*ss) +\n 'C' + (mr*sc) + ',' + (mr*ss) +\n ' ' + (mr*tc) + ',' + (mr*ts) +\n ' ' + (tr*tc) + ',' + (tr*ts);\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","export default function sum(values, valueof) {\n let sum = 0;\n if (valueof === undefined) {\n for (let value of values) {\n if (value = +value) {\n sum += value;\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if (value = +valueof(value, ++index, values)) {\n sum += value;\n }\n }\n }\n return sum;\n}\n","import {Transform} from 'vega-dataflow';\nimport {inherits, one} from 'vega-util';\nimport {range, sum} from 'd3-array';\n\n/**\n * Pie and donut chart layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to size pie segments.\n * @param {number} [params.startAngle=0] - The start angle (in radians) of the layout.\n * @param {number} [params.endAngle=2π] - The end angle (in radians) of the layout.\n * @param {boolean} [params.sort] - Boolean flag for sorting sectors by value.\n */\nexport default function Pie(params) {\n Transform.call(this, null, params);\n}\n\nPie.Definition = {\n \"type\": \"Pie\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"field\", \"type\": \"field\" },\n { \"name\": \"startAngle\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"endAngle\", \"type\": \"number\", \"default\": 6.283185307179586 },\n { \"name\": \"sort\", \"type\": \"boolean\", \"default\": false },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": 2, \"default\": [\"startAngle\", \"endAngle\"] }\n ]\n};\n\nvar prototype = inherits(Pie, Transform);\n\nprototype.transform = function(_, pulse) {\n var as = _.as || ['startAngle', 'endAngle'],\n startAngle = as[0],\n endAngle = as[1],\n field = _.field || one,\n start = _.startAngle || 0,\n stop = _.endAngle != null ? _.endAngle : 2 * Math.PI,\n data = pulse.source,\n values = data.map(field),\n n = values.length,\n a = start,\n k = (stop - start) / sum(values),\n index = range(n),\n i, t, v;\n\n if (_.sort) {\n index.sort(function(a, b) {\n return values[a] - values[b];\n });\n }\n\n for (i=0; i -1) return raw;\n\n var domain = _.domain,\n type = scale.type,\n zero = _.zero || (_.zero === undefined && includeZero(scale)),\n n, mid;\n\n if (!domain) return 0;\n\n // adjust continuous domain for minimum pixel padding\n if (includePad(type) && _.padding && domain[0] !== peek(domain)) {\n domain = padDomain(type, domain, _.range, _.padding, _.exponent, _.constant);\n }\n\n // adjust domain based on zero, min, max settings\n if (zero || _.domainMin != null || _.domainMax != null || _.domainMid != null) {\n n = ((domain = domain.slice()).length - 1) || 1;\n if (zero) {\n if (domain[0] > 0) domain[0] = 0;\n if (domain[n] < 0) domain[n] = 0;\n }\n if (_.domainMin != null) domain[0] = _.domainMin;\n if (_.domainMax != null) domain[n] = _.domainMax;\n\n if (_.domainMid != null) {\n mid = _.domainMid;\n if (mid < domain[0] || mid > domain[n]) {\n df.warn('Scale domainMid exceeds domain min or max.', mid);\n }\n domain.splice(n, 0, mid);\n }\n }\n\n // set the scale domain\n scale.domain(domainCheck(type, domain, df));\n\n // if ordinal scale domain is defined, prevent implicit\n // domain construction as side-effect of scale lookup\n if (type === Ordinal) {\n scale.unknown(_.domainImplicit ? scaleImplicit : undefined);\n }\n\n // perform 'nice' adjustment as requested\n if (_.nice && scale.nice) {\n scale.nice((_.nice !== true && tickCount(scale, _.nice)) || null);\n }\n\n // return the cardinality of the domain\n return domain.length;\n}\n\nfunction rawDomain(scale, raw, df) {\n if (raw) {\n scale.domain(domainCheck(scale.type, raw, df));\n return raw.length;\n } else {\n return -1;\n }\n}\n\nfunction padDomain(type, domain, range, pad, exponent, constant) {\n var span = Math.abs(peek(range) - range[0]),\n frac = span / (span - 2 * pad),\n d = type === Log ? zoomLog(domain, null, frac)\n : type === Sqrt ? zoomPow(domain, null, frac, 0.5)\n : type === Pow ? zoomPow(domain, null, frac, exponent || 1)\n : type === Symlog ? zoomSymlog(domain, null, frac, constant || 1)\n : zoomLinear(domain, null, frac);\n\n domain = domain.slice();\n domain[0] = d[0];\n domain[domain.length-1] = d[1];\n return domain;\n}\n\nfunction domainCheck(type, domain, df) {\n if (isLogarithmic(type)) {\n // sum signs of domain values\n // if all pos or all neg, abs(sum) === domain.length\n var s = Math.abs(domain.reduce(function(s, v) {\n return s + (v < 0 ? -1 : v > 0 ? 1 : 0);\n }, 0));\n\n if (s !== domain.length) {\n df.warn('Log scale domain includes zero: ' + stringValue(domain));\n }\n }\n return domain;\n}\n\nfunction configureBins(scale, _, count) {\n let bins = _.bins;\n\n if (bins && !isArray(bins)) {\n // generate bin boundary array\n const domain = (bins.start == null || bins.stop == null) && scale.domain(),\n start = bins.start == null ? domain[0] : bins.start,\n stop = bins.stop == null ? peek(domain) : bins.stop,\n step = bins.step;\n\n if (!step) error('Scale bins parameter missing step property.');\n bins = sequence(start, stop + step, step);\n }\n\n if (bins) {\n // assign bin boundaries to scale instance\n scale.bins = bins;\n } else if (scale.bins) {\n // no current bins, remove bins if previously set\n delete scale.bins;\n }\n\n // special handling for bin-ordinal scales\n if (scale.type === BinOrdinal) {\n if (!bins) {\n // the domain specifies the bins\n scale.bins = scale.domain();\n } else if (!_.domain && !_.domainRaw) {\n // the bins specify the domain\n scale.domain(bins);\n count = bins.length;\n }\n }\n\n // return domain cardinality\n return count;\n}\n\nfunction configureRange(scale, _, count) {\n var round = _.round || false,\n range = _.range;\n\n // if range step specified, calculate full range extent\n if (_.rangeStep != null) {\n range = configureRangeStep(scale.type, _, count);\n }\n\n // else if a range scheme is defined, use that\n else if (_.scheme) {\n range = configureScheme(scale.type, _, count);\n if (isFunction(range)) return scale.interpolator(range);\n }\n\n // given a range array for an interpolating scale, convert to interpolator\n else if (range && isInterpolating(scale.type)) {\n return scale.interpolator(\n interpolateColors(flip(range, _.reverse), _.interpolate, _.interpolateGamma)\n );\n }\n\n // configure rounding / interpolation\n if (range && _.interpolate && scale.interpolate) {\n scale.interpolate(getInterpolate(_.interpolate, _.interpolateGamma));\n } else if (isFunction(scale.round)) {\n scale.round(round);\n } else if (isFunction(scale.rangeRound)) {\n scale.interpolate(round ? interpolateRound : interpolate);\n }\n\n if (range) scale.range(flip(range, _.reverse));\n}\n\nfunction configureRangeStep(type, _, count) {\n if (type !== Band && type !== Point) {\n error('Only band and point scales support rangeStep.');\n }\n\n // calculate full range based on requested step size and padding\n var outer = (_.paddingOuter != null ? _.paddingOuter : _.padding) || 0,\n inner = type === Point ? 1\n : ((_.paddingInner != null ? _.paddingInner : _.padding) || 0);\n return [0, _.rangeStep * bandSpace(count, inner, outer)];\n}\n\nfunction configureScheme(type, _, count) {\n var extent = _.schemeExtent,\n name, scheme;\n\n if (isArray(_.scheme)) {\n scheme = interpolateColors(_.scheme, _.interpolate, _.interpolateGamma);\n } else {\n name = _.scheme.toLowerCase();\n scheme = getScheme(name);\n if (!scheme) error('Unrecognized scheme name: ' + _.scheme);\n }\n\n // determine size for potential discrete range\n count = (type === Threshold) ? count + 1\n : (type === BinOrdinal) ? count - 1\n : (type === Quantile || type === Quantize) ? (+_.schemeCount || DEFAULT_COUNT)\n : count;\n\n // adjust and/or quantize scheme as appropriate\n return isInterpolating(type) ? adjustScheme(scheme, extent, _.reverse)\n : isFunction(scheme) ? quantizeInterpolator(adjustScheme(scheme, extent), count)\n : type === Ordinal ? scheme : scheme.slice(0, count);\n}\n\nfunction adjustScheme(scheme, extent, reverse) {\n return (isFunction(scheme) && (extent || reverse))\n ? interpolateRange(scheme, flip(extent || [0, 1], reverse))\n : scheme;\n}\n\nfunction flip(array, reverse) {\n return reverse ? array.slice().reverse() : array;\n}\n\n","import {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Sorts scenegraph items in the pulse source array.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(*,*): number} [params.sort] - A comparator\n * function for sorting tuples.\n */\nexport default function SortItems(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(SortItems, Transform);\n\nprototype.transform = function(_, pulse) {\n var mod = _.modified('sort')\n || pulse.changed(pulse.ADD)\n || pulse.modified(_.sort.fields)\n || pulse.modified('datum');\n\n if (mod) pulse.source.sort(_.sort);\n\n this.modified(mod);\n return pulse;\n};\n","import {Transform} from 'vega-dataflow';\nimport {inherits, one} from 'vega-util';\n\nvar Zero = 'zero',\n Center = 'center',\n Normalize = 'normalize',\n DefOutput = ['y0', 'y1'];\n\n/**\n * Stack layout for visualization elements.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(object): *} params.field - The value field to stack.\n * @param {Array} [params.groupby] - An array of accessors to groupby.\n * @param {function(object,object): number} [params.sort] - A comparator for stack sorting.\n * @param {string} [offset='zero'] - One of 'zero', 'center', 'normalize'.\n */\nexport default function Stack(params) {\n Transform.call(this, null, params);\n}\n\nStack.Definition = {\n \"type\": \"Stack\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"field\", \"type\": \"field\" },\n { \"name\": \"groupby\", \"type\": \"field\", \"array\": true },\n { \"name\": \"sort\", \"type\": \"compare\" },\n { \"name\": \"offset\", \"type\": \"enum\", \"default\": Zero, \"values\": [Zero, Center, Normalize] },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": 2, \"default\": DefOutput }\n ]\n};\n\nvar prototype = inherits(Stack, Transform);\n\nprototype.transform = function(_, pulse) {\n var as = _.as || DefOutput,\n y0 = as[0],\n y1 = as[1],\n field = _.field || one,\n stack = _.offset === Center ? stackCenter\n : _.offset === Normalize ? stackNormalize\n : stackZero,\n groups, i, n, max;\n\n // partition, sum, and sort the stack groups\n groups = partition(pulse.source, _.groupby, _.sort, field);\n\n // compute stack layouts per group\n for (i=0, n=groups.length, max=groups.max; i max) max = s;\n if (sort) g.sort(sort);\n }\n groups.max = max;\n\n return groups;\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","export default function(values, valueof) {\n let min;\n let max;\n if (valueof === undefined) {\n for (const value of values) {\n if (value != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n } else {\n let index = -1;\n for (let value of values) {\n if ((value = valueof(value, ++index, values)) != null) {\n if (min === undefined) {\n if (value >= value) min = max = value;\n } else {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n return [min, max];\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","export default function(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n min,\n max;\n\n if (valueof == null) {\n while (++i < n) { // Find the first comparable value.\n if ((value = values[i]) != null && value >= value) {\n min = max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = values[i]) != null) {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n }\n\n else {\n while (++i < n) { // Find the first comparable value.\n if ((value = valueof(values[i], i, values)) != null && value >= value) {\n min = max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = valueof(values[i], i, values)) != null) {\n if (min > value) min = value;\n if (max < value) max = value;\n }\n }\n }\n }\n }\n\n return [min, max];\n}\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","export default function(values) {\n return Math.ceil(Math.log(values.length) / Math.LN2) + 1;\n}\n","export default function(values, valueof) {\n var n = values.length,\n i = -1,\n value,\n max;\n\n if (valueof == null) {\n while (++i < n) { // Find the first comparable value.\n if ((value = values[i]) != null && value >= value) {\n max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = values[i]) != null && value > max) {\n max = value;\n }\n }\n }\n }\n }\n\n else {\n while (++i < n) { // Find the first comparable value.\n if ((value = valueof(values[i], i, values)) != null && value >= value) {\n max = value;\n while (++i < n) { // Compare the remaining values.\n if ((value = valueof(values[i], i, values)) != null && value > max) {\n max = value;\n }\n }\n }\n }\n }\n\n return max;\n}\n","var array = Array.prototype;\n\nexport var slice = array.slice;\n","export default function(a, b) {\n return a - b;\n}\n","export default function(ring) {\n var i = 0, n = ring.length, area = ring[n - 1][1] * ring[0][0] - ring[n - 1][0] * ring[0][1];\n while (++i < n) area += ring[i - 1][1] * ring[i][0] - ring[i - 1][0] * ring[i][1];\n return area;\n}\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function(ring, hole) {\n var i = -1, n = hole.length, c;\n while (++i < n) if (c = ringContains(ring, hole[i])) return c;\n return 0;\n}\n\nfunction ringContains(ring, point) {\n var x = point[0], y = point[1], contains = -1;\n for (var i = 0, n = ring.length, j = n - 1; i < n; j = i++) {\n var pi = ring[i], xi = pi[0], yi = pi[1], pj = ring[j], xj = pj[0], yj = pj[1];\n if (segmentContains(pi, pj, point)) return 0;\n if (((yi > y) !== (yj > y)) && ((x < (xj - xi) * (y - yi) / (yj - yi) + xi))) contains = -contains;\n }\n return contains;\n}\n\nfunction segmentContains(a, b, c) {\n var i; return collinear(a, b, c) && within(a[i = +(a[0] === b[0])], c[i], b[i]);\n}\n\nfunction collinear(a, b, c) {\n return (b[0] - a[0]) * (c[1] - a[1]) === (c[0] - a[0]) * (b[1] - a[1]);\n}\n\nfunction within(p, q, r) {\n return p <= q && q <= r || r <= q && q <= p;\n}\n","export default function() {}\n","import {extent, thresholdSturges, tickStep, range} from \"d3-array\";\nimport {slice} from \"./array\";\nimport ascending from \"./ascending\";\nimport area from \"./area\";\nimport constant from \"./constant\";\nimport contains from \"./contains\";\nimport noop from \"./noop\";\n\nvar cases = [\n [],\n [[[1.0, 1.5], [0.5, 1.0]]],\n [[[1.5, 1.0], [1.0, 1.5]]],\n [[[1.5, 1.0], [0.5, 1.0]]],\n [[[1.0, 0.5], [1.5, 1.0]]],\n [[[1.0, 1.5], [0.5, 1.0]], [[1.0, 0.5], [1.5, 1.0]]],\n [[[1.0, 0.5], [1.0, 1.5]]],\n [[[1.0, 0.5], [0.5, 1.0]]],\n [[[0.5, 1.0], [1.0, 0.5]]],\n [[[1.0, 1.5], [1.0, 0.5]]],\n [[[0.5, 1.0], [1.0, 0.5]], [[1.5, 1.0], [1.0, 1.5]]],\n [[[1.5, 1.0], [1.0, 0.5]]],\n [[[0.5, 1.0], [1.5, 1.0]]],\n [[[1.0, 1.5], [1.5, 1.0]]],\n [[[0.5, 1.0], [1.0, 1.5]]],\n []\n];\n\nexport default function() {\n var dx = 1,\n dy = 1,\n threshold = thresholdSturges,\n smooth = smoothLinear;\n\n function contours(values) {\n var tz = threshold(values);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n var domain = extent(values), start = domain[0], stop = domain[1];\n tz = tickStep(start, stop, tz);\n tz = range(Math.floor(start / tz) * tz, Math.floor(stop / tz) * tz, tz);\n } else {\n tz = tz.slice().sort(ascending);\n }\n\n return tz.map(function(value) {\n return contour(values, value);\n });\n }\n\n // Accumulate, smooth contour rings, assign holes to exterior rings.\n // Based on https://github.com/mbostock/shapefile/blob/v0.6.2/shp/polygon.js\n function contour(values, value) {\n var polygons = [],\n holes = [];\n\n isorings(values, value, function(ring) {\n smooth(ring, values, value);\n if (area(ring) > 0) polygons.push([ring]);\n else holes.push(ring);\n });\n\n holes.forEach(function(hole) {\n for (var i = 0, n = polygons.length, polygon; i < n; ++i) {\n if (contains((polygon = polygons[i])[0], hole) !== -1) {\n polygon.push(hole);\n return;\n }\n }\n });\n\n return {\n type: \"MultiPolygon\",\n value: value,\n coordinates: polygons\n };\n }\n\n // Marching squares with isolines stitched into rings.\n // Based on https://github.com/topojson/topojson-client/blob/v3.0.0/src/stitch.js\n function isorings(values, value, callback) {\n var fragmentByStart = new Array,\n fragmentByEnd = new Array,\n x, y, t0, t1, t2, t3;\n\n // Special case for the first row (y = -1, t2 = t3 = 0).\n x = y = -1;\n t1 = values[0] >= value;\n cases[t1 << 1].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[x + 1] >= value;\n cases[t0 | t1 << 1].forEach(stitch);\n }\n cases[t1 << 0].forEach(stitch);\n\n // General case for the intermediate rows.\n while (++y < dy - 1) {\n x = -1;\n t1 = values[y * dx + dx] >= value;\n t2 = values[y * dx] >= value;\n cases[t1 << 1 | t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t0 = t1, t1 = values[y * dx + dx + x + 1] >= value;\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t0 | t1 << 1 | t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t1 | t2 << 3].forEach(stitch);\n }\n\n // Special case for the last row (y = dy - 1, t0 = t1 = 0).\n x = -1;\n t2 = values[y * dx] >= value;\n cases[t2 << 2].forEach(stitch);\n while (++x < dx - 1) {\n t3 = t2, t2 = values[y * dx + x + 1] >= value;\n cases[t2 << 2 | t3 << 3].forEach(stitch);\n }\n cases[t2 << 3].forEach(stitch);\n\n function stitch(line) {\n var start = [line[0][0] + x, line[0][1] + y],\n end = [line[1][0] + x, line[1][1] + y],\n startIndex = index(start),\n endIndex = index(end),\n f, g;\n if (f = fragmentByEnd[startIndex]) {\n if (g = fragmentByStart[endIndex]) {\n delete fragmentByEnd[f.end];\n delete fragmentByStart[g.start];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[f.start] = fragmentByEnd[g.end] = {start: f.start, end: g.end, ring: f.ring.concat(g.ring)};\n }\n } else {\n delete fragmentByEnd[f.end];\n f.ring.push(end);\n fragmentByEnd[f.end = endIndex] = f;\n }\n } else if (f = fragmentByStart[endIndex]) {\n if (g = fragmentByEnd[startIndex]) {\n delete fragmentByStart[f.start];\n delete fragmentByEnd[g.end];\n if (f === g) {\n f.ring.push(end);\n callback(f.ring);\n } else {\n fragmentByStart[g.start] = fragmentByEnd[f.end] = {start: g.start, end: f.end, ring: g.ring.concat(f.ring)};\n }\n } else {\n delete fragmentByStart[f.start];\n f.ring.unshift(start);\n fragmentByStart[f.start = startIndex] = f;\n }\n } else {\n fragmentByStart[startIndex] = fragmentByEnd[endIndex] = {start: startIndex, end: endIndex, ring: [start, end]};\n }\n }\n }\n\n function index(point) {\n return point[0] * 2 + point[1] * (dx + 1) * 4;\n }\n\n function smoothLinear(ring, values, value) {\n ring.forEach(function(point) {\n var x = point[0],\n y = point[1],\n xt = x | 0,\n yt = y | 0,\n v0,\n v1 = values[yt * dx + xt];\n if (x > 0 && x < dx && xt === x) {\n v0 = values[yt * dx + xt - 1];\n point[0] = x + (value - v0) / (v1 - v0) - 0.5;\n }\n if (y > 0 && y < dy && yt === y) {\n v0 = values[(yt - 1) * dx + xt];\n point[1] = y + (value - v0) / (v1 - v0) - 0.5;\n }\n });\n }\n\n contours.contour = contour;\n\n contours.size = function(_) {\n if (!arguments.length) return [dx, dy];\n var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n if (!(_0 > 0) || !(_1 > 0)) throw new Error(\"invalid size\");\n return dx = _0, dy = _1, contours;\n };\n\n contours.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), contours) : threshold;\n };\n\n contours.smooth = function(_) {\n return arguments.length ? (smooth = _ ? smoothLinear : noop, contours) : smooth === smoothLinear;\n };\n\n return contours;\n}\n","// TODO Optimize edge cases.\n// TODO Optimize index calculation.\n// TODO Optimize arguments.\nexport function blurX(source, target, r) {\n var n = source.width,\n m = source.height,\n w = (r << 1) + 1;\n for (var j = 0; j < m; ++j) {\n for (var i = 0, sr = 0; i < n + r; ++i) {\n if (i < n) {\n sr += source.data[i + j * n];\n }\n if (i >= r) {\n if (i >= w) {\n sr -= source.data[i - w + j * n];\n }\n target.data[i - r + j * n] = sr / Math.min(i + 1, n - 1 + w - i, w);\n }\n }\n }\n}\n\n// TODO Optimize edge cases.\n// TODO Optimize index calculation.\n// TODO Optimize arguments.\nexport function blurY(source, target, r) {\n var n = source.width,\n m = source.height,\n w = (r << 1) + 1;\n for (var i = 0; i < n; ++i) {\n for (var j = 0, sr = 0; j < m + r; ++j) {\n if (j < m) {\n sr += source.data[i + j * n];\n }\n if (j >= r) {\n if (j >= w) {\n sr -= source.data[i + (j - w) * n];\n }\n target.data[i + (j - r) * n] = sr / Math.min(j + 1, m - 1 + w - j, w);\n }\n }\n }\n}\n","import {max, range, tickStep} from \"d3-array\";\nimport {slice} from \"./array\";\nimport {blurX, blurY} from \"./blur\";\nimport constant from \"./constant\";\nimport contours from \"./contours\";\n\nfunction defaultX(d) {\n return d[0];\n}\n\nfunction defaultY(d) {\n return d[1];\n}\n\nfunction defaultWeight() {\n return 1;\n}\n\nexport default function() {\n var x = defaultX,\n y = defaultY,\n weight = defaultWeight,\n dx = 960,\n dy = 500,\n r = 20, // blur radius\n k = 2, // log2(grid cell size)\n o = r * 3, // grid offset, to pad for blur\n n = (dx + o * 2) >> k, // grid width\n m = (dy + o * 2) >> k, // grid height\n threshold = constant(20);\n\n function density(data) {\n var values0 = new Float32Array(n * m),\n values1 = new Float32Array(n * m);\n\n data.forEach(function(d, i, data) {\n var xi = (+x(d, i, data) + o) >> k,\n yi = (+y(d, i, data) + o) >> k,\n wi = +weight(d, i, data);\n if (xi >= 0 && xi < n && yi >= 0 && yi < m) {\n values0[xi + yi * n] += wi;\n }\n });\n\n // TODO Optimize.\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n blurX({width: n, height: m, data: values0}, {width: n, height: m, data: values1}, r >> k);\n blurY({width: n, height: m, data: values1}, {width: n, height: m, data: values0}, r >> k);\n\n var tz = threshold(values0);\n\n // Convert number of thresholds into uniform thresholds.\n if (!Array.isArray(tz)) {\n var stop = max(values0);\n tz = tickStep(0, stop, tz);\n tz = range(0, Math.floor(stop / tz) * tz, tz);\n tz.shift();\n }\n\n return contours()\n .thresholds(tz)\n .size([n, m])\n (values0)\n .map(transform);\n }\n\n function transform(geometry) {\n geometry.value *= Math.pow(2, -2 * k); // Density in points per square pixel.\n geometry.coordinates.forEach(transformPolygon);\n return geometry;\n }\n\n function transformPolygon(coordinates) {\n coordinates.forEach(transformRing);\n }\n\n function transformRing(coordinates) {\n coordinates.forEach(transformPoint);\n }\n\n // TODO Optimize.\n function transformPoint(coordinates) {\n coordinates[0] = coordinates[0] * Math.pow(2, k) - o;\n coordinates[1] = coordinates[1] * Math.pow(2, k) - o;\n }\n\n function resize() {\n o = r * 3;\n n = (dx + o * 2) >> k;\n m = (dy + o * 2) >> k;\n return density;\n }\n\n density.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), density) : x;\n };\n\n density.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), density) : y;\n };\n\n density.weight = function(_) {\n return arguments.length ? (weight = typeof _ === \"function\" ? _ : constant(+_), density) : weight;\n };\n\n density.size = function(_) {\n if (!arguments.length) return [dx, dy];\n var _0 = Math.ceil(_[0]), _1 = Math.ceil(_[1]);\n if (!(_0 >= 0) && !(_0 >= 0)) throw new Error(\"invalid size\");\n return dx = _0, dy = _1, resize();\n };\n\n density.cellSize = function(_) {\n if (!arguments.length) return 1 << k;\n if (!((_ = +_) >= 1)) throw new Error(\"invalid cell size\");\n return k = Math.floor(Math.log(_) / Math.LN2), resize();\n };\n\n density.thresholds = function(_) {\n return arguments.length ? (threshold = typeof _ === \"function\" ? _ : Array.isArray(_) ? constant(slice.call(_)) : constant(_), density) : threshold;\n };\n\n density.bandwidth = function(_) {\n if (!arguments.length) return Math.sqrt(r * (r + 1));\n if (!((_ = +_) >= 0)) throw new Error(\"invalid bandwidth\");\n return r = Math.round((Math.sqrt(4 * _ * _ + 1) - 1) / 2), resize();\n };\n\n return density;\n}\n","import {ingest, Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\nimport {extent} from 'd3-array';\nimport {contours, contourDensity} from 'd3-contour';\n\nvar CONTOUR_PARAMS = ['size', 'smooth'];\nvar DENSITY_PARAMS = ['x', 'y', 'weight', 'size', 'cellSize', 'bandwidth'];\n\n/**\n * Generate contours based on kernel-density estimation of point data.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.size - The dimensions [width, height] over which to compute contours.\n * If the values parameter is provided, this must be the dimensions of the input data.\n * If density estimation is performed, this is the output view dimensions in pixels.\n * @param {Array} [params.values] - An array of numeric values representing an\n * width x height grid of values over which to compute contours. If unspecified, this\n * transform will instead attempt to compute contours for the kernel density estimate\n * using values drawn from data tuples in the input pulse.\n * @param {function(object): number} [params.x] - The pixel x-coordinate accessor for density estimation.\n * @param {function(object): number} [params.y] - The pixel y-coordinate accessor for density estimation.\n * @param {function(object): number} [params.weight] - The data point weight accessor for density estimation.\n * @param {number} [params.cellSize] - Contour density calculation cell size.\n * @param {number} [params.bandwidth] - Kernel density estimation bandwidth.\n * @param {Array} [params.thresholds] - Contour threshold array. If\n * this parameter is set, the count and nice parameters will be ignored.\n * @param {number} [params.count] - The desired number of contours.\n * @param {boolean} [params.nice] - Boolean flag indicating if the contour\n * threshold values should be automatically aligned to \"nice\"\n * human-friendly values. Setting this flag may cause the number of\n * thresholds to deviate from the specified count.\n * @param {boolean} [params.smooth] - Boolean flag indicating if the contour\n * polygons should be smoothed using linear interpolation. The default is\n * true. The parameter is ignored when using density estimation.\n */\nexport default function Contour(params) {\n Transform.call(this, null, params);\n}\n\nContour.Definition = {\n \"type\": \"Contour\",\n \"metadata\": {\"generates\": true},\n \"params\": [\n { \"name\": \"size\", \"type\": \"number\", \"array\": true, \"length\": 2, \"required\": true },\n { \"name\": \"values\", \"type\": \"number\", \"array\": true },\n { \"name\": \"x\", \"type\": \"field\" },\n { \"name\": \"y\", \"type\": \"field\" },\n { \"name\": \"weight\", \"type\": \"field\" },\n { \"name\": \"cellSize\", \"type\": \"number\" },\n { \"name\": \"bandwidth\", \"type\": \"number\" },\n { \"name\": \"count\", \"type\": \"number\" },\n { \"name\": \"smooth\", \"type\": \"boolean\" },\n { \"name\": \"nice\", \"type\": \"boolean\", \"default\": false },\n { \"name\": \"thresholds\", \"type\": \"number\", \"array\": true }\n ]\n};\n\nvar prototype = inherits(Contour, Transform);\n\nprototype.transform = function(_, pulse) {\n if (this.value && !pulse.changed() && !_.modified())\n return pulse.StopPropagation;\n\n var out = pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS),\n count = _.count || 10,\n contour, params, values;\n\n if (_.values) {\n contour = contours();\n params = CONTOUR_PARAMS;\n values = _.values;\n } else {\n contour = contourDensity();\n params = DENSITY_PARAMS;\n values = pulse.materialize(pulse.SOURCE).source;\n }\n\n // set threshold parameter\n contour.thresholds(_.thresholds || (_.nice ? count : quantize(count)));\n\n // set all other parameters\n params.forEach(function(param) {\n if (_[param] != null) contour[param](_[param]);\n });\n\n if (this.value) out.rem = this.value;\n values = values && values.length ? contour(values).map(ingest) : [];\n this.value = out.source = out.add = values;\n\n return out;\n};\n\nfunction quantize(k) {\n return function(values) {\n var ex = extent(values), x0 = ex[0], dx = ex[1] - x0,\n t = [], i = 1;\n for (; i<=k; ++i) t.push(x0 + dx * i / (k + 1));\n return t;\n };\n}\n","export var Feature = 'Feature';\nexport var FeatureCollection = 'FeatureCollection';\nexport var MultiPoint = 'MultiPoint';\n","import {Feature, FeatureCollection, MultiPoint} from './constants';\nimport {Transform} from 'vega-dataflow';\nimport {accessorFields, inherits} from 'vega-util';\n\n/**\n * Consolidate an array of [longitude, latitude] points or GeoJSON features\n * into a combined GeoJSON object. This transform is particularly useful for\n * combining geo data for a Projection's fit argument. The resulting GeoJSON\n * data is available as this transform's value. Input pulses are unchanged.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} [params.fields] - A two-element array\n * of field accessors for the longitude and latitude values.\n * @param {function(object): *} params.geojson - A field accessor for\n * retrieving GeoJSON feature data.\n */\nexport default function GeoJSON(params) {\n Transform.call(this, null, params);\n}\n\nGeoJSON.Definition = {\n \"type\": \"GeoJSON\",\n \"metadata\": {},\n \"params\": [\n { \"name\": \"fields\", \"type\": \"field\", \"array\": true, \"length\": 2 },\n { \"name\": \"geojson\", \"type\": \"field\" },\n ]\n};\n\nvar prototype = inherits(GeoJSON, Transform);\n\nprototype.transform = function(_, pulse) {\n var features = this._features,\n points = this._points,\n fields = _.fields,\n lon = fields && fields[0],\n lat = fields && fields[1],\n geojson = _.geojson,\n flag = pulse.ADD,\n mod;\n\n mod = _.modified()\n || pulse.changed(pulse.REM)\n || pulse.modified(accessorFields(geojson))\n || (lon && (pulse.modified(accessorFields(lon))))\n || (lat && (pulse.modified(accessorFields(lat))));\n\n if (!this.value || mod) {\n flag = pulse.SOURCE;\n this._features = (features = []);\n this._points = (points = []);\n }\n\n if (geojson) {\n pulse.visit(flag, function(t) {\n features.push(geojson(t));\n });\n }\n\n if (lon && lat) {\n pulse.visit(flag, function(t) {\n var x = lon(t),\n y = lat(t);\n if (x != null && y != null && (x = +x) === x && (y = +y) === y) {\n points.push([x, y]);\n }\n });\n features = features.concat({\n type: Feature,\n geometry: {\n type: MultiPoint,\n coordinates: points\n }\n });\n }\n\n this.value = {\n type: FeatureCollection,\n features: features\n };\n};\n","// Adds floating point numbers with twice the normal precision.\n// Reference: J. R. Shewchuk, Adaptive Precision Floating-Point Arithmetic and\n// Fast Robust Geometric Predicates, Discrete & Computational Geometry 18(3)\n// 305–363 (1997).\n// Code adapted from GeographicLib by Charles F. F. Karney,\n// http://geographiclib.sourceforge.net/\n\nexport default function() {\n return new Adder;\n}\n\nfunction Adder() {\n this.reset();\n}\n\nAdder.prototype = {\n constructor: Adder,\n reset: function() {\n this.s = // rounded value\n this.t = 0; // exact error\n },\n add: function(y) {\n add(temp, y, this.t);\n add(this, temp.s, this.s);\n if (this.s) this.t += temp.t;\n else this.s = temp.t;\n },\n valueOf: function() {\n return this.s;\n }\n};\n\nvar temp = new Adder;\n\nfunction add(adder, a, b) {\n var x = adder.s = a + b,\n bv = x - a,\n av = x - bv;\n adder.t = (a - av) + (b - bv);\n}\n","export var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var pi = Math.PI;\nexport var halfPi = pi / 2;\nexport var quarterPi = pi / 4;\nexport var tau = pi * 2;\n\nexport var degrees = 180 / pi;\nexport var radians = pi / 180;\n\nexport var abs = Math.abs;\nexport var atan = Math.atan;\nexport var atan2 = Math.atan2;\nexport var cos = Math.cos;\nexport var ceil = Math.ceil;\nexport var exp = Math.exp;\nexport var floor = Math.floor;\nexport var log = Math.log;\nexport var pow = Math.pow;\nexport var sin = Math.sin;\nexport var sign = Math.sign || function(x) { return x > 0 ? 1 : x < 0 ? -1 : 0; };\nexport var sqrt = Math.sqrt;\nexport var tan = Math.tan;\n\nexport function acos(x) {\n return x > 1 ? 0 : x < -1 ? pi : Math.acos(x);\n}\n\nexport function asin(x) {\n return x > 1 ? halfPi : x < -1 ? -halfPi : Math.asin(x);\n}\n\nexport function haversin(x) {\n return (x = sin(x / 2)) * x;\n}\n","export default function noop() {}\n","function streamGeometry(geometry, stream) {\n if (geometry && streamGeometryType.hasOwnProperty(geometry.type)) {\n streamGeometryType[geometry.type](geometry, stream);\n }\n}\n\nvar streamObjectType = {\n Feature: function(object, stream) {\n streamGeometry(object.geometry, stream);\n },\n FeatureCollection: function(object, stream) {\n var features = object.features, i = -1, n = features.length;\n while (++i < n) streamGeometry(features[i].geometry, stream);\n }\n};\n\nvar streamGeometryType = {\n Sphere: function(object, stream) {\n stream.sphere();\n },\n Point: function(object, stream) {\n object = object.coordinates;\n stream.point(object[0], object[1], object[2]);\n },\n MultiPoint: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) object = coordinates[i], stream.point(object[0], object[1], object[2]);\n },\n LineString: function(object, stream) {\n streamLine(object.coordinates, stream, 0);\n },\n MultiLineString: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamLine(coordinates[i], stream, 0);\n },\n Polygon: function(object, stream) {\n streamPolygon(object.coordinates, stream);\n },\n MultiPolygon: function(object, stream) {\n var coordinates = object.coordinates, i = -1, n = coordinates.length;\n while (++i < n) streamPolygon(coordinates[i], stream);\n },\n GeometryCollection: function(object, stream) {\n var geometries = object.geometries, i = -1, n = geometries.length;\n while (++i < n) streamGeometry(geometries[i], stream);\n }\n};\n\nfunction streamLine(coordinates, stream, closed) {\n var i = -1, n = coordinates.length - closed, coordinate;\n stream.lineStart();\n while (++i < n) coordinate = coordinates[i], stream.point(coordinate[0], coordinate[1], coordinate[2]);\n stream.lineEnd();\n}\n\nfunction streamPolygon(coordinates, stream) {\n var i = -1, n = coordinates.length;\n stream.polygonStart();\n while (++i < n) streamLine(coordinates[i], stream, 1);\n stream.polygonEnd();\n}\n\nexport default function(object, stream) {\n if (object && streamObjectType.hasOwnProperty(object.type)) {\n streamObjectType[object.type](object, stream);\n } else {\n streamGeometry(object, stream);\n }\n}\n","import adder from \"./adder\";\nimport {atan2, cos, quarterPi, radians, sin, tau} from \"./math\";\nimport noop from \"./noop\";\nimport stream from \"./stream\";\n\nexport var areaRingSum = adder();\n\nvar areaSum = adder(),\n lambda00,\n phi00,\n lambda0,\n cosPhi0,\n sinPhi0;\n\nexport var areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaRingSum.reset();\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n var areaRing = +areaRingSum;\n areaSum.add(areaRing < 0 ? tau + areaRing : areaRing);\n this.lineStart = this.lineEnd = this.point = noop;\n },\n sphere: function() {\n areaSum.add(tau);\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaRingEnd() {\n areaPoint(lambda00, phi00);\n}\n\nfunction areaPointFirst(lambda, phi) {\n areaStream.point = areaPoint;\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n lambda0 = lambda, cosPhi0 = cos(phi = phi / 2 + quarterPi), sinPhi0 = sin(phi);\n}\n\nfunction areaPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n phi = phi / 2 + quarterPi; // half the angular distance from south pole\n\n // Spherical excess E for a spherical triangle with vertices: south pole,\n // previous point, current point. Uses a formula derived from Cagnoli’s\n // theorem. See Todhunter, Spherical Trig. (1871), Sec. 103, Eq. (2).\n var dLambda = lambda - lambda0,\n sdLambda = dLambda >= 0 ? 1 : -1,\n adLambda = sdLambda * dLambda,\n cosPhi = cos(phi),\n sinPhi = sin(phi),\n k = sinPhi0 * sinPhi,\n u = cosPhi0 * cosPhi + k * cos(adLambda),\n v = k * sdLambda * sin(adLambda);\n areaRingSum.add(atan2(v, u));\n\n // Advance the previous points.\n lambda0 = lambda, cosPhi0 = cosPhi, sinPhi0 = sinPhi;\n}\n\nexport default function(object) {\n areaSum.reset();\n stream(object, areaStream);\n return areaSum * 2;\n}\n","import {asin, atan2, cos, sin, sqrt} from \"./math\";\n\nexport function spherical(cartesian) {\n return [atan2(cartesian[1], cartesian[0]), asin(cartesian[2])];\n}\n\nexport function cartesian(spherical) {\n var lambda = spherical[0], phi = spherical[1], cosPhi = cos(phi);\n return [cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi)];\n}\n\nexport function cartesianDot(a, b) {\n return a[0] * b[0] + a[1] * b[1] + a[2] * b[2];\n}\n\nexport function cartesianCross(a, b) {\n return [a[1] * b[2] - a[2] * b[1], a[2] * b[0] - a[0] * b[2], a[0] * b[1] - a[1] * b[0]];\n}\n\n// TODO return a\nexport function cartesianAddInPlace(a, b) {\n a[0] += b[0], a[1] += b[1], a[2] += b[2];\n}\n\nexport function cartesianScale(vector, k) {\n return [vector[0] * k, vector[1] * k, vector[2] * k];\n}\n\n// TODO return d\nexport function cartesianNormalizeInPlace(d) {\n var l = sqrt(d[0] * d[0] + d[1] * d[1] + d[2] * d[2]);\n d[0] /= l, d[1] /= l, d[2] /= l;\n}\n","import adder from \"./adder\";\nimport {areaStream, areaRingSum} from \"./area\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace, spherical} from \"./cartesian\";\nimport {abs, degrees, epsilon, radians} from \"./math\";\nimport stream from \"./stream\";\n\nvar lambda0, phi0, lambda1, phi1, // bounds\n lambda2, // previous lambda-coordinate\n lambda00, phi00, // first point\n p0, // previous 3D point\n deltaSum = adder(),\n ranges,\n range;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: boundsLineStart,\n lineEnd: boundsLineEnd,\n polygonStart: function() {\n boundsStream.point = boundsRingPoint;\n boundsStream.lineStart = boundsRingStart;\n boundsStream.lineEnd = boundsRingEnd;\n deltaSum.reset();\n areaStream.polygonStart();\n },\n polygonEnd: function() {\n areaStream.polygonEnd();\n boundsStream.point = boundsPoint;\n boundsStream.lineStart = boundsLineStart;\n boundsStream.lineEnd = boundsLineEnd;\n if (areaRingSum < 0) lambda0 = -(lambda1 = 180), phi0 = -(phi1 = 90);\n else if (deltaSum > epsilon) phi1 = 90;\n else if (deltaSum < -epsilon) phi0 = -90;\n range[0] = lambda0, range[1] = lambda1;\n }\n};\n\nfunction boundsPoint(lambda, phi) {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n}\n\nfunction linePoint(lambda, phi) {\n var p = cartesian([lambda * radians, phi * radians]);\n if (p0) {\n var normal = cartesianCross(p0, p),\n equatorial = [normal[1], -normal[0], 0],\n inflection = cartesianCross(equatorial, normal);\n cartesianNormalizeInPlace(inflection);\n inflection = spherical(inflection);\n var delta = lambda - lambda2,\n sign = delta > 0 ? 1 : -1,\n lambdai = inflection[0] * degrees * sign,\n phii,\n antimeridian = abs(delta) > 180;\n if (antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = inflection[1] * degrees;\n if (phii > phi1) phi1 = phii;\n } else if (lambdai = (lambdai + 360) % 360 - 180, antimeridian ^ (sign * lambda2 < lambdai && lambdai < sign * lambda)) {\n phii = -inflection[1] * degrees;\n if (phii < phi0) phi0 = phii;\n } else {\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n }\n if (antimeridian) {\n if (lambda < lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n } else {\n if (lambda1 >= lambda0) {\n if (lambda < lambda0) lambda0 = lambda;\n if (lambda > lambda1) lambda1 = lambda;\n } else {\n if (lambda > lambda2) {\n if (angle(lambda0, lambda) > angle(lambda0, lambda1)) lambda1 = lambda;\n } else {\n if (angle(lambda, lambda1) > angle(lambda0, lambda1)) lambda0 = lambda;\n }\n }\n }\n } else {\n ranges.push(range = [lambda0 = lambda, lambda1 = lambda]);\n }\n if (phi < phi0) phi0 = phi;\n if (phi > phi1) phi1 = phi;\n p0 = p, lambda2 = lambda;\n}\n\nfunction boundsLineStart() {\n boundsStream.point = linePoint;\n}\n\nfunction boundsLineEnd() {\n range[0] = lambda0, range[1] = lambda1;\n boundsStream.point = boundsPoint;\n p0 = null;\n}\n\nfunction boundsRingPoint(lambda, phi) {\n if (p0) {\n var delta = lambda - lambda2;\n deltaSum.add(abs(delta) > 180 ? delta + (delta > 0 ? 360 : -360) : delta);\n } else {\n lambda00 = lambda, phi00 = phi;\n }\n areaStream.point(lambda, phi);\n linePoint(lambda, phi);\n}\n\nfunction boundsRingStart() {\n areaStream.lineStart();\n}\n\nfunction boundsRingEnd() {\n boundsRingPoint(lambda00, phi00);\n areaStream.lineEnd();\n if (abs(deltaSum) > epsilon) lambda0 = -(lambda1 = 180);\n range[0] = lambda0, range[1] = lambda1;\n p0 = null;\n}\n\n// Finds the left-right distance between two longitudes.\n// This is almost the same as (lambda1 - lambda0 + 360°) % 360°, except that we want\n// the distance between ±180° to be 360°.\nfunction angle(lambda0, lambda1) {\n return (lambda1 -= lambda0) < 0 ? lambda1 + 360 : lambda1;\n}\n\nfunction rangeCompare(a, b) {\n return a[0] - b[0];\n}\n\nfunction rangeContains(range, x) {\n return range[0] <= range[1] ? range[0] <= x && x <= range[1] : x < range[0] || range[1] < x;\n}\n\nexport default function(feature) {\n var i, n, a, b, merged, deltaMax, delta;\n\n phi1 = lambda1 = -(lambda0 = phi0 = Infinity);\n ranges = [];\n stream(feature, boundsStream);\n\n // First, sort ranges by their minimum longitudes.\n if (n = ranges.length) {\n ranges.sort(rangeCompare);\n\n // Then, merge any ranges that overlap.\n for (i = 1, a = ranges[0], merged = [a]; i < n; ++i) {\n b = ranges[i];\n if (rangeContains(a, b[0]) || rangeContains(a, b[1])) {\n if (angle(a[0], b[1]) > angle(a[0], a[1])) a[1] = b[1];\n if (angle(b[0], a[1]) > angle(a[0], a[1])) a[0] = b[0];\n } else {\n merged.push(a = b);\n }\n }\n\n // Finally, find the largest gap between the merged ranges.\n // The final bounding box will be the inverse of this gap.\n for (deltaMax = -Infinity, n = merged.length - 1, i = 0, a = merged[n]; i <= n; a = b, ++i) {\n b = merged[i];\n if ((delta = angle(a[1], b[0])) > deltaMax) deltaMax = delta, lambda0 = b[0], lambda1 = a[1];\n }\n }\n\n ranges = range = null;\n\n return lambda0 === Infinity || phi0 === Infinity\n ? [[NaN, NaN], [NaN, NaN]]\n : [[lambda0, phi0], [lambda1, phi1]];\n}\n","import {asin, atan2, cos, degrees, epsilon, epsilon2, radians, sin, sqrt} from \"./math\";\nimport noop from \"./noop\";\nimport stream from \"./stream\";\n\nvar W0, W1,\n X0, Y0, Z0,\n X1, Y1, Z1,\n X2, Y2, Z2,\n lambda00, phi00, // first point\n x0, y0, z0; // previous point\n\nvar centroidStream = {\n sphere: noop,\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n }\n};\n\n// Arithmetic mean of Cartesian vectors.\nfunction centroidPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n centroidPointCartesian(cosPhi * cos(lambda), cosPhi * sin(lambda), sin(phi));\n}\n\nfunction centroidPointCartesian(x, y, z) {\n ++W0;\n X0 += (x - X0) / W0;\n Y0 += (y - Y0) / W0;\n Z0 += (z - Z0) / W0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidLinePointFirst;\n}\n\nfunction centroidLinePointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidStream.point = centroidLinePoint;\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLinePoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n w = atan2(sqrt((w = y0 * z - z0 * y) * w + (w = z0 * x - x0 * z) * w + (w = x0 * y - y0 * x) * w), x0 * x + y0 * y + z0 * z);\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\n// See J. E. Brock, The Inertia Tensor for a Spherical Triangle,\n// J. Applied Mechanics 42, 239 (1975).\nfunction centroidRingStart() {\n centroidStream.point = centroidRingPointFirst;\n}\n\nfunction centroidRingEnd() {\n centroidRingPoint(lambda00, phi00);\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingPointFirst(lambda, phi) {\n lambda00 = lambda, phi00 = phi;\n lambda *= radians, phi *= radians;\n centroidStream.point = centroidRingPoint;\n var cosPhi = cos(phi);\n x0 = cosPhi * cos(lambda);\n y0 = cosPhi * sin(lambda);\n z0 = sin(phi);\n centroidPointCartesian(x0, y0, z0);\n}\n\nfunction centroidRingPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var cosPhi = cos(phi),\n x = cosPhi * cos(lambda),\n y = cosPhi * sin(lambda),\n z = sin(phi),\n cx = y0 * z - z0 * y,\n cy = z0 * x - x0 * z,\n cz = x0 * y - y0 * x,\n m = sqrt(cx * cx + cy * cy + cz * cz),\n w = asin(m), // line weight = angle\n v = m && -w / m; // area weight multiplier\n X2 += v * cx;\n Y2 += v * cy;\n Z2 += v * cz;\n W1 += w;\n X1 += w * (x0 + (x0 = x));\n Y1 += w * (y0 + (y0 = y));\n Z1 += w * (z0 + (z0 = z));\n centroidPointCartesian(x0, y0, z0);\n}\n\nexport default function(object) {\n W0 = W1 =\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n stream(object, centroidStream);\n\n var x = X2,\n y = Y2,\n z = Z2,\n m = x * x + y * y + z * z;\n\n // If the area-weighted ccentroid is undefined, fall back to length-weighted ccentroid.\n if (m < epsilon2) {\n x = X1, y = Y1, z = Z1;\n // If the feature has zero length, fall back to arithmetic mean of point vectors.\n if (W1 < epsilon) x = X0, y = Y0, z = Z0;\n m = x * x + y * y + z * z;\n // If the feature still has an undefined ccentroid, then return.\n if (m < epsilon2) return [NaN, NaN];\n }\n\n return [atan2(y, x) * degrees, asin(z / sqrt(m)) * degrees];\n}\n","export default function(a, b) {\n\n function compose(x, y) {\n return x = a(x, y), b(x[0], x[1]);\n }\n\n if (a.invert && b.invert) compose.invert = function(x, y) {\n return x = b.invert(x, y), x && a.invert(x[0], x[1]);\n };\n\n return compose;\n}\n","import compose from \"./compose\";\nimport {abs, asin, atan2, cos, degrees, pi, radians, sin, tau} from \"./math\";\n\nfunction rotationIdentity(lambda, phi) {\n return [abs(lambda) > pi ? lambda + Math.round(-lambda / tau) * tau : lambda, phi];\n}\n\nrotationIdentity.invert = rotationIdentity;\n\nexport function rotateRadians(deltaLambda, deltaPhi, deltaGamma) {\n return (deltaLambda %= tau) ? (deltaPhi || deltaGamma ? compose(rotationLambda(deltaLambda), rotationPhiGamma(deltaPhi, deltaGamma))\n : rotationLambda(deltaLambda))\n : (deltaPhi || deltaGamma ? rotationPhiGamma(deltaPhi, deltaGamma)\n : rotationIdentity);\n}\n\nfunction forwardRotationLambda(deltaLambda) {\n return function(lambda, phi) {\n return lambda += deltaLambda, [lambda > pi ? lambda - tau : lambda < -pi ? lambda + tau : lambda, phi];\n };\n}\n\nfunction rotationLambda(deltaLambda) {\n var rotation = forwardRotationLambda(deltaLambda);\n rotation.invert = forwardRotationLambda(-deltaLambda);\n return rotation;\n}\n\nfunction rotationPhiGamma(deltaPhi, deltaGamma) {\n var cosDeltaPhi = cos(deltaPhi),\n sinDeltaPhi = sin(deltaPhi),\n cosDeltaGamma = cos(deltaGamma),\n sinDeltaGamma = sin(deltaGamma);\n\n function rotation(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaPhi + x * sinDeltaPhi;\n return [\n atan2(y * cosDeltaGamma - k * sinDeltaGamma, x * cosDeltaPhi - z * sinDeltaPhi),\n asin(k * cosDeltaGamma + y * sinDeltaGamma)\n ];\n }\n\n rotation.invert = function(lambda, phi) {\n var cosPhi = cos(phi),\n x = cos(lambda) * cosPhi,\n y = sin(lambda) * cosPhi,\n z = sin(phi),\n k = z * cosDeltaGamma - y * sinDeltaGamma;\n return [\n atan2(y * cosDeltaGamma + z * sinDeltaGamma, x * cosDeltaPhi + k * sinDeltaPhi),\n asin(k * cosDeltaPhi - x * sinDeltaPhi)\n ];\n };\n\n return rotation;\n}\n\nexport default function(rotate) {\n rotate = rotateRadians(rotate[0] * radians, rotate[1] * radians, rotate.length > 2 ? rotate[2] * radians : 0);\n\n function forward(coordinates) {\n coordinates = rotate(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n }\n\n forward.invert = function(coordinates) {\n coordinates = rotate.invert(coordinates[0] * radians, coordinates[1] * radians);\n return coordinates[0] *= degrees, coordinates[1] *= degrees, coordinates;\n };\n\n return forward;\n}\n","import {cartesian, cartesianNormalizeInPlace, spherical} from \"./cartesian\";\nimport constant from \"./constant\";\nimport {acos, cos, degrees, epsilon, radians, sin, tau} from \"./math\";\nimport {rotateRadians} from \"./rotation\";\n\n// Generates a circle centered at [0°, 0°], with a given radius and precision.\nexport function circleStream(stream, radius, delta, direction, t0, t1) {\n if (!delta) return;\n var cosRadius = cos(radius),\n sinRadius = sin(radius),\n step = direction * delta;\n if (t0 == null) {\n t0 = radius + direction * tau;\n t1 = radius - step / 2;\n } else {\n t0 = circleRadius(cosRadius, t0);\n t1 = circleRadius(cosRadius, t1);\n if (direction > 0 ? t0 < t1 : t0 > t1) t0 += direction * tau;\n }\n for (var point, t = t0; direction > 0 ? t > t1 : t < t1; t -= step) {\n point = spherical([cosRadius, -sinRadius * cos(t), -sinRadius * sin(t)]);\n stream.point(point[0], point[1]);\n }\n}\n\n// Returns the signed angle of a cartesian point relative to [cosRadius, 0, 0].\nfunction circleRadius(cosRadius, point) {\n point = cartesian(point), point[0] -= cosRadius;\n cartesianNormalizeInPlace(point);\n var radius = acos(-point[1]);\n return ((-point[2] < 0 ? -radius : radius) + tau - epsilon) % tau;\n}\n\nexport default function() {\n var center = constant([0, 0]),\n radius = constant(90),\n precision = constant(6),\n ring,\n rotate,\n stream = {point: point};\n\n function point(x, y) {\n ring.push(x = rotate(x, y));\n x[0] *= degrees, x[1] *= degrees;\n }\n\n function circle() {\n var c = center.apply(this, arguments),\n r = radius.apply(this, arguments) * radians,\n p = precision.apply(this, arguments) * radians;\n ring = [];\n rotate = rotateRadians(-c[0] * radians, -c[1] * radians, 0).invert;\n circleStream(stream, r, p, 1);\n c = {type: \"Polygon\", coordinates: [ring]};\n ring = rotate = null;\n return c;\n }\n\n circle.center = function(_) {\n return arguments.length ? (center = typeof _ === \"function\" ? _ : constant([+_[0], +_[1]]), circle) : center;\n };\n\n circle.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), circle) : radius;\n };\n\n circle.precision = function(_) {\n return arguments.length ? (precision = typeof _ === \"function\" ? _ : constant(+_), circle) : precision;\n };\n\n return circle;\n}\n","import noop from \"../noop\";\n\nexport default function() {\n var lines = [],\n line;\n return {\n point: function(x, y) {\n line.push([x, y]);\n },\n lineStart: function() {\n lines.push(line = []);\n },\n lineEnd: noop,\n rejoin: function() {\n if (lines.length > 1) lines.push(lines.pop().concat(lines.shift()));\n },\n result: function() {\n var result = lines;\n lines = [];\n line = null;\n return result;\n }\n };\n}\n","import {abs, epsilon} from \"./math\";\n\nexport default function(a, b) {\n return abs(a[0] - b[0]) < epsilon && abs(a[1] - b[1]) < epsilon;\n}\n","import pointEqual from \"../pointEqual\";\n\nfunction Intersection(point, points, other, entry) {\n this.x = point;\n this.z = points;\n this.o = other; // another intersection\n this.e = entry; // is an entry?\n this.v = false; // visited\n this.n = this.p = null; // next & previous\n}\n\n// A generalized polygon clipping algorithm: given a polygon that has been cut\n// into its visible line segments, and rejoins the segments by interpolating\n// along the clip edge.\nexport default function(segments, compareIntersection, startInside, interpolate, stream) {\n var subject = [],\n clip = [],\n i,\n n;\n\n segments.forEach(function(segment) {\n if ((n = segment.length - 1) <= 0) return;\n var n, p0 = segment[0], p1 = segment[n], x;\n\n // If the first and last points of a segment are coincident, then treat as a\n // closed ring. TODO if all rings are closed, then the winding order of the\n // exterior ring should be checked.\n if (pointEqual(p0, p1)) {\n stream.lineStart();\n for (i = 0; i < n; ++i) stream.point((p0 = segment[i])[0], p0[1]);\n stream.lineEnd();\n return;\n }\n\n subject.push(x = new Intersection(p0, segment, null, true));\n clip.push(x.o = new Intersection(p0, null, x, false));\n subject.push(x = new Intersection(p1, segment, null, false));\n clip.push(x.o = new Intersection(p1, null, x, true));\n });\n\n if (!subject.length) return;\n\n clip.sort(compareIntersection);\n link(subject);\n link(clip);\n\n for (i = 0, n = clip.length; i < n; ++i) {\n clip[i].e = startInside = !startInside;\n }\n\n var start = subject[0],\n points,\n point;\n\n while (1) {\n // Find first unvisited intersection.\n var current = start,\n isSubject = true;\n while (current.v) if ((current = current.n) === start) return;\n points = current.z;\n stream.lineStart();\n do {\n current.v = current.o.v = true;\n if (current.e) {\n if (isSubject) {\n for (i = 0, n = points.length; i < n; ++i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.n.x, 1, stream);\n }\n current = current.n;\n } else {\n if (isSubject) {\n points = current.p.z;\n for (i = points.length - 1; i >= 0; --i) stream.point((point = points[i])[0], point[1]);\n } else {\n interpolate(current.x, current.p.x, -1, stream);\n }\n current = current.p;\n }\n current = current.o;\n points = current.z;\n isSubject = !isSubject;\n } while (!current.v);\n stream.lineEnd();\n }\n}\n\nfunction link(array) {\n if (!(n = array.length)) return;\n var n,\n i = 0,\n a = array[0],\n b;\n while (++i < n) {\n a.n = b = array[i];\n b.p = a;\n a = b;\n }\n a.n = b = array[0];\n b.p = a;\n}\n","import adder from \"./adder\";\nimport {cartesian, cartesianCross, cartesianNormalizeInPlace} from \"./cartesian\";\nimport {asin, atan2, cos, epsilon, halfPi, pi, quarterPi, sin, tau} from \"./math\";\n\nvar sum = adder();\n\nexport default function(polygon, point) {\n var lambda = point[0],\n phi = point[1],\n sinPhi = sin(phi),\n normal = [sin(lambda), -cos(lambda), 0],\n angle = 0,\n winding = 0;\n\n sum.reset();\n\n if (sinPhi === 1) phi = halfPi + epsilon;\n else if (sinPhi === -1) phi = -halfPi - epsilon;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n if (!(m = (ring = polygon[i]).length)) continue;\n var ring,\n m,\n point0 = ring[m - 1],\n lambda0 = point0[0],\n phi0 = point0[1] / 2 + quarterPi,\n sinPhi0 = sin(phi0),\n cosPhi0 = cos(phi0);\n\n for (var j = 0; j < m; ++j, lambda0 = lambda1, sinPhi0 = sinPhi1, cosPhi0 = cosPhi1, point0 = point1) {\n var point1 = ring[j],\n lambda1 = point1[0],\n phi1 = point1[1] / 2 + quarterPi,\n sinPhi1 = sin(phi1),\n cosPhi1 = cos(phi1),\n delta = lambda1 - lambda0,\n sign = delta >= 0 ? 1 : -1,\n absDelta = sign * delta,\n antimeridian = absDelta > pi,\n k = sinPhi0 * sinPhi1;\n\n sum.add(atan2(k * sign * sin(absDelta), cosPhi0 * cosPhi1 + k * cos(absDelta)));\n angle += antimeridian ? delta + sign * tau : delta;\n\n // Are the longitudes either side of the point’s meridian (lambda),\n // and are the latitudes smaller than the parallel (phi)?\n if (antimeridian ^ lambda0 >= lambda ^ lambda1 >= lambda) {\n var arc = cartesianCross(cartesian(point0), cartesian(point1));\n cartesianNormalizeInPlace(arc);\n var intersection = cartesianCross(normal, arc);\n cartesianNormalizeInPlace(intersection);\n var phiArc = (antimeridian ^ delta >= 0 ? -1 : 1) * asin(intersection[2]);\n if (phi > phiArc || phi === phiArc && (arc[0] || arc[1])) {\n winding += antimeridian ^ delta >= 0 ? 1 : -1;\n }\n }\n }\n }\n\n // First, determine whether the South pole is inside or outside:\n //\n // It is inside if:\n // * the polygon winds around it in a clockwise direction.\n // * the polygon does not (cumulatively) wind around it, but has a negative\n // (counter-clockwise) area.\n //\n // Second, count the (signed) number of times a segment crosses a lambda\n // from the point to the South pole. If it is zero, then the point is the\n // same side as the South pole.\n\n return (angle < -epsilon || angle < epsilon && sum < -epsilon) ^ (winding & 1);\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending\";\nimport bisector from \"./bisector\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","export default function(arrays) {\n var n = arrays.length,\n m,\n i = -1,\n j = 0,\n merged,\n array;\n\n while (++i < n) j += arrays[i].length;\n merged = new Array(j);\n\n while (--n >= 0) {\n array = arrays[n];\n m = array.length;\n while (--m >= 0) {\n merged[--j] = array[m];\n }\n }\n\n return merged;\n}\n","import clipBuffer from \"./buffer\";\nimport clipRejoin from \"./rejoin\";\nimport {epsilon, halfPi} from \"../math\";\nimport polygonContains from \"../polygonContains\";\nimport {merge} from \"d3-array\";\n\nexport default function(pointVisible, clipLine, interpolate, start) {\n return function(sink) {\n var line = clipLine(sink),\n ringBuffer = clipBuffer(),\n ringSink = clipLine(ringBuffer),\n polygonStarted = false,\n polygon,\n segments,\n ring;\n\n var clip = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() {\n clip.point = pointRing;\n clip.lineStart = ringStart;\n clip.lineEnd = ringEnd;\n segments = [];\n polygon = [];\n },\n polygonEnd: function() {\n clip.point = point;\n clip.lineStart = lineStart;\n clip.lineEnd = lineEnd;\n segments = merge(segments);\n var startInside = polygonContains(polygon, start);\n if (segments.length) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n clipRejoin(segments, compareIntersection, startInside, interpolate, sink);\n } else if (startInside) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n }\n if (polygonStarted) sink.polygonEnd(), polygonStarted = false;\n segments = polygon = null;\n },\n sphere: function() {\n sink.polygonStart();\n sink.lineStart();\n interpolate(null, null, 1, sink);\n sink.lineEnd();\n sink.polygonEnd();\n }\n };\n\n function point(lambda, phi) {\n if (pointVisible(lambda, phi)) sink.point(lambda, phi);\n }\n\n function pointLine(lambda, phi) {\n line.point(lambda, phi);\n }\n\n function lineStart() {\n clip.point = pointLine;\n line.lineStart();\n }\n\n function lineEnd() {\n clip.point = point;\n line.lineEnd();\n }\n\n function pointRing(lambda, phi) {\n ring.push([lambda, phi]);\n ringSink.point(lambda, phi);\n }\n\n function ringStart() {\n ringSink.lineStart();\n ring = [];\n }\n\n function ringEnd() {\n pointRing(ring[0][0], ring[0][1]);\n ringSink.lineEnd();\n\n var clean = ringSink.clean(),\n ringSegments = ringBuffer.result(),\n i, n = ringSegments.length, m,\n segment,\n point;\n\n ring.pop();\n polygon.push(ring);\n ring = null;\n\n if (!n) return;\n\n // No intersections.\n if (clean & 1) {\n segment = ringSegments[0];\n if ((m = segment.length - 1) > 0) {\n if (!polygonStarted) sink.polygonStart(), polygonStarted = true;\n sink.lineStart();\n for (i = 0; i < m; ++i) sink.point((point = segment[i])[0], point[1]);\n sink.lineEnd();\n }\n return;\n }\n\n // Rejoin connected segments.\n // TODO reuse ringBuffer.rejoin()?\n if (n > 1 && clean & 2) ringSegments.push(ringSegments.pop().concat(ringSegments.shift()));\n\n segments.push(ringSegments.filter(validSegment));\n }\n\n return clip;\n };\n}\n\nfunction validSegment(segment) {\n return segment.length > 1;\n}\n\n// Intersections are sorted along the clip edge. For both antimeridian cutting\n// and circle clipping, the same comparison is used.\nfunction compareIntersection(a, b) {\n return ((a = a.x)[0] < 0 ? a[1] - halfPi - epsilon : halfPi - a[1])\n - ((b = b.x)[0] < 0 ? b[1] - halfPi - epsilon : halfPi - b[1]);\n}\n","import clip from \"./index\";\nimport {abs, atan, cos, epsilon, halfPi, pi, sin} from \"../math\";\n\nexport default clip(\n function() { return true; },\n clipAntimeridianLine,\n clipAntimeridianInterpolate,\n [-pi, -halfPi]\n);\n\n// Takes a line and cuts into visible segments. Return values: 0 - there were\n// intersections or the line was empty; 1 - no intersections; 2 - there were\n// intersections, and the first and last segments should be rejoined.\nfunction clipAntimeridianLine(stream) {\n var lambda0 = NaN,\n phi0 = NaN,\n sign0 = NaN,\n clean; // no intersections\n\n return {\n lineStart: function() {\n stream.lineStart();\n clean = 1;\n },\n point: function(lambda1, phi1) {\n var sign1 = lambda1 > 0 ? pi : -pi,\n delta = abs(lambda1 - lambda0);\n if (abs(delta - pi) < epsilon) { // line crosses a pole\n stream.point(lambda0, phi0 = (phi0 + phi1) / 2 > 0 ? halfPi : -halfPi);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n stream.point(lambda1, phi0);\n clean = 0;\n } else if (sign0 !== sign1 && delta >= pi) { // line crosses antimeridian\n if (abs(lambda0 - sign0) < epsilon) lambda0 -= sign0 * epsilon; // handle degeneracies\n if (abs(lambda1 - sign1) < epsilon) lambda1 -= sign1 * epsilon;\n phi0 = clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1);\n stream.point(sign0, phi0);\n stream.lineEnd();\n stream.lineStart();\n stream.point(sign1, phi0);\n clean = 0;\n }\n stream.point(lambda0 = lambda1, phi0 = phi1);\n sign0 = sign1;\n },\n lineEnd: function() {\n stream.lineEnd();\n lambda0 = phi0 = NaN;\n },\n clean: function() {\n return 2 - clean; // if intersections, rejoin first and last segments\n }\n };\n}\n\nfunction clipAntimeridianIntersect(lambda0, phi0, lambda1, phi1) {\n var cosPhi0,\n cosPhi1,\n sinLambda0Lambda1 = sin(lambda0 - lambda1);\n return abs(sinLambda0Lambda1) > epsilon\n ? atan((sin(phi0) * (cosPhi1 = cos(phi1)) * sin(lambda1)\n - sin(phi1) * (cosPhi0 = cos(phi0)) * sin(lambda0))\n / (cosPhi0 * cosPhi1 * sinLambda0Lambda1))\n : (phi0 + phi1) / 2;\n}\n\nfunction clipAntimeridianInterpolate(from, to, direction, stream) {\n var phi;\n if (from == null) {\n phi = direction * halfPi;\n stream.point(-pi, phi);\n stream.point(0, phi);\n stream.point(pi, phi);\n stream.point(pi, 0);\n stream.point(pi, -phi);\n stream.point(0, -phi);\n stream.point(-pi, -phi);\n stream.point(-pi, 0);\n stream.point(-pi, phi);\n } else if (abs(from[0] - to[0]) > epsilon) {\n var lambda = from[0] < to[0] ? pi : -pi;\n phi = direction * lambda / 2;\n stream.point(-lambda, phi);\n stream.point(0, phi);\n stream.point(lambda, phi);\n } else {\n stream.point(to[0], to[1]);\n }\n}\n","import {cartesian, cartesianAddInPlace, cartesianCross, cartesianDot, cartesianScale, spherical} from \"../cartesian\";\nimport {circleStream} from \"../circle\";\nimport {abs, cos, epsilon, pi, radians, sqrt} from \"../math\";\nimport pointEqual from \"../pointEqual\";\nimport clip from \"./index\";\n\nexport default function(radius) {\n var cr = cos(radius),\n delta = 6 * radians,\n smallRadius = cr > 0,\n notHemisphere = abs(cr) > epsilon; // TODO optimise for this common case\n\n function interpolate(from, to, direction, stream) {\n circleStream(stream, radius, delta, direction, from, to);\n }\n\n function visible(lambda, phi) {\n return cos(lambda) * cos(phi) > cr;\n }\n\n // Takes a line and cuts into visible segments. Return values used for polygon\n // clipping: 0 - there were intersections or the line was empty; 1 - no\n // intersections 2 - there were intersections, and the first and last segments\n // should be rejoined.\n function clipLine(stream) {\n var point0, // previous point\n c0, // code for previous point\n v0, // visibility of previous point\n v00, // visibility of first point\n clean; // no intersections\n return {\n lineStart: function() {\n v00 = v0 = false;\n clean = 1;\n },\n point: function(lambda, phi) {\n var point1 = [lambda, phi],\n point2,\n v = visible(lambda, phi),\n c = smallRadius\n ? v ? 0 : code(lambda, phi)\n : v ? code(lambda + (lambda < 0 ? pi : -pi), phi) : 0;\n if (!point0 && (v00 = v0 = v)) stream.lineStart();\n // Handle degeneracies.\n // TODO ignore if not clipping polygons.\n if (v !== v0) {\n point2 = intersect(point0, point1);\n if (!point2 || pointEqual(point0, point2) || pointEqual(point1, point2)) {\n point1[0] += epsilon;\n point1[1] += epsilon;\n v = visible(point1[0], point1[1]);\n }\n }\n if (v !== v0) {\n clean = 0;\n if (v) {\n // outside going in\n stream.lineStart();\n point2 = intersect(point1, point0);\n stream.point(point2[0], point2[1]);\n } else {\n // inside going out\n point2 = intersect(point0, point1);\n stream.point(point2[0], point2[1]);\n stream.lineEnd();\n }\n point0 = point2;\n } else if (notHemisphere && point0 && smallRadius ^ v) {\n var t;\n // If the codes for two points are different, or are both zero,\n // and there this segment intersects with the small circle.\n if (!(c & c0) && (t = intersect(point1, point0, true))) {\n clean = 0;\n if (smallRadius) {\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n } else {\n stream.point(t[1][0], t[1][1]);\n stream.lineEnd();\n stream.lineStart();\n stream.point(t[0][0], t[0][1]);\n }\n }\n }\n if (v && (!point0 || !pointEqual(point0, point1))) {\n stream.point(point1[0], point1[1]);\n }\n point0 = point1, v0 = v, c0 = c;\n },\n lineEnd: function() {\n if (v0) stream.lineEnd();\n point0 = null;\n },\n // Rejoin first and last segments if there were intersections and the first\n // and last points were visible.\n clean: function() {\n return clean | ((v00 && v0) << 1);\n }\n };\n }\n\n // Intersects the great circle between a and b with the clip circle.\n function intersect(a, b, two) {\n var pa = cartesian(a),\n pb = cartesian(b);\n\n // We have two planes, n1.p = d1 and n2.p = d2.\n // Find intersection line p(t) = c1 n1 + c2 n2 + t (n1 ⨯ n2).\n var n1 = [1, 0, 0], // normal\n n2 = cartesianCross(pa, pb),\n n2n2 = cartesianDot(n2, n2),\n n1n2 = n2[0], // cartesianDot(n1, n2),\n determinant = n2n2 - n1n2 * n1n2;\n\n // Two polar points.\n if (!determinant) return !two && a;\n\n var c1 = cr * n2n2 / determinant,\n c2 = -cr * n1n2 / determinant,\n n1xn2 = cartesianCross(n1, n2),\n A = cartesianScale(n1, c1),\n B = cartesianScale(n2, c2);\n cartesianAddInPlace(A, B);\n\n // Solve |p(t)|^2 = 1.\n var u = n1xn2,\n w = cartesianDot(A, u),\n uu = cartesianDot(u, u),\n t2 = w * w - uu * (cartesianDot(A, A) - 1);\n\n if (t2 < 0) return;\n\n var t = sqrt(t2),\n q = cartesianScale(u, (-w - t) / uu);\n cartesianAddInPlace(q, A);\n q = spherical(q);\n\n if (!two) return q;\n\n // Two intersection points.\n var lambda0 = a[0],\n lambda1 = b[0],\n phi0 = a[1],\n phi1 = b[1],\n z;\n\n if (lambda1 < lambda0) z = lambda0, lambda0 = lambda1, lambda1 = z;\n\n var delta = lambda1 - lambda0,\n polar = abs(delta - pi) < epsilon,\n meridian = polar || delta < epsilon;\n\n if (!polar && phi1 < phi0) z = phi0, phi0 = phi1, phi1 = z;\n\n // Check that the first point is between a and b.\n if (meridian\n ? polar\n ? phi0 + phi1 > 0 ^ q[1] < (abs(q[0] - lambda0) < epsilon ? phi0 : phi1)\n : phi0 <= q[1] && q[1] <= phi1\n : delta > pi ^ (lambda0 <= q[0] && q[0] <= lambda1)) {\n var q1 = cartesianScale(u, (-w + t) / uu);\n cartesianAddInPlace(q1, A);\n return [q, spherical(q1)];\n }\n }\n\n // Generates a 4-bit vector representing the location of a point relative to\n // the small circle's bounding box.\n function code(lambda, phi) {\n var r = smallRadius ? radius : pi - radius,\n code = 0;\n if (lambda < -r) code |= 1; // left\n else if (lambda > r) code |= 2; // right\n if (phi < -r) code |= 4; // below\n else if (phi > r) code |= 8; // above\n return code;\n }\n\n return clip(visible, clipLine, interpolate, smallRadius ? [0, -radius] : [-pi, radius - pi]);\n}\n","export default function(a, b, x0, y0, x1, y1) {\n var ax = a[0],\n ay = a[1],\n bx = b[0],\n by = b[1],\n t0 = 0,\n t1 = 1,\n dx = bx - ax,\n dy = by - ay,\n r;\n\n r = x0 - ax;\n if (!dx && r > 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (t0 > 0) a[0] = ax + t0 * dx, a[1] = ay + t0 * dy;\n if (t1 < 1) b[0] = ax + t1 * dx, b[1] = ay + t1 * dy;\n return true;\n}\n","import {abs, epsilon} from \"../math\";\nimport clipBuffer from \"./buffer\";\nimport clipLine from \"./line\";\nimport clipRejoin from \"./rejoin\";\nimport {merge} from \"d3-array\";\n\nvar clipMax = 1e9, clipMin = -clipMax;\n\n// TODO Use d3-polygon’s polygonContains here for the ring check?\n// TODO Eliminate duplicate buffering in clipBuffer and polygon.push?\n\nexport default function clipRectangle(x0, y0, x1, y1) {\n\n function visible(x, y) {\n return x0 <= x && x <= x1 && y0 <= y && y <= y1;\n }\n\n function interpolate(from, to, direction, stream) {\n var a = 0, a1 = 0;\n if (from == null\n || (a = corner(from, direction)) !== (a1 = corner(to, direction))\n || comparePoint(from, to) < 0 ^ direction > 0) {\n do stream.point(a === 0 || a === 3 ? x0 : x1, a > 1 ? y1 : y0);\n while ((a = (a + direction + 4) % 4) !== a1);\n } else {\n stream.point(to[0], to[1]);\n }\n }\n\n function corner(p, direction) {\n return abs(p[0] - x0) < epsilon ? direction > 0 ? 0 : 3\n : abs(p[0] - x1) < epsilon ? direction > 0 ? 2 : 1\n : abs(p[1] - y0) < epsilon ? direction > 0 ? 1 : 0\n : direction > 0 ? 3 : 2; // abs(p[1] - y1) < epsilon\n }\n\n function compareIntersection(a, b) {\n return comparePoint(a.x, b.x);\n }\n\n function comparePoint(a, b) {\n var ca = corner(a, 1),\n cb = corner(b, 1);\n return ca !== cb ? ca - cb\n : ca === 0 ? b[1] - a[1]\n : ca === 1 ? a[0] - b[0]\n : ca === 2 ? a[1] - b[1]\n : b[0] - a[0];\n }\n\n return function(stream) {\n var activeStream = stream,\n bufferStream = clipBuffer(),\n segments,\n polygon,\n ring,\n x__, y__, v__, // first point\n x_, y_, v_, // previous point\n first,\n clean;\n\n var clipStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: polygonStart,\n polygonEnd: polygonEnd\n };\n\n function point(x, y) {\n if (visible(x, y)) activeStream.point(x, y);\n }\n\n function polygonInside() {\n var winding = 0;\n\n for (var i = 0, n = polygon.length; i < n; ++i) {\n for (var ring = polygon[i], j = 1, m = ring.length, point = ring[0], a0, a1, b0 = point[0], b1 = point[1]; j < m; ++j) {\n a0 = b0, a1 = b1, point = ring[j], b0 = point[0], b1 = point[1];\n if (a1 <= y1) { if (b1 > y1 && (b0 - a0) * (y1 - a1) > (b1 - a1) * (x0 - a0)) ++winding; }\n else { if (b1 <= y1 && (b0 - a0) * (y1 - a1) < (b1 - a1) * (x0 - a0)) --winding; }\n }\n }\n\n return winding;\n }\n\n // Buffer geometry within a polygon and then clip it en masse.\n function polygonStart() {\n activeStream = bufferStream, segments = [], polygon = [], clean = true;\n }\n\n function polygonEnd() {\n var startInside = polygonInside(),\n cleanInside = clean && startInside,\n visible = (segments = merge(segments)).length;\n if (cleanInside || visible) {\n stream.polygonStart();\n if (cleanInside) {\n stream.lineStart();\n interpolate(null, null, 1, stream);\n stream.lineEnd();\n }\n if (visible) {\n clipRejoin(segments, compareIntersection, startInside, interpolate, stream);\n }\n stream.polygonEnd();\n }\n activeStream = stream, segments = polygon = ring = null;\n }\n\n function lineStart() {\n clipStream.point = linePoint;\n if (polygon) polygon.push(ring = []);\n first = true;\n v_ = false;\n x_ = y_ = NaN;\n }\n\n // TODO rather than special-case polygons, simply handle them separately.\n // Ideally, coincident intersection points should be jittered to avoid\n // clipping issues.\n function lineEnd() {\n if (segments) {\n linePoint(x__, y__);\n if (v__ && v_) bufferStream.rejoin();\n segments.push(bufferStream.result());\n }\n clipStream.point = point;\n if (v_) activeStream.lineEnd();\n }\n\n function linePoint(x, y) {\n var v = visible(x, y);\n if (polygon) ring.push([x, y]);\n if (first) {\n x__ = x, y__ = y, v__ = v;\n first = false;\n if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n }\n } else {\n if (v && v_) activeStream.point(x, y);\n else {\n var a = [x_ = Math.max(clipMin, Math.min(clipMax, x_)), y_ = Math.max(clipMin, Math.min(clipMax, y_))],\n b = [x = Math.max(clipMin, Math.min(clipMax, x)), y = Math.max(clipMin, Math.min(clipMax, y))];\n if (clipLine(a, b, x0, y0, x1, y1)) {\n if (!v_) {\n activeStream.lineStart();\n activeStream.point(a[0], a[1]);\n }\n activeStream.point(b[0], b[1]);\n if (!v) activeStream.lineEnd();\n clean = false;\n } else if (v) {\n activeStream.lineStart();\n activeStream.point(x, y);\n clean = false;\n }\n }\n }\n x_ = x, y_ = y, v_ = v;\n }\n\n return clipStream;\n };\n}\n","import adder from \"./adder\";\nimport {abs, atan2, cos, radians, sin, sqrt} from \"./math\";\nimport noop from \"./noop\";\nimport stream from \"./stream\";\n\nvar lengthSum = adder(),\n lambda0,\n sinPhi0,\n cosPhi0;\n\nvar lengthStream = {\n sphere: noop,\n point: noop,\n lineStart: lengthLineStart,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop\n};\n\nfunction lengthLineStart() {\n lengthStream.point = lengthPointFirst;\n lengthStream.lineEnd = lengthLineEnd;\n}\n\nfunction lengthLineEnd() {\n lengthStream.point = lengthStream.lineEnd = noop;\n}\n\nfunction lengthPointFirst(lambda, phi) {\n lambda *= radians, phi *= radians;\n lambda0 = lambda, sinPhi0 = sin(phi), cosPhi0 = cos(phi);\n lengthStream.point = lengthPoint;\n}\n\nfunction lengthPoint(lambda, phi) {\n lambda *= radians, phi *= radians;\n var sinPhi = sin(phi),\n cosPhi = cos(phi),\n delta = abs(lambda - lambda0),\n cosDelta = cos(delta),\n sinDelta = sin(delta),\n x = cosPhi * sinDelta,\n y = cosPhi0 * sinPhi - sinPhi0 * cosPhi * cosDelta,\n z = sinPhi0 * sinPhi + cosPhi0 * cosPhi * cosDelta;\n lengthSum.add(atan2(sqrt(x * x + y * y), z));\n lambda0 = lambda, sinPhi0 = sinPhi, cosPhi0 = cosPhi;\n}\n\nexport default function(object) {\n lengthSum.reset();\n stream(object, lengthStream);\n return +lengthSum;\n}\n","import {range} from \"d3-array\";\nimport {abs, ceil, epsilon} from \"./math\";\n\nfunction graticuleX(y0, y1, dy) {\n var y = range(y0, y1 - epsilon, dy).concat(y1);\n return function(x) { return y.map(function(y) { return [x, y]; }); };\n}\n\nfunction graticuleY(x0, x1, dx) {\n var x = range(x0, x1 - epsilon, dx).concat(x1);\n return function(y) { return x.map(function(x) { return [x, y]; }); };\n}\n\nexport default function graticule() {\n var x1, x0, X1, X0,\n y1, y0, Y1, Y0,\n dx = 10, dy = dx, DX = 90, DY = 360,\n x, y, X, Y,\n precision = 2.5;\n\n function graticule() {\n return {type: \"MultiLineString\", coordinates: lines()};\n }\n\n function lines() {\n return range(ceil(X0 / DX) * DX, X1, DX).map(X)\n .concat(range(ceil(Y0 / DY) * DY, Y1, DY).map(Y))\n .concat(range(ceil(x0 / dx) * dx, x1, dx).filter(function(x) { return abs(x % DX) > epsilon; }).map(x))\n .concat(range(ceil(y0 / dy) * dy, y1, dy).filter(function(y) { return abs(y % DY) > epsilon; }).map(y));\n }\n\n graticule.lines = function() {\n return lines().map(function(coordinates) { return {type: \"LineString\", coordinates: coordinates}; });\n };\n\n graticule.outline = function() {\n return {\n type: \"Polygon\",\n coordinates: [\n X(X0).concat(\n Y(Y1).slice(1),\n X(X1).reverse().slice(1),\n Y(Y0).reverse().slice(1))\n ]\n };\n };\n\n graticule.extent = function(_) {\n if (!arguments.length) return graticule.extentMinor();\n return graticule.extentMajor(_).extentMinor(_);\n };\n\n graticule.extentMajor = function(_) {\n if (!arguments.length) return [[X0, Y0], [X1, Y1]];\n X0 = +_[0][0], X1 = +_[1][0];\n Y0 = +_[0][1], Y1 = +_[1][1];\n if (X0 > X1) _ = X0, X0 = X1, X1 = _;\n if (Y0 > Y1) _ = Y0, Y0 = Y1, Y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.extentMinor = function(_) {\n if (!arguments.length) return [[x0, y0], [x1, y1]];\n x0 = +_[0][0], x1 = +_[1][0];\n y0 = +_[0][1], y1 = +_[1][1];\n if (x0 > x1) _ = x0, x0 = x1, x1 = _;\n if (y0 > y1) _ = y0, y0 = y1, y1 = _;\n return graticule.precision(precision);\n };\n\n graticule.step = function(_) {\n if (!arguments.length) return graticule.stepMinor();\n return graticule.stepMajor(_).stepMinor(_);\n };\n\n graticule.stepMajor = function(_) {\n if (!arguments.length) return [DX, DY];\n DX = +_[0], DY = +_[1];\n return graticule;\n };\n\n graticule.stepMinor = function(_) {\n if (!arguments.length) return [dx, dy];\n dx = +_[0], dy = +_[1];\n return graticule;\n };\n\n graticule.precision = function(_) {\n if (!arguments.length) return precision;\n precision = +_;\n x = graticuleX(y0, y1, 90);\n y = graticuleY(x0, x1, precision);\n X = graticuleX(Y0, Y1, 90);\n Y = graticuleY(X0, X1, precision);\n return graticule;\n };\n\n return graticule\n .extentMajor([[-180, -90 + epsilon], [180, 90 - epsilon]])\n .extentMinor([[-180, -80 - epsilon], [180, 80 + epsilon]]);\n}\n\nexport function graticule10() {\n return graticule()();\n}\n","export default function(x) {\n return x;\n}\n","import adder from \"../adder\";\nimport {abs} from \"../math\";\nimport noop from \"../noop\";\n\nvar areaSum = adder(),\n areaRingSum = adder(),\n x00,\n y00,\n x0,\n y0;\n\nvar areaStream = {\n point: noop,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: function() {\n areaStream.lineStart = areaRingStart;\n areaStream.lineEnd = areaRingEnd;\n },\n polygonEnd: function() {\n areaStream.lineStart = areaStream.lineEnd = areaStream.point = noop;\n areaSum.add(abs(areaRingSum));\n areaRingSum.reset();\n },\n result: function() {\n var area = areaSum / 2;\n areaSum.reset();\n return area;\n }\n};\n\nfunction areaRingStart() {\n areaStream.point = areaPointFirst;\n}\n\nfunction areaPointFirst(x, y) {\n areaStream.point = areaPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction areaPoint(x, y) {\n areaRingSum.add(y0 * x - x0 * y);\n x0 = x, y0 = y;\n}\n\nfunction areaRingEnd() {\n areaPoint(x00, y00);\n}\n\nexport default areaStream;\n","import noop from \"../noop\";\n\nvar x0 = Infinity,\n y0 = x0,\n x1 = -x0,\n y1 = x1;\n\nvar boundsStream = {\n point: boundsPoint,\n lineStart: noop,\n lineEnd: noop,\n polygonStart: noop,\n polygonEnd: noop,\n result: function() {\n var bounds = [[x0, y0], [x1, y1]];\n x1 = y1 = -(y0 = x0 = Infinity);\n return bounds;\n }\n};\n\nfunction boundsPoint(x, y) {\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n}\n\nexport default boundsStream;\n","import {sqrt} from \"../math\";\n\n// TODO Enforce positive area for exterior, negative area for interior?\n\nvar X0 = 0,\n Y0 = 0,\n Z0 = 0,\n X1 = 0,\n Y1 = 0,\n Z1 = 0,\n X2 = 0,\n Y2 = 0,\n Z2 = 0,\n x00,\n y00,\n x0,\n y0;\n\nvar centroidStream = {\n point: centroidPoint,\n lineStart: centroidLineStart,\n lineEnd: centroidLineEnd,\n polygonStart: function() {\n centroidStream.lineStart = centroidRingStart;\n centroidStream.lineEnd = centroidRingEnd;\n },\n polygonEnd: function() {\n centroidStream.point = centroidPoint;\n centroidStream.lineStart = centroidLineStart;\n centroidStream.lineEnd = centroidLineEnd;\n },\n result: function() {\n var centroid = Z2 ? [X2 / Z2, Y2 / Z2]\n : Z1 ? [X1 / Z1, Y1 / Z1]\n : Z0 ? [X0 / Z0, Y0 / Z0]\n : [NaN, NaN];\n X0 = Y0 = Z0 =\n X1 = Y1 = Z1 =\n X2 = Y2 = Z2 = 0;\n return centroid;\n }\n};\n\nfunction centroidPoint(x, y) {\n X0 += x;\n Y0 += y;\n ++Z0;\n}\n\nfunction centroidLineStart() {\n centroidStream.point = centroidPointFirstLine;\n}\n\nfunction centroidPointFirstLine(x, y) {\n centroidStream.point = centroidPointLine;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidPointLine(x, y) {\n var dx = x - x0, dy = y - y0, z = sqrt(dx * dx + dy * dy);\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n centroidPoint(x0 = x, y0 = y);\n}\n\nfunction centroidLineEnd() {\n centroidStream.point = centroidPoint;\n}\n\nfunction centroidRingStart() {\n centroidStream.point = centroidPointFirstRing;\n}\n\nfunction centroidRingEnd() {\n centroidPointRing(x00, y00);\n}\n\nfunction centroidPointFirstRing(x, y) {\n centroidStream.point = centroidPointRing;\n centroidPoint(x00 = x0 = x, y00 = y0 = y);\n}\n\nfunction centroidPointRing(x, y) {\n var dx = x - x0,\n dy = y - y0,\n z = sqrt(dx * dx + dy * dy);\n\n X1 += z * (x0 + x) / 2;\n Y1 += z * (y0 + y) / 2;\n Z1 += z;\n\n z = y0 * x - x0 * y;\n X2 += z * (x0 + x);\n Y2 += z * (y0 + y);\n Z2 += z * 3;\n centroidPoint(x0 = x, y0 = y);\n}\n\nexport default centroidStream;\n","import {tau} from \"../math\";\nimport noop from \"../noop\";\n\nexport default function PathContext(context) {\n this._context = context;\n}\n\nPathContext.prototype = {\n _radius: 4.5,\n pointRadius: function(_) {\n return this._radius = _, this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._context.closePath();\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._context.moveTo(x, y);\n this._point = 1;\n break;\n }\n case 1: {\n this._context.lineTo(x, y);\n break;\n }\n default: {\n this._context.moveTo(x + this._radius, y);\n this._context.arc(x, y, this._radius, 0, tau);\n break;\n }\n }\n },\n result: noop\n};\n","import adder from \"../adder\";\nimport {sqrt} from \"../math\";\nimport noop from \"../noop\";\n\nvar lengthSum = adder(),\n lengthRing,\n x00,\n y00,\n x0,\n y0;\n\nvar lengthStream = {\n point: noop,\n lineStart: function() {\n lengthStream.point = lengthPointFirst;\n },\n lineEnd: function() {\n if (lengthRing) lengthPoint(x00, y00);\n lengthStream.point = noop;\n },\n polygonStart: function() {\n lengthRing = true;\n },\n polygonEnd: function() {\n lengthRing = null;\n },\n result: function() {\n var length = +lengthSum;\n lengthSum.reset();\n return length;\n }\n};\n\nfunction lengthPointFirst(x, y) {\n lengthStream.point = lengthPoint;\n x00 = x0 = x, y00 = y0 = y;\n}\n\nfunction lengthPoint(x, y) {\n x0 -= x, y0 -= y;\n lengthSum.add(sqrt(x0 * x0 + y0 * y0));\n x0 = x, y0 = y;\n}\n\nexport default lengthStream;\n","export default function PathString() {\n this._string = [];\n}\n\nPathString.prototype = {\n _radius: 4.5,\n _circle: circle(4.5),\n pointRadius: function(_) {\n if ((_ = +_) !== this._radius) this._radius = _, this._circle = null;\n return this;\n },\n polygonStart: function() {\n this._line = 0;\n },\n polygonEnd: function() {\n this._line = NaN;\n },\n lineStart: function() {\n this._point = 0;\n },\n lineEnd: function() {\n if (this._line === 0) this._string.push(\"Z\");\n this._point = NaN;\n },\n point: function(x, y) {\n switch (this._point) {\n case 0: {\n this._string.push(\"M\", x, \",\", y);\n this._point = 1;\n break;\n }\n case 1: {\n this._string.push(\"L\", x, \",\", y);\n break;\n }\n default: {\n if (this._circle == null) this._circle = circle(this._radius);\n this._string.push(\"M\", x, \",\", y, this._circle);\n break;\n }\n }\n },\n result: function() {\n if (this._string.length) {\n var result = this._string.join(\"\");\n this._string = [];\n return result;\n } else {\n return null;\n }\n }\n};\n\nfunction circle(radius) {\n return \"m0,\" + radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + -2 * radius\n + \"a\" + radius + \",\" + radius + \" 0 1,1 0,\" + 2 * radius\n + \"z\";\n}\n","import identity from \"../identity\";\nimport stream from \"../stream\";\nimport pathArea from \"./area\";\nimport pathBounds from \"./bounds\";\nimport pathCentroid from \"./centroid\";\nimport PathContext from \"./context\";\nimport pathMeasure from \"./measure\";\nimport PathString from \"./string\";\n\nexport default function(projection, context) {\n var pointRadius = 4.5,\n projectionStream,\n contextStream;\n\n function path(object) {\n if (object) {\n if (typeof pointRadius === \"function\") contextStream.pointRadius(+pointRadius.apply(this, arguments));\n stream(object, projectionStream(contextStream));\n }\n return contextStream.result();\n }\n\n path.area = function(object) {\n stream(object, projectionStream(pathArea));\n return pathArea.result();\n };\n\n path.measure = function(object) {\n stream(object, projectionStream(pathMeasure));\n return pathMeasure.result();\n };\n\n path.bounds = function(object) {\n stream(object, projectionStream(pathBounds));\n return pathBounds.result();\n };\n\n path.centroid = function(object) {\n stream(object, projectionStream(pathCentroid));\n return pathCentroid.result();\n };\n\n path.projection = function(_) {\n return arguments.length ? (projectionStream = _ == null ? (projection = null, identity) : (projection = _).stream, path) : projection;\n };\n\n path.context = function(_) {\n if (!arguments.length) return context;\n contextStream = _ == null ? (context = null, new PathString) : new PathContext(context = _);\n if (typeof pointRadius !== \"function\") contextStream.pointRadius(pointRadius);\n return path;\n };\n\n path.pointRadius = function(_) {\n if (!arguments.length) return pointRadius;\n pointRadius = typeof _ === \"function\" ? _ : (contextStream.pointRadius(+_), +_);\n return path;\n };\n\n return path.projection(projection).context(context);\n}\n","export default function(methods) {\n return {\n stream: transformer(methods)\n };\n}\n\nexport function transformer(methods) {\n return function(stream) {\n var s = new TransformStream;\n for (var key in methods) s[key] = methods[key];\n s.stream = stream;\n return s;\n };\n}\n\nfunction TransformStream() {}\n\nTransformStream.prototype = {\n constructor: TransformStream,\n point: function(x, y) { this.stream.point(x, y); },\n sphere: function() { this.stream.sphere(); },\n lineStart: function() { this.stream.lineStart(); },\n lineEnd: function() { this.stream.lineEnd(); },\n polygonStart: function() { this.stream.polygonStart(); },\n polygonEnd: function() { this.stream.polygonEnd(); }\n};\n","import {default as geoStream} from \"../stream\";\nimport boundsStream from \"../path/bounds\";\n\nfunction fit(projection, fitBounds, object) {\n var clip = projection.clipExtent && projection.clipExtent();\n projection.scale(150).translate([0, 0]);\n if (clip != null) projection.clipExtent(null);\n geoStream(object, projection.stream(boundsStream));\n fitBounds(boundsStream.result());\n if (clip != null) projection.clipExtent(clip);\n return projection;\n}\n\nexport function fitExtent(projection, extent, object) {\n return fit(projection, function(b) {\n var w = extent[1][0] - extent[0][0],\n h = extent[1][1] - extent[0][1],\n k = Math.min(w / (b[1][0] - b[0][0]), h / (b[1][1] - b[0][1])),\n x = +extent[0][0] + (w - k * (b[1][0] + b[0][0])) / 2,\n y = +extent[0][1] + (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitSize(projection, size, object) {\n return fitExtent(projection, [[0, 0], size], object);\n}\n\nexport function fitWidth(projection, width, object) {\n return fit(projection, function(b) {\n var w = +width,\n k = w / (b[1][0] - b[0][0]),\n x = (w - k * (b[1][0] + b[0][0])) / 2,\n y = -k * b[0][1];\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n\nexport function fitHeight(projection, height, object) {\n return fit(projection, function(b) {\n var h = +height,\n k = h / (b[1][1] - b[0][1]),\n x = -k * b[0][0],\n y = (h - k * (b[1][1] + b[0][1])) / 2;\n projection.scale(150 * k).translate([x, y]);\n }, object);\n}\n","import {cartesian} from \"../cartesian\";\nimport {abs, asin, atan2, cos, epsilon, radians, sqrt} from \"../math\";\nimport {transformer} from \"../transform\";\n\nvar maxDepth = 16, // maximum depth of subdivision\n cosMinDistance = cos(30 * radians); // cos(minimum angular distance)\n\nexport default function(project, delta2) {\n return +delta2 ? resample(project, delta2) : resampleNone(project);\n}\n\nfunction resampleNone(project) {\n return transformer({\n point: function(x, y) {\n x = project(x, y);\n this.stream.point(x[0], x[1]);\n }\n });\n}\n\nfunction resample(project, delta2) {\n\n function resampleLineTo(x0, y0, lambda0, a0, b0, c0, x1, y1, lambda1, a1, b1, c1, depth, stream) {\n var dx = x1 - x0,\n dy = y1 - y0,\n d2 = dx * dx + dy * dy;\n if (d2 > 4 * delta2 && depth--) {\n var a = a0 + a1,\n b = b0 + b1,\n c = c0 + c1,\n m = sqrt(a * a + b * b + c * c),\n phi2 = asin(c /= m),\n lambda2 = abs(abs(c) - 1) < epsilon || abs(lambda0 - lambda1) < epsilon ? (lambda0 + lambda1) / 2 : atan2(b, a),\n p = project(lambda2, phi2),\n x2 = p[0],\n y2 = p[1],\n dx2 = x2 - x0,\n dy2 = y2 - y0,\n dz = dy * dx2 - dx * dy2;\n if (dz * dz / d2 > delta2 // perpendicular projected distance\n || abs((dx * dx2 + dy * dy2) / d2 - 0.5) > 0.3 // midpoint close to an end\n || a0 * a1 + b0 * b1 + c0 * c1 < cosMinDistance) { // angular distance\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x2, y2, lambda2, a /= m, b /= m, c, depth, stream);\n stream.point(x2, y2);\n resampleLineTo(x2, y2, lambda2, a, b, c, x1, y1, lambda1, a1, b1, c1, depth, stream);\n }\n }\n }\n return function(stream) {\n var lambda00, x00, y00, a00, b00, c00, // first point\n lambda0, x0, y0, a0, b0, c0; // previous point\n\n var resampleStream = {\n point: point,\n lineStart: lineStart,\n lineEnd: lineEnd,\n polygonStart: function() { stream.polygonStart(); resampleStream.lineStart = ringStart; },\n polygonEnd: function() { stream.polygonEnd(); resampleStream.lineStart = lineStart; }\n };\n\n function point(x, y) {\n x = project(x, y);\n stream.point(x[0], x[1]);\n }\n\n function lineStart() {\n x0 = NaN;\n resampleStream.point = linePoint;\n stream.lineStart();\n }\n\n function linePoint(lambda, phi) {\n var c = cartesian([lambda, phi]), p = project(lambda, phi);\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x0 = p[0], y0 = p[1], lambda0 = lambda, a0 = c[0], b0 = c[1], c0 = c[2], maxDepth, stream);\n stream.point(x0, y0);\n }\n\n function lineEnd() {\n resampleStream.point = point;\n stream.lineEnd();\n }\n\n function ringStart() {\n lineStart();\n resampleStream.point = ringPoint;\n resampleStream.lineEnd = ringEnd;\n }\n\n function ringPoint(lambda, phi) {\n linePoint(lambda00 = lambda, phi), x00 = x0, y00 = y0, a00 = a0, b00 = b0, c00 = c0;\n resampleStream.point = linePoint;\n }\n\n function ringEnd() {\n resampleLineTo(x0, y0, lambda0, a0, b0, c0, x00, y00, lambda00, a00, b00, c00, maxDepth, stream);\n resampleStream.lineEnd = lineEnd;\n lineEnd();\n }\n\n return resampleStream;\n };\n}\n","import clipAntimeridian from \"../clip/antimeridian\";\nimport clipCircle from \"../clip/circle\";\nimport clipRectangle from \"../clip/rectangle\";\nimport compose from \"../compose\";\nimport identity from \"../identity\";\nimport {cos, degrees, radians, sin, sqrt} from \"../math\";\nimport {rotateRadians} from \"../rotation\";\nimport {transformer} from \"../transform\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit\";\nimport resample from \"./resample\";\n\nvar transformRadians = transformer({\n point: function(x, y) {\n this.stream.point(x * radians, y * radians);\n }\n});\n\nfunction transformRotate(rotate) {\n return transformer({\n point: function(x, y) {\n var r = rotate(x, y);\n return this.stream.point(r[0], r[1]);\n }\n });\n}\n\nfunction scaleTranslate(k, dx, dy) {\n function transform(x, y) {\n return [dx + k * x, dy - k * y];\n }\n transform.invert = function(x, y) {\n return [(x - dx) / k, (dy - y) / k];\n };\n return transform;\n}\n\nfunction scaleTranslateRotate(k, dx, dy, alpha) {\n var cosAlpha = cos(alpha),\n sinAlpha = sin(alpha),\n a = cosAlpha * k,\n b = sinAlpha * k,\n ai = cosAlpha / k,\n bi = sinAlpha / k,\n ci = (sinAlpha * dy - cosAlpha * dx) / k,\n fi = (sinAlpha * dx + cosAlpha * dy) / k;\n function transform(x, y) {\n return [a * x - b * y + dx, dy - b * x - a * y];\n }\n transform.invert = function(x, y) {\n return [ai * x - bi * y + ci, fi - bi * x - ai * y];\n };\n return transform;\n}\n\nexport default function projection(project) {\n return projectionMutator(function() { return project; })();\n}\n\nexport function projectionMutator(projectAt) {\n var project,\n k = 150, // scale\n x = 480, y = 250, // translate\n lambda = 0, phi = 0, // center\n deltaLambda = 0, deltaPhi = 0, deltaGamma = 0, rotate, // pre-rotate\n alpha = 0, // post-rotate\n theta = null, preclip = clipAntimeridian, // pre-clip angle\n x0 = null, y0, x1, y1, postclip = identity, // post-clip extent\n delta2 = 0.5, // precision\n projectResample,\n projectTransform,\n projectRotateTransform,\n cache,\n cacheStream;\n\n function projection(point) {\n return projectRotateTransform(point[0] * radians, point[1] * radians);\n }\n\n function invert(point) {\n point = projectRotateTransform.invert(point[0], point[1]);\n return point && [point[0] * degrees, point[1] * degrees];\n }\n\n projection.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = transformRadians(transformRotate(rotate)(preclip(projectResample(postclip(cacheStream = stream)))));\n };\n\n projection.preclip = function(_) {\n return arguments.length ? (preclip = _, theta = undefined, reset()) : preclip;\n };\n\n projection.postclip = function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n };\n\n projection.clipAngle = function(_) {\n return arguments.length ? (preclip = +_ ? clipCircle(theta = _ * radians) : (theta = null, clipAntimeridian), reset()) : theta * degrees;\n };\n\n projection.clipExtent = function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n projection.scale = function(_) {\n return arguments.length ? (k = +_, recenter()) : k;\n };\n\n projection.translate = function(_) {\n return arguments.length ? (x = +_[0], y = +_[1], recenter()) : [x, y];\n };\n\n projection.center = function(_) {\n return arguments.length ? (lambda = _[0] % 360 * radians, phi = _[1] % 360 * radians, recenter()) : [lambda * degrees, phi * degrees];\n };\n\n projection.rotate = function(_) {\n return arguments.length ? (deltaLambda = _[0] % 360 * radians, deltaPhi = _[1] % 360 * radians, deltaGamma = _.length > 2 ? _[2] % 360 * radians : 0, recenter()) : [deltaLambda * degrees, deltaPhi * degrees, deltaGamma * degrees];\n };\n\n projection.angle = function(_) {\n return arguments.length ? (alpha = _ % 360 * radians, recenter()) : alpha * degrees;\n };\n\n projection.precision = function(_) {\n return arguments.length ? (projectResample = resample(projectTransform, delta2 = _ * _), reset()) : sqrt(delta2);\n };\n\n projection.fitExtent = function(extent, object) {\n return fitExtent(projection, extent, object);\n };\n\n projection.fitSize = function(size, object) {\n return fitSize(projection, size, object);\n };\n\n projection.fitWidth = function(width, object) {\n return fitWidth(projection, width, object);\n };\n\n projection.fitHeight = function(height, object) {\n return fitHeight(projection, height, object);\n };\n\n function recenter() {\n var center = scaleTranslateRotate(k, 0, 0, alpha).apply(null, project(lambda, phi)),\n transform = (alpha ? scaleTranslateRotate : scaleTranslate)(k, x - center[0], y - center[1], alpha);\n rotate = rotateRadians(deltaLambda, deltaPhi, deltaGamma);\n projectTransform = compose(project, transform);\n projectRotateTransform = compose(rotate, projectTransform);\n projectResample = resample(projectTransform, delta2);\n return reset();\n }\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return function() {\n project = projectAt.apply(this, arguments);\n projection.invert = project.invert && invert;\n return recenter();\n };\n}\n","import {degrees, pi, radians} from \"../math\";\nimport {projectionMutator} from \"./index\";\n\nexport function conicProjection(projectAt) {\n var phi0 = 0,\n phi1 = pi / 3,\n m = projectionMutator(projectAt),\n p = m(phi0, phi1);\n\n p.parallels = function(_) {\n return arguments.length ? m(phi0 = _[0] * radians, phi1 = _[1] * radians) : [phi0 * degrees, phi1 * degrees];\n };\n\n return p;\n}\n","import {asin, cos, sin} from \"../math\";\n\nexport function cylindricalEqualAreaRaw(phi0) {\n var cosPhi0 = cos(phi0);\n\n function forward(lambda, phi) {\n return [lambda * cosPhi0, sin(phi) / cosPhi0];\n }\n\n forward.invert = function(x, y) {\n return [x / cosPhi0, asin(y * cosPhi0)];\n };\n\n return forward;\n}\n","import {abs, asin, atan2, cos, epsilon, sign, sin, sqrt} from \"../math\";\nimport {conicProjection} from \"./conic\";\nimport {cylindricalEqualAreaRaw} from \"./cylindricalEqualArea\";\n\nexport function conicEqualAreaRaw(y0, y1) {\n var sy0 = sin(y0), n = (sy0 + sin(y1)) / 2;\n\n // Are the parallels symmetrical around the Equator?\n if (abs(n) < epsilon) return cylindricalEqualAreaRaw(y0);\n\n var c = 1 + sy0 * (2 * n - sy0), r0 = sqrt(c) / n;\n\n function project(x, y) {\n var r = sqrt(c - 2 * n * sin(y)) / n;\n return [r * sin(x *= n), r0 - r * cos(x)];\n }\n\n project.invert = function(x, y) {\n var r0y = r0 - y;\n return [atan2(x, abs(r0y)) / n * sign(r0y), asin((c - (x * x + r0y * r0y) * n * n) / (2 * n))];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEqualAreaRaw)\n .scale(155.424)\n .center([0, 33.6442]);\n}\n","import conicEqualArea from \"./conicEqualArea\";\n\nexport default function() {\n return conicEqualArea()\n .parallels([29.5, 45.5])\n .scale(1070)\n .translate([480, 250])\n .rotate([96, 0])\n .center([-0.6, 38.7]);\n}\n","import {epsilon} from \"../math\";\nimport albers from \"./albers\";\nimport conicEqualArea from \"./conicEqualArea\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit\";\n\n// The projections must have mutually exclusive clip regions on the sphere,\n// as this will avoid emitting interleaving lines and polygons.\nfunction multiplex(streams) {\n var n = streams.length;\n return {\n point: function(x, y) { var i = -1; while (++i < n) streams[i].point(x, y); },\n sphere: function() { var i = -1; while (++i < n) streams[i].sphere(); },\n lineStart: function() { var i = -1; while (++i < n) streams[i].lineStart(); },\n lineEnd: function() { var i = -1; while (++i < n) streams[i].lineEnd(); },\n polygonStart: function() { var i = -1; while (++i < n) streams[i].polygonStart(); },\n polygonEnd: function() { var i = -1; while (++i < n) streams[i].polygonEnd(); }\n };\n}\n\n// A composite projection for the United States, configured by default for\n// 960×500. The projection also works quite well at 960×600 if you change the\n// scale to 1285 and adjust the translate accordingly. The set of standard\n// parallels for each region comes from USGS, which is published here:\n// http://egsc.usgs.gov/isb/pubs/MapProjections/projections.html#albers\nexport default function() {\n var cache,\n cacheStream,\n lower48 = albers(), lower48Point,\n alaska = conicEqualArea().rotate([154, 0]).center([-2, 58.5]).parallels([55, 65]), alaskaPoint, // EPSG:3338\n hawaii = conicEqualArea().rotate([157, 0]).center([-3, 19.9]).parallels([8, 18]), hawaiiPoint, // ESRI:102007\n point, pointStream = {point: function(x, y) { point = [x, y]; }};\n\n function albersUsa(coordinates) {\n var x = coordinates[0], y = coordinates[1];\n return point = null,\n (lower48Point.point(x, y), point)\n || (alaskaPoint.point(x, y), point)\n || (hawaiiPoint.point(x, y), point);\n }\n\n albersUsa.invert = function(coordinates) {\n var k = lower48.scale(),\n t = lower48.translate(),\n x = (coordinates[0] - t[0]) / k,\n y = (coordinates[1] - t[1]) / k;\n return (y >= 0.120 && y < 0.234 && x >= -0.425 && x < -0.214 ? alaska\n : y >= 0.166 && y < 0.234 && x >= -0.214 && x < -0.115 ? hawaii\n : lower48).invert(coordinates);\n };\n\n albersUsa.stream = function(stream) {\n return cache && cacheStream === stream ? cache : cache = multiplex([lower48.stream(cacheStream = stream), alaska.stream(stream), hawaii.stream(stream)]);\n };\n\n albersUsa.precision = function(_) {\n if (!arguments.length) return lower48.precision();\n lower48.precision(_), alaska.precision(_), hawaii.precision(_);\n return reset();\n };\n\n albersUsa.scale = function(_) {\n if (!arguments.length) return lower48.scale();\n lower48.scale(_), alaska.scale(_ * 0.35), hawaii.scale(_);\n return albersUsa.translate(lower48.translate());\n };\n\n albersUsa.translate = function(_) {\n if (!arguments.length) return lower48.translate();\n var k = lower48.scale(), x = +_[0], y = +_[1];\n\n lower48Point = lower48\n .translate(_)\n .clipExtent([[x - 0.455 * k, y - 0.238 * k], [x + 0.455 * k, y + 0.238 * k]])\n .stream(pointStream);\n\n alaskaPoint = alaska\n .translate([x - 0.307 * k, y + 0.201 * k])\n .clipExtent([[x - 0.425 * k + epsilon, y + 0.120 * k + epsilon], [x - 0.214 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n hawaiiPoint = hawaii\n .translate([x - 0.205 * k, y + 0.212 * k])\n .clipExtent([[x - 0.214 * k + epsilon, y + 0.166 * k + epsilon], [x - 0.115 * k - epsilon, y + 0.234 * k - epsilon]])\n .stream(pointStream);\n\n return reset();\n };\n\n albersUsa.fitExtent = function(extent, object) {\n return fitExtent(albersUsa, extent, object);\n };\n\n albersUsa.fitSize = function(size, object) {\n return fitSize(albersUsa, size, object);\n };\n\n albersUsa.fitWidth = function(width, object) {\n return fitWidth(albersUsa, width, object);\n };\n\n albersUsa.fitHeight = function(height, object) {\n return fitHeight(albersUsa, height, object);\n };\n\n function reset() {\n cache = cacheStream = null;\n return albersUsa;\n }\n\n return albersUsa.scale(1070);\n}\n","import {asin, atan2, cos, sin, sqrt} from \"../math\";\n\nexport function azimuthalRaw(scale) {\n return function(x, y) {\n var cx = cos(x),\n cy = cos(y),\n k = scale(cx * cy);\n return [\n k * cy * sin(x),\n k * sin(y)\n ];\n }\n}\n\nexport function azimuthalInvert(angle) {\n return function(x, y) {\n var z = sqrt(x * x + y * y),\n c = angle(z),\n sc = sin(c),\n cc = cos(c);\n return [\n atan2(x * sc, z * cc),\n asin(z && y * sc / z)\n ];\n }\n}\n","import {asin, sqrt} from \"../math\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport var azimuthalEqualAreaRaw = azimuthalRaw(function(cxcy) {\n return sqrt(2 / (1 + cxcy));\n});\n\nazimuthalEqualAreaRaw.invert = azimuthalInvert(function(z) {\n return 2 * asin(z / 2);\n});\n\nexport default function() {\n return projection(azimuthalEqualAreaRaw)\n .scale(124.75)\n .clipAngle(180 - 1e-3);\n}\n","import {acos, sin} from \"../math\";\nimport {azimuthalRaw, azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport var azimuthalEquidistantRaw = azimuthalRaw(function(c) {\n return (c = acos(c)) && c / sin(c);\n});\n\nazimuthalEquidistantRaw.invert = azimuthalInvert(function(z) {\n return z;\n});\n\nexport default function() {\n return projection(azimuthalEquidistantRaw)\n .scale(79.4188)\n .clipAngle(180 - 1e-3);\n}\n","import {atan, exp, halfPi, log, pi, tan, tau} from \"../math\";\nimport rotation from \"../rotation\";\nimport projection from \"./index\";\n\nexport function mercatorRaw(lambda, phi) {\n return [lambda, log(tan((halfPi + phi) / 2))];\n}\n\nmercatorRaw.invert = function(x, y) {\n return [x, 2 * atan(exp(y)) - halfPi];\n};\n\nexport default function() {\n return mercatorProjection(mercatorRaw)\n .scale(961 / tau);\n}\n\nexport function mercatorProjection(project) {\n var m = projection(project),\n center = m.center,\n scale = m.scale,\n translate = m.translate,\n clipExtent = m.clipExtent,\n x0 = null, y0, x1, y1; // clip extent\n\n m.scale = function(_) {\n return arguments.length ? (scale(_), reclip()) : scale();\n };\n\n m.translate = function(_) {\n return arguments.length ? (translate(_), reclip()) : translate();\n };\n\n m.center = function(_) {\n return arguments.length ? (center(_), reclip()) : center();\n };\n\n m.clipExtent = function(_) {\n return arguments.length ? ((_ == null ? x0 = y0 = x1 = y1 = null : (x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1])), reclip()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n };\n\n function reclip() {\n var k = pi * scale(),\n t = m(rotation(m.rotate()).invert([0, 0]));\n return clipExtent(x0 == null\n ? [[t[0] - k, t[1] - k], [t[0] + k, t[1] + k]] : project === mercatorRaw\n ? [[Math.max(t[0] - k, x0), y0], [Math.min(t[0] + k, x1), y1]]\n : [[x0, Math.max(t[1] - k, y0)], [x1, Math.min(t[1] + k, y1)]]);\n }\n\n return reclip();\n}\n","import {abs, atan, atan2, cos, epsilon, halfPi, log, pow, sign, sin, sqrt, tan} from \"../math\";\nimport {conicProjection} from \"./conic\";\nimport {mercatorRaw} from \"./mercator\";\n\nfunction tany(y) {\n return tan((halfPi + y) / 2);\n}\n\nexport function conicConformalRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : log(cy0 / cos(y1)) / log(tany(y1) / tany(y0)),\n f = cy0 * pow(tany(y0), n) / n;\n\n if (!n) return mercatorRaw;\n\n function project(x, y) {\n if (f > 0) { if (y < -halfPi + epsilon) y = -halfPi + epsilon; }\n else { if (y > halfPi - epsilon) y = halfPi - epsilon; }\n var r = f / pow(tany(y), n);\n return [r * sin(n * x), f - r * cos(n * x)];\n }\n\n project.invert = function(x, y) {\n var fy = f - y, r = sign(n) * sqrt(x * x + fy * fy);\n return [atan2(x, abs(fy)) / n * sign(fy), 2 * atan(pow(f / r, 1 / n)) - halfPi];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicConformalRaw)\n .scale(109.5)\n .parallels([30, 30]);\n}\n","import projection from \"./index\";\n\nexport function equirectangularRaw(lambda, phi) {\n return [lambda, phi];\n}\n\nequirectangularRaw.invert = equirectangularRaw;\n\nexport default function() {\n return projection(equirectangularRaw)\n .scale(152.63);\n}\n","import {abs, atan2, cos, epsilon, sign, sin, sqrt} from \"../math\";\nimport {conicProjection} from \"./conic\";\nimport {equirectangularRaw} from \"./equirectangular\";\n\nexport function conicEquidistantRaw(y0, y1) {\n var cy0 = cos(y0),\n n = y0 === y1 ? sin(y0) : (cy0 - cos(y1)) / (y1 - y0),\n g = cy0 / n + y0;\n\n if (abs(n) < epsilon) return equirectangularRaw;\n\n function project(x, y) {\n var gy = g - y, nx = n * x;\n return [gy * sin(nx), g - gy * cos(nx)];\n }\n\n project.invert = function(x, y) {\n var gy = g - y;\n return [atan2(x, abs(gy)) / n * sign(gy), g - sign(n) * sqrt(x * x + gy * gy)];\n };\n\n return project;\n}\n\nexport default function() {\n return conicProjection(conicEquidistantRaw)\n .scale(131.154)\n .center([0, 13.9389]);\n}\n","import {atan, cos, sin} from \"../math\";\nimport {azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport function gnomonicRaw(x, y) {\n var cy = cos(y), k = cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\ngnomonicRaw.invert = azimuthalInvert(atan);\n\nexport default function() {\n return projection(gnomonicRaw)\n .scale(144.049)\n .clipAngle(60);\n}\n","import clipRectangle from \"../clip/rectangle\";\nimport identity from \"../identity\";\nimport {transformer} from \"../transform\";\nimport {fitExtent, fitSize, fitWidth, fitHeight} from \"./fit\";\n\nfunction scaleTranslate(kx, ky, tx, ty) {\n return kx === 1 && ky === 1 && tx === 0 && ty === 0 ? identity : transformer({\n point: function(x, y) {\n this.stream.point(x * kx + tx, y * ky + ty);\n }\n });\n}\n\nexport default function() {\n var k = 1, tx = 0, ty = 0, sx = 1, sy = 1, transform = identity, // scale, translate and reflect\n x0 = null, y0, x1, y1, // clip extent\n postclip = identity,\n cache,\n cacheStream,\n projection;\n\n function reset() {\n cache = cacheStream = null;\n return projection;\n }\n\n return projection = {\n stream: function(stream) {\n return cache && cacheStream === stream ? cache : cache = transform(postclip(cacheStream = stream));\n },\n postclip: function(_) {\n return arguments.length ? (postclip = _, x0 = y0 = x1 = y1 = null, reset()) : postclip;\n },\n clipExtent: function(_) {\n return arguments.length ? (postclip = _ == null ? (x0 = y0 = x1 = y1 = null, identity) : clipRectangle(x0 = +_[0][0], y0 = +_[0][1], x1 = +_[1][0], y1 = +_[1][1]), reset()) : x0 == null ? null : [[x0, y0], [x1, y1]];\n },\n scale: function(_) {\n return arguments.length ? (transform = scaleTranslate((k = +_) * sx, k * sy, tx, ty), reset()) : k;\n },\n translate: function(_) {\n return arguments.length ? (transform = scaleTranslate(k * sx, k * sy, tx = +_[0], ty = +_[1]), reset()) : [tx, ty];\n },\n reflectX: function(_) {\n return arguments.length ? (transform = scaleTranslate(k * (sx = _ ? -1 : 1), k * sy, tx, ty), reset()) : sx < 0;\n },\n reflectY: function(_) {\n return arguments.length ? (transform = scaleTranslate(k * sx, k * (sy = _ ? -1 : 1), tx, ty), reset()) : sy < 0;\n },\n fitExtent: function(extent, object) {\n return fitExtent(projection, extent, object);\n },\n fitSize: function(size, object) {\n return fitSize(projection, size, object);\n },\n fitWidth: function(width, object) {\n return fitWidth(projection, width, object);\n },\n fitHeight: function(height, object) {\n return fitHeight(projection, height, object);\n }\n };\n}\n","import projection from \"./index\";\nimport {abs, epsilon} from \"../math\";\n\nexport function naturalEarth1Raw(lambda, phi) {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n return [\n lambda * (0.8707 - 0.131979 * phi2 + phi4 * (-0.013791 + phi4 * (0.003971 * phi2 - 0.001529 * phi4))),\n phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4)))\n ];\n}\n\nnaturalEarth1Raw.invert = function(x, y) {\n var phi = y, i = 25, delta;\n do {\n var phi2 = phi * phi, phi4 = phi2 * phi2;\n phi -= delta = (phi * (1.007226 + phi2 * (0.015085 + phi4 * (-0.044475 + 0.028874 * phi2 - 0.005916 * phi4))) - y) /\n (1.007226 + phi2 * (0.015085 * 3 + phi4 * (-0.044475 * 7 + 0.028874 * 9 * phi2 - 0.005916 * 11 * phi4)));\n } while (abs(delta) > epsilon && --i > 0);\n return [\n x / (0.8707 + (phi2 = phi * phi) * (-0.131979 + phi2 * (-0.013791 + phi2 * phi2 * phi2 * (0.003971 - 0.001529 * phi2)))),\n phi\n ];\n};\n\nexport default function() {\n return projection(naturalEarth1Raw)\n .scale(175.295);\n}\n","import {asin, cos, epsilon, sin} from \"../math\";\nimport {azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport function orthographicRaw(x, y) {\n return [cos(y) * sin(x), sin(y)];\n}\n\northographicRaw.invert = azimuthalInvert(asin);\n\nexport default function() {\n return projection(orthographicRaw)\n .scale(249.5)\n .clipAngle(90 + epsilon);\n}\n","import {atan, cos, sin} from \"../math\";\nimport {azimuthalInvert} from \"./azimuthal\";\nimport projection from \"./index\";\n\nexport function stereographicRaw(x, y) {\n var cy = cos(y), k = 1 + cos(x) * cy;\n return [cy * sin(x) / k, sin(y) / k];\n}\n\nstereographicRaw.invert = azimuthalInvert(function(z) {\n return 2 * atan(z);\n});\n\nexport default function() {\n return projection(stereographicRaw)\n .scale(250)\n .clipAngle(142);\n}\n","import {atan, exp, halfPi, log, tan} from \"../math\";\nimport {mercatorProjection} from \"./mercator\";\n\nexport function transverseMercatorRaw(lambda, phi) {\n return [log(tan((halfPi + phi) / 2)), -lambda];\n}\n\ntransverseMercatorRaw.invert = function(x, y) {\n return [-y, 2 * atan(exp(x)) - halfPi];\n};\n\nexport default function() {\n var m = mercatorProjection(transverseMercatorRaw),\n center = m.center,\n rotate = m.rotate;\n\n m.center = function(_) {\n return arguments.length ? center([-_[1], _[0]]) : (_ = center(), [_[1], -_[0]]);\n };\n\n m.rotate = function(_) {\n return arguments.length ? rotate([_[0], _[1], _.length > 2 ? _[2] + 90 : 90]) : (_ = rotate(), [_[0], _[1], _[2] - 90]);\n };\n\n return rotate([0, 0, 90])\n .scale(159.155);\n}\n","import {\n geoAlbers,\n geoAlbersUsa,\n geoAzimuthalEqualArea,\n geoAzimuthalEquidistant,\n geoConicConformal,\n geoConicEqualArea,\n geoConicEquidistant,\n geoEquirectangular,\n geoGnomonic,\n geoIdentity,\n geoMercator,\n geoNaturalEarth1,\n geoOrthographic,\n geoStereographic,\n geoTransverseMercator,\n geoPath\n} from 'd3-geo';\n\nvar defaultPath = geoPath();\n\nexport var projectionProperties = [\n // standard properties in d3-geo\n 'clipAngle',\n 'clipExtent',\n 'scale',\n 'translate',\n 'center',\n 'rotate',\n 'parallels',\n 'precision',\n 'reflectX',\n 'reflectY',\n\n // extended properties in d3-geo-projections\n 'coefficient',\n 'distance',\n 'fraction',\n 'lobes',\n 'parallel',\n 'radius',\n 'ratio',\n 'spacing',\n 'tilt'\n];\n\n/**\n * Augment projections with their type and a copy method.\n */\nfunction create(type, constructor) {\n return function projection() {\n var p = constructor();\n\n p.type = type;\n\n p.path = geoPath().projection(p);\n\n p.copy = p.copy || function() {\n var c = projection();\n projectionProperties.forEach(function(prop) {\n if (p.hasOwnProperty(prop)) c[prop](p[prop]());\n });\n c.path.pointRadius(p.path.pointRadius());\n return c;\n };\n\n return p;\n };\n}\n\nexport function projection(type, proj) {\n if (!type || typeof type !== 'string') {\n throw new Error('Projection type must be a name string.');\n }\n type = type.toLowerCase();\n if (arguments.length > 1) {\n projections[type] = create(type, proj);\n return this;\n } else {\n return projections.hasOwnProperty(type) ? projections[type] : null;\n }\n}\n\nexport function getProjectionPath(proj) {\n return (proj && proj.path) || defaultPath;\n}\n\nvar projections = {\n // base d3-geo projection types\n albers: geoAlbers,\n albersusa: geoAlbersUsa,\n azimuthalequalarea: geoAzimuthalEqualArea,\n azimuthalequidistant: geoAzimuthalEquidistant,\n conicconformal: geoConicConformal,\n conicequalarea: geoConicEqualArea,\n conicequidistant: geoConicEquidistant,\n equirectangular: geoEquirectangular,\n gnomonic: geoGnomonic,\n identity: geoIdentity,\n mercator: geoMercator,\n naturalEarth1: geoNaturalEarth1,\n orthographic: geoOrthographic,\n stereographic: geoStereographic,\n transversemercator: geoTransverseMercator\n};\n\nfor (var key in projections) {\n projection(key, projections[key]);\n}\n","import {Transform} from 'vega-dataflow';\nimport {getProjectionPath} from 'vega-projection';\nimport {inherits, identity} from 'vega-util';\n\n/**\n * Map GeoJSON data to an SVG path string.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {function(object): *} [params.field] - The field with GeoJSON data,\n * or null if the tuple itself is a GeoJSON feature.\n * @param {string} [params.as='path'] - The output field in which to store\n * the generated path data (default 'path').\n */\nexport default function GeoPath(params) {\n Transform.call(this, null, params);\n}\n\nGeoPath.Definition = {\n \"type\": \"GeoPath\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"projection\", \"type\": \"projection\" },\n { \"name\": \"field\", \"type\": \"field\" },\n { \"name\": \"pointRadius\", \"type\": \"number\", \"expr\": true },\n { \"name\": \"as\", \"type\": \"string\", \"default\": \"path\" }\n ]\n};\n\nvar prototype = inherits(GeoPath, Transform);\n\nprototype.transform = function(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n path = this.value,\n field = _.field || identity,\n as = _.as || 'path',\n flag = out.SOURCE;\n\n function set(t) { t[as] = path(field(t)); }\n\n if (!path || _.modified()) {\n // parameters updated, reset and reflow\n this.value = path = getProjectionPath(_.projection);\n out.materialize().reflow();\n } else {\n flag = field === identity || pulse.modified(field.fields)\n ? out.ADD_MOD\n : out.ADD;\n }\n\n var prev = initPath(path, _.pointRadius);\n out.visit(flag, set);\n path.pointRadius(prev);\n\n return out.modifies(as);\n};\n\nfunction initPath(path, pointRadius) {\n var prev = path.pointRadius();\n path.context(null);\n if (pointRadius != null) {\n path.pointRadius(pointRadius);\n }\n return prev;\n}\n","import {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Geo-code a longitude/latitude point to an x/y coordinate.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {Array} params.fields - A two-element array of\n * field accessors for the longitude and latitude values.\n * @param {Array} [params.as] - A two-element array of field names\n * under which to store the result. Defaults to ['x','y'].\n */\nexport default function GeoPoint(params) {\n Transform.call(this, null, params);\n}\n\nGeoPoint.Definition = {\n \"type\": \"GeoPoint\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"projection\", \"type\": \"projection\", \"required\": true },\n { \"name\": \"fields\", \"type\": \"field\", \"array\": true, \"required\": true, \"length\": 2 },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": 2, \"default\": [\"x\", \"y\"] }\n ]\n};\n\nvar prototype = inherits(GeoPoint, Transform);\n\nprototype.transform = function(_, pulse) {\n var proj = _.projection,\n lon = _.fields[0],\n lat = _.fields[1],\n as = _.as || ['x', 'y'],\n x = as[0],\n y = as[1],\n mod;\n\n function set(t) {\n var xy = proj([lon(t), lat(t)]);\n if (xy) {\n t[x] = xy[0];\n t[y] = xy[1];\n } else {\n t[x] = undefined;\n t[y] = undefined;\n }\n }\n\n if (_.modified()) {\n // parameters updated, reflow\n pulse = pulse.materialize().reflow(true).visit(pulse.SOURCE, set);\n } else {\n mod = pulse.modified(lon.fields) || pulse.modified(lat.fields);\n pulse.visit(mod ? pulse.ADD_MOD : pulse.ADD, set);\n }\n\n return pulse.modifies(as);\n};\n","import {Transform} from 'vega-dataflow';\nimport {getProjectionPath} from 'vega-projection';\nimport {inherits, field} from 'vega-util';\n\n/**\n * Annotate items with a geopath shape generator.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {function(number, number): *} params.projection - The cartographic\n * projection to apply.\n * @param {function(object): *} [params.field] - The field with GeoJSON data,\n * or null if the tuple itself is a GeoJSON feature.\n * @param {string} [params.as='shape'] - The output field in which to store\n * the generated path data (default 'shape').\n */\nexport default function GeoShape(params) {\n Transform.call(this, null, params);\n}\n\nGeoShape.Definition = {\n \"type\": \"GeoShape\",\n \"metadata\": {\"modifies\": true, \"nomod\": true},\n \"params\": [\n { \"name\": \"projection\", \"type\": \"projection\" },\n { \"name\": \"field\", \"type\": \"field\", \"default\": \"datum\" },\n { \"name\": \"pointRadius\", \"type\": \"number\", \"expr\": true },\n { \"name\": \"as\", \"type\": \"string\", \"default\": \"shape\" }\n ]\n};\n\nvar prototype = inherits(GeoShape, Transform);\n\nprototype.transform = function(_, pulse) {\n var out = pulse.fork(pulse.ALL),\n shape = this.value,\n as = _.as || 'shape',\n flag = out.ADD;\n\n if (!shape || _.modified()) {\n // parameters updated, reset and reflow\n this.value = shape = shapeGenerator(\n getProjectionPath(_.projection),\n _.field || field('datum'),\n _.pointRadius\n );\n out.materialize().reflow();\n flag = out.SOURCE;\n }\n\n out.visit(flag, function(t) { t[as] = shape; });\n\n return out.modifies(as);\n};\n\nfunction shapeGenerator(path, field, pointRadius) {\n var shape = pointRadius == null\n ? function(_) { return path(field(_)); }\n : function(_) {\n var prev = path.pointRadius(),\n value = path.pointRadius(pointRadius)(field(_));\n path.pointRadius(prev);\n return value;\n };\n shape.context = function(_) {\n path.context(_);\n return shape;\n };\n\n return shape;\n}\n","import {Transform, ingest, replace} from 'vega-dataflow';\nimport {inherits, isFunction} from 'vega-util';\nimport {geoGraticule} from 'd3-geo';\n\n/**\n * GeoJSON feature generator for creating graticules.\n * @constructor\n */\nexport default function Graticule(params) {\n Transform.call(this, [], params);\n this.generator = geoGraticule();\n}\n\nGraticule.Definition = {\n \"type\": \"Graticule\",\n \"metadata\": {\"changes\": true},\n \"params\": [\n { \"name\": \"extent\", \"type\": \"array\", \"array\": true, \"length\": 2,\n \"content\": {\"type\": \"number\", \"array\": true, \"length\": 2} },\n { \"name\": \"extentMajor\", \"type\": \"array\", \"array\": true, \"length\": 2,\n \"content\": {\"type\": \"number\", \"array\": true, \"length\": 2} },\n { \"name\": \"extentMinor\", \"type\": \"array\", \"array\": true, \"length\": 2,\n \"content\": {\"type\": \"number\", \"array\": true, \"length\": 2} },\n { \"name\": \"step\", \"type\": \"number\", \"array\": true, \"length\": 2 },\n { \"name\": \"stepMajor\", \"type\": \"number\", \"array\": true, \"length\": 2, \"default\": [90, 360] },\n { \"name\": \"stepMinor\", \"type\": \"number\", \"array\": true, \"length\": 2, \"default\": [10, 10] },\n { \"name\": \"precision\", \"type\": \"number\", \"default\": 2.5 }\n ]\n};\n\nvar prototype = inherits(Graticule, Transform);\n\nprototype.transform = function(_, pulse) {\n var src = this.value,\n gen = this.generator, t;\n\n if (!src.length || _.modified()) {\n for (var prop in _) {\n if (isFunction(gen[prop])) {\n gen[prop](_[prop]);\n }\n }\n }\n\n t = gen();\n if (src.length) {\n pulse.mod.push(replace(src[0], t));\n } else {\n pulse.add.push(ingest(t));\n }\n src[0] = t;\n\n return pulse;\n};\n","import {Feature, FeatureCollection} from './constants';\nimport {Transform} from 'vega-dataflow';\nimport {projection, projectionProperties} from 'vega-projection';\nimport {array, error, inherits, isFunction} from 'vega-util';\n\n/**\n * Maintains a cartographic projection.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nexport default function Projection(params) {\n Transform.call(this, null, params);\n this.modified(true); // always treat as modified\n}\n\nvar prototype = inherits(Projection, Transform);\n\nprototype.transform = function(_, pulse) {\n var proj = this.value;\n\n if (!proj || _.modified('type')) {\n this.value = (proj = create(_.type));\n projectionProperties.forEach(function(prop) {\n if (_[prop] != null) set(proj, prop, _[prop]);\n });\n } else {\n projectionProperties.forEach(function(prop) {\n if (_.modified(prop)) set(proj, prop, _[prop]);\n });\n }\n\n if (_.pointRadius != null) proj.path.pointRadius(_.pointRadius);\n if (_.fit) fit(proj, _);\n\n return pulse.fork(pulse.NO_SOURCE | pulse.NO_FIELDS);\n};\n\nfunction fit(proj, _) {\n var data = collectGeoJSON(_.fit);\n _.extent ? proj.fitExtent(_.extent, data)\n : _.size ? proj.fitSize(_.size, data) : 0;\n}\n\nfunction create(type) {\n var constructor = projection((type || 'mercator').toLowerCase());\n if (!constructor) error('Unrecognized projection type: ' + type);\n return constructor();\n}\n\nfunction set(proj, key, value) {\n if (isFunction(proj[key])) proj[key](value);\n}\n\nexport function collectGeoJSON(data) {\n data = array(data);\n return data.length === 1 ? data[0]\n : {\n type: FeatureCollection,\n features: data.reduce((a, f) => a.concat(featurize(f)), [])\n };\n}\n\nfunction featurize(f) {\n return f.type === FeatureCollection\n ? f.features\n : array(f).filter(d => d != null).map(\n d => d.type === Feature ? d : {type: Feature, geometry: d}\n );\n}\n","export default function(x, y) {\n var nodes;\n\n if (x == null) x = 0;\n if (y == null) y = 0;\n\n function force() {\n var i,\n n = nodes.length,\n node,\n sx = 0,\n sy = 0;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], sx += node.x, sy += node.y;\n }\n\n for (sx = sx / n - x, sy = sy / n - y, i = 0; i < n; ++i) {\n node = nodes[i], node.x -= sx, node.y -= sy;\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = +_, force) : x;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = +_, force) : y;\n };\n\n return force;\n}\n","export default function(d) {\n var x = +this._x.call(null, d),\n y = +this._y.call(null, d);\n return add(this.cover(x, y), x, y, d);\n}\n\nfunction add(tree, x, y, d) {\n if (isNaN(x) || isNaN(y)) return tree; // ignore invalid points\n\n var parent,\n node = tree._root,\n leaf = {data: d},\n x0 = tree._x0,\n y0 = tree._y0,\n x1 = tree._x1,\n y1 = tree._y1,\n xm,\n ym,\n xp,\n yp,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return tree._root = leaf, tree;\n\n // Find the existing leaf for the new point, or add it.\n while (node.length) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (parent = node, !(node = node[i = bottom << 1 | right])) return parent[i] = leaf, tree;\n }\n\n // Is the new point is exactly coincident with the existing point?\n xp = +tree._x.call(null, node.data);\n yp = +tree._y.call(null, node.data);\n if (x === xp && y === yp) return leaf.next = node, parent ? parent[i] = leaf : tree._root = leaf, tree;\n\n // Otherwise, split the leaf node until the old and new point are separated.\n do {\n parent = parent ? parent[i] = new Array(4) : tree._root = new Array(4);\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n } while ((i = bottom << 1 | right) === (j = (yp >= ym) << 1 | (xp >= xm)));\n return parent[j] = node, parent[i] = leaf, tree;\n}\n\nexport function addAll(data) {\n var d, i, n = data.length,\n x,\n y,\n xz = new Array(n),\n yz = new Array(n),\n x0 = Infinity,\n y0 = Infinity,\n x1 = -Infinity,\n y1 = -Infinity;\n\n // Compute the points and their extent.\n for (i = 0; i < n; ++i) {\n if (isNaN(x = +this._x.call(null, d = data[i])) || isNaN(y = +this._y.call(null, d))) continue;\n xz[i] = x;\n yz[i] = y;\n if (x < x0) x0 = x;\n if (x > x1) x1 = x;\n if (y < y0) y0 = y;\n if (y > y1) y1 = y;\n }\n\n // If there were no (valid) points, abort.\n if (x0 > x1 || y0 > y1) return this;\n\n // Expand the tree to cover the new points.\n this.cover(x0, y0).cover(x1, y1);\n\n // Add the new points.\n for (i = 0; i < n; ++i) {\n add(this, xz[i], yz[i], data[i]);\n }\n\n return this;\n}\n","export default function(x, y) {\n if (isNaN(x = +x) || isNaN(y = +y)) return this; // ignore invalid points\n\n var x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1;\n\n // If the quadtree has no extent, initialize them.\n // Integer extent are necessary so that if we later double the extent,\n // the existing quadrant boundaries don’t change due to floating point error!\n if (isNaN(x0)) {\n x1 = (x0 = Math.floor(x)) + 1;\n y1 = (y0 = Math.floor(y)) + 1;\n }\n\n // Otherwise, double repeatedly to cover.\n else {\n var z = x1 - x0,\n node = this._root,\n parent,\n i;\n\n while (x0 > x || x >= x1 || y0 > y || y >= y1) {\n i = (y < y0) << 1 | (x < x0);\n parent = new Array(4), parent[i] = node, node = parent, z *= 2;\n switch (i) {\n case 0: x1 = x0 + z, y1 = y0 + z; break;\n case 1: x0 = x1 - z, y1 = y0 + z; break;\n case 2: x1 = x0 + z, y0 = y1 - z; break;\n case 3: x0 = x1 - z, y0 = y1 - z; break;\n }\n }\n\n if (this._root && this._root.length) this._root = node;\n }\n\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n return this;\n}\n","export default function() {\n var data = [];\n this.visit(function(node) {\n if (!node.length) do data.push(node.data); while (node = node.next)\n });\n return data;\n}\n","export default function(_) {\n return arguments.length\n ? this.cover(+_[0][0], +_[0][1]).cover(+_[1][0], +_[1][1])\n : isNaN(this._x0) ? undefined : [[this._x0, this._y0], [this._x1, this._y1]];\n}\n","export default function(node, x0, y0, x1, y1) {\n this.node = node;\n this.x0 = x0;\n this.y0 = y0;\n this.x1 = x1;\n this.y1 = y1;\n}\n","import Quad from \"./quad\";\n\nexport default function(x, y, radius) {\n var data,\n x0 = this._x0,\n y0 = this._y0,\n x1,\n y1,\n x2,\n y2,\n x3 = this._x1,\n y3 = this._y1,\n quads = [],\n node = this._root,\n q,\n i;\n\n if (node) quads.push(new Quad(node, x0, y0, x3, y3));\n if (radius == null) radius = Infinity;\n else {\n x0 = x - radius, y0 = y - radius;\n x3 = x + radius, y3 = y + radius;\n radius *= radius;\n }\n\n while (q = quads.pop()) {\n\n // Stop searching if this quadrant can’t contain a closer node.\n if (!(node = q.node)\n || (x1 = q.x0) > x3\n || (y1 = q.y0) > y3\n || (x2 = q.x1) < x0\n || (y2 = q.y1) < y0) continue;\n\n // Bisect the current quadrant.\n if (node.length) {\n var xm = (x1 + x2) / 2,\n ym = (y1 + y2) / 2;\n\n quads.push(\n new Quad(node[3], xm, ym, x2, y2),\n new Quad(node[2], x1, ym, xm, y2),\n new Quad(node[1], xm, y1, x2, ym),\n new Quad(node[0], x1, y1, xm, ym)\n );\n\n // Visit the closest quadrant first.\n if (i = (y >= ym) << 1 | (x >= xm)) {\n q = quads[quads.length - 1];\n quads[quads.length - 1] = quads[quads.length - 1 - i];\n quads[quads.length - 1 - i] = q;\n }\n }\n\n // Visit this point. (Visiting coincident points isn’t necessary!)\n else {\n var dx = x - +this._x.call(null, node.data),\n dy = y - +this._y.call(null, node.data),\n d2 = dx * dx + dy * dy;\n if (d2 < radius) {\n var d = Math.sqrt(radius = d2);\n x0 = x - d, y0 = y - d;\n x3 = x + d, y3 = y + d;\n data = node.data;\n }\n }\n }\n\n return data;\n}\n","export default function(d) {\n if (isNaN(x = +this._x.call(null, d)) || isNaN(y = +this._y.call(null, d))) return this; // ignore invalid points\n\n var parent,\n node = this._root,\n retainer,\n previous,\n next,\n x0 = this._x0,\n y0 = this._y0,\n x1 = this._x1,\n y1 = this._y1,\n x,\n y,\n xm,\n ym,\n right,\n bottom,\n i,\n j;\n\n // If the tree is empty, initialize the root as a leaf.\n if (!node) return this;\n\n // Find the leaf node for the point.\n // While descending, also retain the deepest parent with a non-removed sibling.\n if (node.length) while (true) {\n if (right = x >= (xm = (x0 + x1) / 2)) x0 = xm; else x1 = xm;\n if (bottom = y >= (ym = (y0 + y1) / 2)) y0 = ym; else y1 = ym;\n if (!(parent = node, node = node[i = bottom << 1 | right])) return this;\n if (!node.length) break;\n if (parent[(i + 1) & 3] || parent[(i + 2) & 3] || parent[(i + 3) & 3]) retainer = parent, j = i;\n }\n\n // Find the point to remove.\n while (node.data !== d) if (!(previous = node, node = node.next)) return this;\n if (next = node.next) delete node.next;\n\n // If there are multiple coincident points, remove just the point.\n if (previous) return (next ? previous.next = next : delete previous.next), this;\n\n // If this is the root point, remove it.\n if (!parent) return this._root = next, this;\n\n // Remove this leaf.\n next ? parent[i] = next : delete parent[i];\n\n // If the parent now contains exactly one leaf, collapse superfluous parents.\n if ((node = parent[0] || parent[1] || parent[2] || parent[3])\n && node === (parent[3] || parent[2] || parent[1] || parent[0])\n && !node.length) {\n if (retainer) retainer[j] = node;\n else this._root = node;\n }\n\n return this;\n}\n\nexport function removeAll(data) {\n for (var i = 0, n = data.length; i < n; ++i) this.remove(data[i]);\n return this;\n}\n","export default function() {\n return this._root;\n}\n","export default function() {\n var size = 0;\n this.visit(function(node) {\n if (!node.length) do ++size; while (node = node.next)\n });\n return size;\n}\n","import Quad from \"./quad\";\n\nexport default function(callback) {\n var quads = [], q, node = this._root, child, x0, y0, x1, y1;\n if (node) quads.push(new Quad(node, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n if (!callback(node = q.node, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1) && node.length) {\n var xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n }\n }\n return this;\n}\n","import Quad from \"./quad\";\n\nexport default function(callback) {\n var quads = [], next = [], q;\n if (this._root) quads.push(new Quad(this._root, this._x0, this._y0, this._x1, this._y1));\n while (q = quads.pop()) {\n var node = q.node;\n if (node.length) {\n var child, x0 = q.x0, y0 = q.y0, x1 = q.x1, y1 = q.y1, xm = (x0 + x1) / 2, ym = (y0 + y1) / 2;\n if (child = node[0]) quads.push(new Quad(child, x0, y0, xm, ym));\n if (child = node[1]) quads.push(new Quad(child, xm, y0, x1, ym));\n if (child = node[2]) quads.push(new Quad(child, x0, ym, xm, y1));\n if (child = node[3]) quads.push(new Quad(child, xm, ym, x1, y1));\n }\n next.push(q);\n }\n while (q = next.pop()) {\n callback(q.node, q.x0, q.y0, q.x1, q.y1);\n }\n return this;\n}\n","export function defaultX(d) {\n return d[0];\n}\n\nexport default function(_) {\n return arguments.length ? (this._x = _, this) : this._x;\n}\n","export function defaultY(d) {\n return d[1];\n}\n\nexport default function(_) {\n return arguments.length ? (this._y = _, this) : this._y;\n}\n","import tree_add, {addAll as tree_addAll} from \"./add\";\nimport tree_cover from \"./cover\";\nimport tree_data from \"./data\";\nimport tree_extent from \"./extent\";\nimport tree_find from \"./find\";\nimport tree_remove, {removeAll as tree_removeAll} from \"./remove\";\nimport tree_root from \"./root\";\nimport tree_size from \"./size\";\nimport tree_visit from \"./visit\";\nimport tree_visitAfter from \"./visitAfter\";\nimport tree_x, {defaultX} from \"./x\";\nimport tree_y, {defaultY} from \"./y\";\n\nexport default function quadtree(nodes, x, y) {\n var tree = new Quadtree(x == null ? defaultX : x, y == null ? defaultY : y, NaN, NaN, NaN, NaN);\n return nodes == null ? tree : tree.addAll(nodes);\n}\n\nfunction Quadtree(x, y, x0, y0, x1, y1) {\n this._x = x;\n this._y = y;\n this._x0 = x0;\n this._y0 = y0;\n this._x1 = x1;\n this._y1 = y1;\n this._root = undefined;\n}\n\nfunction leaf_copy(leaf) {\n var copy = {data: leaf.data}, next = copy;\n while (leaf = leaf.next) next = next.next = {data: leaf.data};\n return copy;\n}\n\nvar treeProto = quadtree.prototype = Quadtree.prototype;\n\ntreeProto.copy = function() {\n var copy = new Quadtree(this._x, this._y, this._x0, this._y0, this._x1, this._y1),\n node = this._root,\n nodes,\n child;\n\n if (!node) return copy;\n\n if (!node.length) return copy._root = leaf_copy(node), copy;\n\n nodes = [{source: node, target: copy._root = new Array(4)}];\n while (node = nodes.pop()) {\n for (var i = 0; i < 4; ++i) {\n if (child = node.source[i]) {\n if (child.length) nodes.push({source: child, target: node.target[i] = new Array(4)});\n else node.target[i] = leaf_copy(child);\n }\n }\n }\n\n return copy;\n};\n\ntreeProto.add = tree_add;\ntreeProto.addAll = tree_addAll;\ntreeProto.cover = tree_cover;\ntreeProto.data = tree_data;\ntreeProto.extent = tree_extent;\ntreeProto.find = tree_find;\ntreeProto.remove = tree_remove;\ntreeProto.removeAll = tree_removeAll;\ntreeProto.root = tree_root;\ntreeProto.size = tree_size;\ntreeProto.visit = tree_visit;\ntreeProto.visitAfter = tree_visitAfter;\ntreeProto.x = tree_x;\ntreeProto.y = tree_y;\n","export default function(x) {\n return function() {\n return x;\n };\n}\n","export default function() {\n return (Math.random() - 0.5) * 1e-6;\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction x(d) {\n return d.x + d.vx;\n}\n\nfunction y(d) {\n return d.y + d.vy;\n}\n\nexport default function(radius) {\n var nodes,\n radii,\n strength = 1,\n iterations = 1;\n\n if (typeof radius !== \"function\") radius = constant(radius == null ? 1 : +radius);\n\n function force() {\n var i, n = nodes.length,\n tree,\n node,\n xi,\n yi,\n ri,\n ri2;\n\n for (var k = 0; k < iterations; ++k) {\n tree = quadtree(nodes, x, y).visitAfter(prepare);\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n ri = radii[node.index], ri2 = ri * ri;\n xi = node.x + node.vx;\n yi = node.y + node.vy;\n tree.visit(apply);\n }\n }\n\n function apply(quad, x0, y0, x1, y1) {\n var data = quad.data, rj = quad.r, r = ri + rj;\n if (data) {\n if (data.index > node.index) {\n var x = xi - data.x - data.vx,\n y = yi - data.y - data.vy,\n l = x * x + y * y;\n if (l < r * r) {\n if (x === 0) x = jiggle(), l += x * x;\n if (y === 0) y = jiggle(), l += y * y;\n l = (r - (l = Math.sqrt(l))) / l * strength;\n node.vx += (x *= l) * (r = (rj *= rj) / (ri2 + rj));\n node.vy += (y *= l) * r;\n data.vx -= x * (r = 1 - r);\n data.vy -= y * r;\n }\n }\n return;\n }\n return x0 > xi + r || x1 < xi - r || y0 > yi + r || y1 < yi - r;\n }\n }\n\n function prepare(quad) {\n if (quad.data) return quad.r = radii[quad.data.index];\n for (var i = quad.r = 0; i < 4; ++i) {\n if (quad[i] && quad[i].r > quad.r) {\n quad.r = quad[i].r;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n radii = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], radii[node.index] = +radius(node, i, nodes);\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = +_, force) : strength;\n };\n\n force.radius = function(_) {\n return arguments.length ? (radius = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : radius;\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\n\nfunction index(d) {\n return d.index;\n}\n\nfunction find(nodeById, nodeId) {\n var node = nodeById.get(nodeId);\n if (!node) throw new Error(\"missing: \" + nodeId);\n return node;\n}\n\nexport default function(links) {\n var id = index,\n strength = defaultStrength,\n strengths,\n distance = constant(30),\n distances,\n nodes,\n count,\n bias,\n iterations = 1;\n\n if (links == null) links = [];\n\n function defaultStrength(link) {\n return 1 / Math.min(count[link.source.index], count[link.target.index]);\n }\n\n function force(alpha) {\n for (var k = 0, n = links.length; k < iterations; ++k) {\n for (var i = 0, link, source, target, x, y, l, b; i < n; ++i) {\n link = links[i], source = link.source, target = link.target;\n x = target.x + target.vx - source.x - source.vx || jiggle();\n y = target.y + target.vy - source.y - source.vy || jiggle();\n l = Math.sqrt(x * x + y * y);\n l = (l - distances[i]) / l * alpha * strengths[i];\n x *= l, y *= l;\n target.vx -= x * (b = bias[i]);\n target.vy -= y * b;\n source.vx += x * (b = 1 - b);\n source.vy += y * b;\n }\n }\n }\n\n function initialize() {\n if (!nodes) return;\n\n var i,\n n = nodes.length,\n m = links.length,\n nodeById = new Map(nodes.map((d, i) => [id(d, i, nodes), d])),\n link;\n\n for (i = 0, count = new Array(n); i < m; ++i) {\n link = links[i], link.index = i;\n if (typeof link.source !== \"object\") link.source = find(nodeById, link.source);\n if (typeof link.target !== \"object\") link.target = find(nodeById, link.target);\n count[link.source.index] = (count[link.source.index] || 0) + 1;\n count[link.target.index] = (count[link.target.index] || 0) + 1;\n }\n\n for (i = 0, bias = new Array(m); i < m; ++i) {\n link = links[i], bias[i] = count[link.source.index] / (count[link.source.index] + count[link.target.index]);\n }\n\n strengths = new Array(m), initializeStrength();\n distances = new Array(m), initializeDistance();\n }\n\n function initializeStrength() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n strengths[i] = +strength(links[i], i, links);\n }\n }\n\n function initializeDistance() {\n if (!nodes) return;\n\n for (var i = 0, n = links.length; i < n; ++i) {\n distances[i] = +distance(links[i], i, links);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.links = function(_) {\n return arguments.length ? (links = _, initialize(), force) : links;\n };\n\n force.id = function(_) {\n return arguments.length ? (id = _, force) : id;\n };\n\n force.iterations = function(_) {\n return arguments.length ? (iterations = +_, force) : iterations;\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initializeStrength(), force) : strength;\n };\n\n force.distance = function(_) {\n return arguments.length ? (distance = typeof _ === \"function\" ? _ : constant(+_), initializeDistance(), force) : distance;\n };\n\n return force;\n}\n","var noop = {value: function() {}};\n\nfunction dispatch() {\n for (var i = 0, n = arguments.length, _ = {}, t; i < n; ++i) {\n if (!(t = arguments[i] + \"\") || (t in _)) throw new Error(\"illegal type: \" + t);\n _[t] = [];\n }\n return new Dispatch(_);\n}\n\nfunction Dispatch(_) {\n this._ = _;\n}\n\nfunction parseTypenames(typenames, types) {\n return typenames.trim().split(/^|\\s+/).map(function(t) {\n var name = \"\", i = t.indexOf(\".\");\n if (i >= 0) name = t.slice(i + 1), t = t.slice(0, i);\n if (t && !types.hasOwnProperty(t)) throw new Error(\"unknown type: \" + t);\n return {type: t, name: name};\n });\n}\n\nDispatch.prototype = dispatch.prototype = {\n constructor: Dispatch,\n on: function(typename, callback) {\n var _ = this._,\n T = parseTypenames(typename + \"\", _),\n t,\n i = -1,\n n = T.length;\n\n // If no callback was specified, return the callback of the given type and name.\n if (arguments.length < 2) {\n while (++i < n) if ((t = (typename = T[i]).type) && (t = get(_[t], typename.name))) return t;\n return;\n }\n\n // If a type was specified, set the callback for the given type and name.\n // Otherwise, if a null callback was specified, remove callbacks of the given name.\n if (callback != null && typeof callback !== \"function\") throw new Error(\"invalid callback: \" + callback);\n while (++i < n) {\n if (t = (typename = T[i]).type) _[t] = set(_[t], typename.name, callback);\n else if (callback == null) for (t in _) _[t] = set(_[t], typename.name, null);\n }\n\n return this;\n },\n copy: function() {\n var copy = {}, _ = this._;\n for (var t in _) copy[t] = _[t].slice();\n return new Dispatch(copy);\n },\n call: function(type, that) {\n if ((n = arguments.length - 2) > 0) for (var args = new Array(n), i = 0, n, t; i < n; ++i) args[i] = arguments[i + 2];\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n },\n apply: function(type, that, args) {\n if (!this._.hasOwnProperty(type)) throw new Error(\"unknown type: \" + type);\n for (var t = this._[type], i = 0, n = t.length; i < n; ++i) t[i].value.apply(that, args);\n }\n};\n\nfunction get(type, name) {\n for (var i = 0, n = type.length, c; i < n; ++i) {\n if ((c = type[i]).name === name) {\n return c.value;\n }\n }\n}\n\nfunction set(type, name, callback) {\n for (var i = 0, n = type.length; i < n; ++i) {\n if (type[i].name === name) {\n type[i] = noop, type = type.slice(0, i).concat(type.slice(i + 1));\n break;\n }\n }\n if (callback != null) type.push({name: name, value: callback});\n return type;\n}\n\nexport default dispatch;\n","var frame = 0, // is an animation frame pending?\n timeout = 0, // is a timeout pending?\n interval = 0, // are any timers active?\n pokeDelay = 1000, // how frequently we check for clock skew\n taskHead,\n taskTail,\n clockLast = 0,\n clockNow = 0,\n clockSkew = 0,\n clock = typeof performance === \"object\" && performance.now ? performance : Date,\n setFrame = typeof window === \"object\" && window.requestAnimationFrame ? window.requestAnimationFrame.bind(window) : function(f) { setTimeout(f, 17); };\n\nexport function now() {\n return clockNow || (setFrame(clearNow), clockNow = clock.now() + clockSkew);\n}\n\nfunction clearNow() {\n clockNow = 0;\n}\n\nexport function Timer() {\n this._call =\n this._time =\n this._next = null;\n}\n\nTimer.prototype = timer.prototype = {\n constructor: Timer,\n restart: function(callback, delay, time) {\n if (typeof callback !== \"function\") throw new TypeError(\"callback is not a function\");\n time = (time == null ? now() : +time) + (delay == null ? 0 : +delay);\n if (!this._next && taskTail !== this) {\n if (taskTail) taskTail._next = this;\n else taskHead = this;\n taskTail = this;\n }\n this._call = callback;\n this._time = time;\n sleep();\n },\n stop: function() {\n if (this._call) {\n this._call = null;\n this._time = Infinity;\n sleep();\n }\n }\n};\n\nexport function timer(callback, delay, time) {\n var t = new Timer;\n t.restart(callback, delay, time);\n return t;\n}\n\nexport function timerFlush() {\n now(); // Get the current time, if not already set.\n ++frame; // Pretend we’ve set an alarm, if we haven’t already.\n var t = taskHead, e;\n while (t) {\n if ((e = clockNow - t._time) >= 0) t._call.call(null, e);\n t = t._next;\n }\n --frame;\n}\n\nfunction wake() {\n clockNow = (clockLast = clock.now()) + clockSkew;\n frame = timeout = 0;\n try {\n timerFlush();\n } finally {\n frame = 0;\n nap();\n clockNow = 0;\n }\n}\n\nfunction poke() {\n var now = clock.now(), delay = now - clockLast;\n if (delay > pokeDelay) clockSkew -= delay, clockLast = now;\n}\n\nfunction nap() {\n var t0, t1 = taskHead, t2, time = Infinity;\n while (t1) {\n if (t1._call) {\n if (time > t1._time) time = t1._time;\n t0 = t1, t1 = t1._next;\n } else {\n t2 = t1._next, t1._next = null;\n t1 = t0 ? t0._next = t2 : taskHead = t2;\n }\n }\n taskTail = t0;\n sleep(time);\n}\n\nfunction sleep(time) {\n if (frame) return; // Soonest alarm already set, or will be.\n if (timeout) timeout = clearTimeout(timeout);\n var delay = time - clockNow; // Strictly less than if we recomputed clockNow.\n if (delay > 24) {\n if (time < Infinity) timeout = setTimeout(wake, time - clock.now() - clockSkew);\n if (interval) interval = clearInterval(interval);\n } else {\n if (!interval) clockLast = clock.now(), interval = setInterval(poke, pokeDelay);\n frame = 1, setFrame(wake);\n }\n}\n","import {Timer, now} from \"./timer\";\n\nexport default function(callback, delay, time) {\n var t = new Timer, total = delay;\n if (delay == null) return t.restart(callback, delay, time), t;\n delay = +delay, time = time == null ? now() : +time;\n t.restart(function tick(elapsed) {\n elapsed += total;\n t.restart(tick, total += delay, time);\n callback(elapsed);\n }, delay, time);\n return t;\n}\n","import {dispatch} from \"d3-dispatch\";\nimport {timer} from \"d3-timer\";\n\nexport function x(d) {\n return d.x;\n}\n\nexport function y(d) {\n return d.y;\n}\n\nvar initialRadius = 10,\n initialAngle = Math.PI * (3 - Math.sqrt(5));\n\nexport default function(nodes) {\n var simulation,\n alpha = 1,\n alphaMin = 0.001,\n alphaDecay = 1 - Math.pow(alphaMin, 1 / 300),\n alphaTarget = 0,\n velocityDecay = 0.6,\n forces = new Map(),\n stepper = timer(step),\n event = dispatch(\"tick\", \"end\");\n\n if (nodes == null) nodes = [];\n\n function step() {\n tick();\n event.call(\"tick\", simulation);\n if (alpha < alphaMin) {\n stepper.stop();\n event.call(\"end\", simulation);\n }\n }\n\n function tick(iterations) {\n var i, n = nodes.length, node;\n\n if (iterations === undefined) iterations = 1;\n\n for (var k = 0; k < iterations; ++k) {\n alpha += (alphaTarget - alpha) * alphaDecay;\n\n forces.forEach(function(force) {\n force(alpha);\n });\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n if (node.fx == null) node.x += node.vx *= velocityDecay;\n else node.x = node.fx, node.vx = 0;\n if (node.fy == null) node.y += node.vy *= velocityDecay;\n else node.y = node.fy, node.vy = 0;\n }\n }\n\n return simulation;\n }\n\n function initializeNodes() {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.index = i;\n if (node.fx != null) node.x = node.fx;\n if (node.fy != null) node.y = node.fy;\n if (isNaN(node.x) || isNaN(node.y)) {\n var radius = initialRadius * Math.sqrt(i), angle = i * initialAngle;\n node.x = radius * Math.cos(angle);\n node.y = radius * Math.sin(angle);\n }\n if (isNaN(node.vx) || isNaN(node.vy)) {\n node.vx = node.vy = 0;\n }\n }\n }\n\n function initializeForce(force) {\n if (force.initialize) force.initialize(nodes);\n return force;\n }\n\n initializeNodes();\n\n return simulation = {\n tick: tick,\n\n restart: function() {\n return stepper.restart(step), simulation;\n },\n\n stop: function() {\n return stepper.stop(), simulation;\n },\n\n nodes: function(_) {\n return arguments.length ? (nodes = _, initializeNodes(), forces.forEach(initializeForce), simulation) : nodes;\n },\n\n alpha: function(_) {\n return arguments.length ? (alpha = +_, simulation) : alpha;\n },\n\n alphaMin: function(_) {\n return arguments.length ? (alphaMin = +_, simulation) : alphaMin;\n },\n\n alphaDecay: function(_) {\n return arguments.length ? (alphaDecay = +_, simulation) : +alphaDecay;\n },\n\n alphaTarget: function(_) {\n return arguments.length ? (alphaTarget = +_, simulation) : alphaTarget;\n },\n\n velocityDecay: function(_) {\n return arguments.length ? (velocityDecay = 1 - _, simulation) : 1 - velocityDecay;\n },\n\n force: function(name, _) {\n return arguments.length > 1 ? ((_ == null ? forces.delete(name) : forces.set(name, initializeForce(_))), simulation) : forces.get(name);\n },\n\n find: function(x, y, radius) {\n var i = 0,\n n = nodes.length,\n dx,\n dy,\n d2,\n node,\n closest;\n\n if (radius == null) radius = Infinity;\n else radius *= radius;\n\n for (i = 0; i < n; ++i) {\n node = nodes[i];\n dx = x - node.x;\n dy = y - node.y;\n d2 = dx * dx + dy * dy;\n if (d2 < radius) closest = node, radius = d2;\n }\n\n return closest;\n },\n\n on: function(name, _) {\n return arguments.length > 1 ? (event.on(name, _), simulation) : event.on(name);\n }\n };\n}\n","import {quadtree} from \"d3-quadtree\";\nimport constant from \"./constant.js\";\nimport jiggle from \"./jiggle.js\";\nimport {x, y} from \"./simulation.js\";\n\nexport default function() {\n var nodes,\n node,\n alpha,\n strength = constant(-30),\n strengths,\n distanceMin2 = 1,\n distanceMax2 = Infinity,\n theta2 = 0.81;\n\n function force(_) {\n var i, n = nodes.length, tree = quadtree(nodes, x, y).visitAfter(accumulate);\n for (alpha = _, i = 0; i < n; ++i) node = nodes[i], tree.visit(apply);\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length, node;\n strengths = new Array(n);\n for (i = 0; i < n; ++i) node = nodes[i], strengths[node.index] = +strength(node, i, nodes);\n }\n\n function accumulate(quad) {\n var strength = 0, q, c, weight = 0, x, y, i;\n\n // For internal nodes, accumulate forces from child quadrants.\n if (quad.length) {\n for (x = y = i = 0; i < 4; ++i) {\n if ((q = quad[i]) && (c = Math.abs(q.value))) {\n strength += q.value, weight += c, x += c * q.x, y += c * q.y;\n }\n }\n quad.x = x / weight;\n quad.y = y / weight;\n }\n\n // For leaf nodes, accumulate forces from coincident quadrants.\n else {\n q = quad;\n q.x = q.data.x;\n q.y = q.data.y;\n do strength += strengths[q.data.index];\n while (q = q.next);\n }\n\n quad.value = strength;\n }\n\n function apply(quad, x1, _, x2) {\n if (!quad.value) return true;\n\n var x = quad.x - node.x,\n y = quad.y - node.y,\n w = x2 - x1,\n l = x * x + y * y;\n\n // Apply the Barnes-Hut approximation if possible.\n // Limit forces for very close nodes; randomize direction if coincident.\n if (w * w / theta2 < l) {\n if (l < distanceMax2) {\n if (x === 0) x = jiggle(), l += x * x;\n if (y === 0) y = jiggle(), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n node.vx += x * quad.value * alpha / l;\n node.vy += y * quad.value * alpha / l;\n }\n return true;\n }\n\n // Otherwise, process points directly.\n else if (quad.length || l >= distanceMax2) return;\n\n // Limit forces for very close nodes; randomize direction if coincident.\n if (quad.data !== node || quad.next) {\n if (x === 0) x = jiggle(), l += x * x;\n if (y === 0) y = jiggle(), l += y * y;\n if (l < distanceMin2) l = Math.sqrt(distanceMin2 * l);\n }\n\n do if (quad.data !== node) {\n w = strengths[quad.data.index] * alpha / l;\n node.vx += x * w;\n node.vy += y * w;\n } while (quad = quad.next);\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.distanceMin = function(_) {\n return arguments.length ? (distanceMin2 = _ * _, force) : Math.sqrt(distanceMin2);\n };\n\n force.distanceMax = function(_) {\n return arguments.length ? (distanceMax2 = _ * _, force) : Math.sqrt(distanceMax2);\n };\n\n force.theta = function(_) {\n return arguments.length ? (theta2 = _ * _, force) : Math.sqrt(theta2);\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(x) {\n var strength = constant(0.1),\n nodes,\n strengths,\n xz;\n\n if (typeof x !== \"function\") x = constant(x == null ? 0 : +x);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vx += (xz[i] - node.x) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n xz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(xz[i] = +x(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : x;\n };\n\n return force;\n}\n","import constant from \"./constant.js\";\n\nexport default function(y) {\n var strength = constant(0.1),\n nodes,\n strengths,\n yz;\n\n if (typeof y !== \"function\") y = constant(y == null ? 0 : +y);\n\n function force(alpha) {\n for (var i = 0, n = nodes.length, node; i < n; ++i) {\n node = nodes[i], node.vy += (yz[i] - node.y) * strengths[i] * alpha;\n }\n }\n\n function initialize() {\n if (!nodes) return;\n var i, n = nodes.length;\n strengths = new Array(n);\n yz = new Array(n);\n for (i = 0; i < n; ++i) {\n strengths[i] = isNaN(yz[i] = +y(nodes[i], i, nodes)) ? 0 : +strength(nodes[i], i, nodes);\n }\n }\n\n force.initialize = function(_) {\n nodes = _;\n initialize();\n };\n\n force.strength = function(_) {\n return arguments.length ? (strength = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : strength;\n };\n\n force.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), initialize(), force) : y;\n };\n\n return force;\n}\n","import {Transform} from 'vega-dataflow';\nimport {accessorFields, array, error, inherits, isFunction} from 'vega-util';\nimport {\n forceSimulation, forceCenter, forceCollide,\n forceManyBody, forceLink, forceX, forceY\n} from 'd3-force';\n\nvar ForceMap = {\n center: forceCenter,\n collide: forceCollide,\n nbody: forceManyBody,\n link: forceLink,\n x: forceX,\n y: forceY\n};\n\nvar Forces = 'forces',\n ForceParams = [\n 'alpha', 'alphaMin', 'alphaTarget',\n 'velocityDecay', 'forces'\n ],\n ForceConfig = ['static', 'iterations'],\n ForceOutput = ['x', 'y', 'vx', 'vy'];\n\n/**\n * Force simulation layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.forces - The forces to apply.\n */\nexport default function Force(params) {\n Transform.call(this, null, params);\n}\n\nForce.Definition = {\n \"type\": \"Force\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"static\", \"type\": \"boolean\", \"default\": false },\n { \"name\": \"restart\", \"type\": \"boolean\", \"default\": false },\n { \"name\": \"iterations\", \"type\": \"number\", \"default\": 300 },\n { \"name\": \"alpha\", \"type\": \"number\", \"default\": 1 },\n { \"name\": \"alphaMin\", \"type\": \"number\", \"default\": 0.001 },\n { \"name\": \"alphaTarget\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"velocityDecay\", \"type\": \"number\", \"default\": 0.4 },\n { \"name\": \"forces\", \"type\": \"param\", \"array\": true,\n \"params\": [\n {\n \"key\": {\"force\": \"center\"},\n \"params\": [\n { \"name\": \"x\", \"type\": \"number\", \"default\": 0 },\n { \"name\": \"y\", \"type\": \"number\", \"default\": 0 }\n ]\n },\n {\n \"key\": {\"force\": \"collide\"},\n \"params\": [\n { \"name\": \"radius\", \"type\": \"number\", \"expr\": true },\n { \"name\": \"strength\", \"type\": \"number\", \"default\": 0.7 },\n { \"name\": \"iterations\", \"type\": \"number\", \"default\": 1 }\n ]\n },\n {\n \"key\": {\"force\": \"nbody\"},\n \"params\": [\n { \"name\": \"strength\", \"type\": \"number\", \"default\": -30 },\n { \"name\": \"theta\", \"type\": \"number\", \"default\": 0.9 },\n { \"name\": \"distanceMin\", \"type\": \"number\", \"default\": 1 },\n { \"name\": \"distanceMax\", \"type\": \"number\" }\n ]\n },\n {\n \"key\": {\"force\": \"link\"},\n \"params\": [\n { \"name\": \"links\", \"type\": \"data\" },\n { \"name\": \"id\", \"type\": \"field\" },\n { \"name\": \"distance\", \"type\": \"number\", \"default\": 30, \"expr\": true },\n { \"name\": \"strength\", \"type\": \"number\", \"expr\": true },\n { \"name\": \"iterations\", \"type\": \"number\", \"default\": 1 }\n ]\n },\n {\n \"key\": {\"force\": \"x\"},\n \"params\": [\n { \"name\": \"strength\", \"type\": \"number\", \"default\": 0.1 },\n { \"name\": \"x\", \"type\": \"field\" }\n ]\n },\n {\n \"key\": {\"force\": \"y\"},\n \"params\": [\n { \"name\": \"strength\", \"type\": \"number\", \"default\": 0.1 },\n { \"name\": \"y\", \"type\": \"field\" }\n ]\n }\n ] },\n {\n \"name\": \"as\", \"type\": \"string\", \"array\": true, \"modify\": false,\n \"default\": ForceOutput\n }\n ]\n};\n\nvar prototype = inherits(Force, Transform);\n\nprototype.transform = function(_, pulse) {\n var sim = this.value,\n change = pulse.changed(pulse.ADD_REM),\n params = _.modified(ForceParams),\n iters = _.iterations || 300;\n\n // configure simulation\n if (!sim) {\n this.value = sim = simulation(pulse.source, _);\n sim.on('tick', rerun(pulse.dataflow, this));\n if (!_.static) {\n change = true;\n sim.tick(); // ensure we run on init\n }\n pulse.modifies('index');\n } else {\n if (change) {\n pulse.modifies('index');\n sim.nodes(pulse.source);\n }\n if (params || pulse.changed(pulse.MOD)) {\n setup(sim, _, 0, pulse);\n }\n }\n\n // run simulation\n if (params || change || _.modified(ForceConfig)\n || (pulse.changed() && _.restart))\n {\n sim.alpha(Math.max(sim.alpha(), _.alpha || 1))\n .alphaDecay(1 - Math.pow(sim.alphaMin(), 1 / iters));\n\n if (_.static) {\n for (sim.stop(); --iters >= 0;) sim.tick();\n } else {\n if (sim.stopped()) sim.restart();\n if (!change) return pulse.StopPropagation; // defer to sim ticks\n }\n }\n\n return this.finish(_, pulse);\n};\n\nprototype.finish = function(_, pulse) {\n var dataflow = pulse.dataflow;\n\n // inspect dependencies, touch link source data\n for (var args=this._argops, j=0, m=args.length, arg; j= 0) sum += children[i].value;\n node.value = sum;\n}\n\nexport default function() {\n return this.eachAfter(count);\n}\n","export default function(callback) {\n var node = this, current, next = [node], children, i, n;\n do {\n current = next.reverse(), next = [];\n while (node = current.pop()) {\n callback(node), children = node.children;\n if (children) for (i = 0, n = children.length; i < n; ++i) {\n next.push(children[i]);\n }\n }\n } while (next.length);\n return this;\n}\n","export default function(callback) {\n var node = this, nodes = [node], children, i;\n while (node = nodes.pop()) {\n callback(node), children = node.children;\n if (children) for (i = children.length - 1; i >= 0; --i) {\n nodes.push(children[i]);\n }\n }\n return this;\n}\n","export default function(callback) {\n var node = this, nodes = [node], next = [], children, i, n;\n while (node = nodes.pop()) {\n next.push(node), children = node.children;\n if (children) for (i = 0, n = children.length; i < n; ++i) {\n nodes.push(children[i]);\n }\n }\n while (node = next.pop()) {\n callback(node);\n }\n return this;\n}\n","export default function(value) {\n return this.eachAfter(function(node) {\n var sum = +value(node.data) || 0,\n children = node.children,\n i = children && children.length;\n while (--i >= 0) sum += children[i].value;\n node.value = sum;\n });\n}\n","export default function(compare) {\n return this.eachBefore(function(node) {\n if (node.children) {\n node.children.sort(compare);\n }\n });\n}\n","export default function(end) {\n var start = this,\n ancestor = leastCommonAncestor(start, end),\n nodes = [start];\n while (start !== ancestor) {\n start = start.parent;\n nodes.push(start);\n }\n var k = nodes.length;\n while (end !== ancestor) {\n nodes.splice(k, 0, end);\n end = end.parent;\n }\n return nodes;\n}\n\nfunction leastCommonAncestor(a, b) {\n if (a === b) return a;\n var aNodes = a.ancestors(),\n bNodes = b.ancestors(),\n c = null;\n a = aNodes.pop();\n b = bNodes.pop();\n while (a === b) {\n c = a;\n a = aNodes.pop();\n b = bNodes.pop();\n }\n return c;\n}\n","export default function() {\n var node = this, nodes = [node];\n while (node = node.parent) {\n nodes.push(node);\n }\n return nodes;\n}\n","export default function() {\n var nodes = [];\n this.each(function(node) {\n nodes.push(node);\n });\n return nodes;\n}\n","export default function() {\n var leaves = [];\n this.eachBefore(function(node) {\n if (!node.children) {\n leaves.push(node);\n }\n });\n return leaves;\n}\n","export default function() {\n var root = this, links = [];\n root.each(function(node) {\n if (node !== root) { // Don’t include the root’s parent, if any.\n links.push({source: node.parent, target: node});\n }\n });\n return links;\n}\n","import node_count from \"./count\";\nimport node_each from \"./each\";\nimport node_eachBefore from \"./eachBefore\";\nimport node_eachAfter from \"./eachAfter\";\nimport node_sum from \"./sum\";\nimport node_sort from \"./sort\";\nimport node_path from \"./path\";\nimport node_ancestors from \"./ancestors\";\nimport node_descendants from \"./descendants\";\nimport node_leaves from \"./leaves\";\nimport node_links from \"./links\";\n\nexport default function hierarchy(data, children) {\n var root = new Node(data),\n valued = +data.value && (root.value = data.value),\n node,\n nodes = [root],\n child,\n childs,\n i,\n n;\n\n if (children == null) children = defaultChildren;\n\n while (node = nodes.pop()) {\n if (valued) node.value = +node.data.value;\n if ((childs = children(node.data)) && (n = childs.length)) {\n node.children = new Array(n);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new Node(childs[i]));\n child.parent = node;\n child.depth = node.depth + 1;\n }\n }\n }\n\n return root.eachBefore(computeHeight);\n}\n\nfunction node_copy() {\n return hierarchy(this).eachBefore(copyData);\n}\n\nfunction defaultChildren(d) {\n return d.children;\n}\n\nfunction copyData(node) {\n node.data = node.data.data;\n}\n\nexport function computeHeight(node) {\n var height = 0;\n do node.height = height;\n while ((node = node.parent) && (node.height < ++height));\n}\n\nexport function Node(data) {\n this.data = data;\n this.depth =\n this.height = 0;\n this.parent = null;\n}\n\nNode.prototype = hierarchy.prototype = {\n constructor: Node,\n count: node_count,\n each: node_each,\n eachAfter: node_eachAfter,\n eachBefore: node_eachBefore,\n sum: node_sum,\n sort: node_sort,\n path: node_path,\n ancestors: node_ancestors,\n descendants: node_descendants,\n leaves: node_leaves,\n links: node_links,\n copy: node_copy\n};\n","export var slice = Array.prototype.slice;\n\nexport function shuffle(array) {\n var m = array.length,\n t,\n i;\n\n while (m) {\n i = Math.random() * m-- | 0;\n t = array[m];\n array[m] = array[i];\n array[i] = t;\n }\n\n return array;\n}\n","import {shuffle, slice} from \"../array\";\n\nexport default function(circles) {\n var i = 0, n = (circles = shuffle(slice.call(circles))).length, B = [], p, e;\n\n while (i < n) {\n p = circles[i];\n if (e && enclosesWeak(e, p)) ++i;\n else e = encloseBasis(B = extendBasis(B, p)), i = 0;\n }\n\n return e;\n}\n\nfunction extendBasis(B, p) {\n var i, j;\n\n if (enclosesWeakAll(p, B)) return [p];\n\n // If we get here then B must have at least one element.\n for (i = 0; i < B.length; ++i) {\n if (enclosesNot(p, B[i])\n && enclosesWeakAll(encloseBasis2(B[i], p), B)) {\n return [B[i], p];\n }\n }\n\n // If we get here then B must have at least two elements.\n for (i = 0; i < B.length - 1; ++i) {\n for (j = i + 1; j < B.length; ++j) {\n if (enclosesNot(encloseBasis2(B[i], B[j]), p)\n && enclosesNot(encloseBasis2(B[i], p), B[j])\n && enclosesNot(encloseBasis2(B[j], p), B[i])\n && enclosesWeakAll(encloseBasis3(B[i], B[j], p), B)) {\n return [B[i], B[j], p];\n }\n }\n }\n\n // If we get here then something is very wrong.\n throw new Error;\n}\n\nfunction enclosesNot(a, b) {\n var dr = a.r - b.r, dx = b.x - a.x, dy = b.y - a.y;\n return dr < 0 || dr * dr < dx * dx + dy * dy;\n}\n\nfunction enclosesWeak(a, b) {\n var dr = a.r - b.r + 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction enclosesWeakAll(a, B) {\n for (var i = 0; i < B.length; ++i) {\n if (!enclosesWeak(a, B[i])) {\n return false;\n }\n }\n return true;\n}\n\nfunction encloseBasis(B) {\n switch (B.length) {\n case 1: return encloseBasis1(B[0]);\n case 2: return encloseBasis2(B[0], B[1]);\n case 3: return encloseBasis3(B[0], B[1], B[2]);\n }\n}\n\nfunction encloseBasis1(a) {\n return {\n x: a.x,\n y: a.y,\n r: a.r\n };\n}\n\nfunction encloseBasis2(a, b) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x21 = x2 - x1, y21 = y2 - y1, r21 = r2 - r1,\n l = Math.sqrt(x21 * x21 + y21 * y21);\n return {\n x: (x1 + x2 + x21 / l * r21) / 2,\n y: (y1 + y2 + y21 / l * r21) / 2,\n r: (l + r1 + r2) / 2\n };\n}\n\nfunction encloseBasis3(a, b, c) {\n var x1 = a.x, y1 = a.y, r1 = a.r,\n x2 = b.x, y2 = b.y, r2 = b.r,\n x3 = c.x, y3 = c.y, r3 = c.r,\n a2 = x1 - x2,\n a3 = x1 - x3,\n b2 = y1 - y2,\n b3 = y1 - y3,\n c2 = r2 - r1,\n c3 = r3 - r1,\n d1 = x1 * x1 + y1 * y1 - r1 * r1,\n d2 = d1 - x2 * x2 - y2 * y2 + r2 * r2,\n d3 = d1 - x3 * x3 - y3 * y3 + r3 * r3,\n ab = a3 * b2 - a2 * b3,\n xa = (b2 * d3 - b3 * d2) / (ab * 2) - x1,\n xb = (b3 * c2 - b2 * c3) / ab,\n ya = (a3 * d2 - a2 * d3) / (ab * 2) - y1,\n yb = (a2 * c3 - a3 * c2) / ab,\n A = xb * xb + yb * yb - 1,\n B = 2 * (r1 + xa * xb + ya * yb),\n C = xa * xa + ya * ya - r1 * r1,\n r = -(A ? (B + Math.sqrt(B * B - 4 * A * C)) / (2 * A) : C / B);\n return {\n x: x1 + xa + xb * r,\n y: y1 + ya + yb * r,\n r: r\n };\n}\n","import enclose from \"./enclose\";\n\nfunction place(b, a, c) {\n var dx = b.x - a.x, x, a2,\n dy = b.y - a.y, y, b2,\n d2 = dx * dx + dy * dy;\n if (d2) {\n a2 = a.r + c.r, a2 *= a2;\n b2 = b.r + c.r, b2 *= b2;\n if (a2 > b2) {\n x = (d2 + b2 - a2) / (2 * d2);\n y = Math.sqrt(Math.max(0, b2 / d2 - x * x));\n c.x = b.x - x * dx - y * dy;\n c.y = b.y - x * dy + y * dx;\n } else {\n x = (d2 + a2 - b2) / (2 * d2);\n y = Math.sqrt(Math.max(0, a2 / d2 - x * x));\n c.x = a.x + x * dx - y * dy;\n c.y = a.y + x * dy + y * dx;\n }\n } else {\n c.x = a.x + c.r;\n c.y = a.y;\n }\n}\n\nfunction intersects(a, b) {\n var dr = a.r + b.r - 1e-6, dx = b.x - a.x, dy = b.y - a.y;\n return dr > 0 && dr * dr > dx * dx + dy * dy;\n}\n\nfunction score(node) {\n var a = node._,\n b = node.next._,\n ab = a.r + b.r,\n dx = (a.x * b.r + b.x * a.r) / ab,\n dy = (a.y * b.r + b.y * a.r) / ab;\n return dx * dx + dy * dy;\n}\n\nfunction Node(circle) {\n this._ = circle;\n this.next = null;\n this.previous = null;\n}\n\nexport function packEnclose(circles) {\n if (!(n = circles.length)) return 0;\n\n var a, b, c, n, aa, ca, i, j, k, sj, sk;\n\n // Place the first circle.\n a = circles[0], a.x = 0, a.y = 0;\n if (!(n > 1)) return a.r;\n\n // Place the second circle.\n b = circles[1], a.x = -b.r, b.x = a.r, b.y = 0;\n if (!(n > 2)) return a.r + b.r;\n\n // Place the third circle.\n place(b, a, c = circles[2]);\n\n // Initialize the front-chain using the first three circles a, b and c.\n a = new Node(a), b = new Node(b), c = new Node(c);\n a.next = c.previous = b;\n b.next = a.previous = c;\n c.next = b.previous = a;\n\n // Attempt to place each remaining circle…\n pack: for (i = 3; i < n; ++i) {\n place(a._, b._, c = circles[i]), c = new Node(c);\n\n // Find the closest intersecting circle on the front-chain, if any.\n // “Closeness” is determined by linear distance along the front-chain.\n // “Ahead” or “behind” is likewise determined by linear distance.\n j = b.next, k = a.previous, sj = b._.r, sk = a._.r;\n do {\n if (sj <= sk) {\n if (intersects(j._, c._)) {\n b = j, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sj += j._.r, j = j.next;\n } else {\n if (intersects(k._, c._)) {\n a = k, a.next = b, b.previous = a, --i;\n continue pack;\n }\n sk += k._.r, k = k.previous;\n }\n } while (j !== k.next);\n\n // Success! Insert the new circle c between a and b.\n c.previous = a, c.next = b, a.next = b.previous = b = c;\n\n // Compute the new closest circle pair to the centroid.\n aa = score(a);\n while ((c = c.next) !== b) {\n if ((ca = score(c)) < aa) {\n a = c, aa = ca;\n }\n }\n b = a.next;\n }\n\n // Compute the enclosing circle of the front chain.\n a = [b._], c = b; while ((c = c.next) !== b) a.push(c._); c = enclose(a);\n\n // Translate the circles to put the enclosing circle around the origin.\n for (i = 0; i < n; ++i) a = circles[i], a.x -= c.x, a.y -= c.y;\n\n return c.r;\n}\n\nexport default function(circles) {\n packEnclose(circles);\n return circles;\n}\n","export function optional(f) {\n return f == null ? null : required(f);\n}\n\nexport function required(f) {\n if (typeof f !== \"function\") throw new Error;\n return f;\n}\n","export function constantZero() {\n return 0;\n}\n\nexport default function(x) {\n return function() {\n return x;\n };\n}\n","import {packEnclose} from \"./siblings\";\nimport {optional} from \"../accessors\";\nimport constant, {constantZero} from \"../constant\";\n\nfunction defaultRadius(d) {\n return Math.sqrt(d.value);\n}\n\nexport default function() {\n var radius = null,\n dx = 1,\n dy = 1,\n padding = constantZero;\n\n function pack(root) {\n root.x = dx / 2, root.y = dy / 2;\n if (radius) {\n root.eachBefore(radiusLeaf(radius))\n .eachAfter(packChildren(padding, 0.5))\n .eachBefore(translateChild(1));\n } else {\n root.eachBefore(radiusLeaf(defaultRadius))\n .eachAfter(packChildren(constantZero, 1))\n .eachAfter(packChildren(padding, root.r / Math.min(dx, dy)))\n .eachBefore(translateChild(Math.min(dx, dy) / (2 * root.r)));\n }\n return root;\n }\n\n pack.radius = function(x) {\n return arguments.length ? (radius = optional(x), pack) : radius;\n };\n\n pack.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], pack) : [dx, dy];\n };\n\n pack.padding = function(x) {\n return arguments.length ? (padding = typeof x === \"function\" ? x : constant(+x), pack) : padding;\n };\n\n return pack;\n}\n\nfunction radiusLeaf(radius) {\n return function(node) {\n if (!node.children) {\n node.r = Math.max(0, +radius(node) || 0);\n }\n };\n}\n\nfunction packChildren(padding, k) {\n return function(node) {\n if (children = node.children) {\n var children,\n i,\n n = children.length,\n r = padding(node) * k || 0,\n e;\n\n if (r) for (i = 0; i < n; ++i) children[i].r += r;\n e = packEnclose(children);\n if (r) for (i = 0; i < n; ++i) children[i].r -= r;\n node.r = e + r;\n }\n };\n}\n\nfunction translateChild(k) {\n return function(node) {\n var parent = node.parent;\n node.r *= k;\n if (parent) {\n node.x = parent.x + k * node.x;\n node.y = parent.y + k * node.y;\n }\n };\n}\n","export default function(node) {\n node.x0 = Math.round(node.x0);\n node.y0 = Math.round(node.y0);\n node.x1 = Math.round(node.x1);\n node.y1 = Math.round(node.y1);\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (x1 - x0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.y0 = y0, node.y1 = y1;\n node.x0 = x0, node.x1 = x0 += node.value * k;\n }\n}\n","import roundNode from \"./treemap/round\";\nimport treemapDice from \"./treemap/dice\";\n\nexport default function() {\n var dx = 1,\n dy = 1,\n padding = 0,\n round = false;\n\n function partition(root) {\n var n = root.height + 1;\n root.x0 =\n root.y0 = padding;\n root.x1 = dx;\n root.y1 = dy / n;\n root.eachBefore(positionNode(dy, n));\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(dy, n) {\n return function(node) {\n if (node.children) {\n treemapDice(node, node.x0, dy * (node.depth + 1) / n, node.x1, dy * (node.depth + 2) / n);\n }\n var x0 = node.x0,\n y0 = node.y0,\n x1 = node.x1 - padding,\n y1 = node.y1 - padding;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n };\n }\n\n partition.round = function(x) {\n return arguments.length ? (round = !!x, partition) : round;\n };\n\n partition.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], partition) : [dx, dy];\n };\n\n partition.padding = function(x) {\n return arguments.length ? (padding = +x, partition) : padding;\n };\n\n return partition;\n}\n","import {required} from \"./accessors\";\nimport {Node, computeHeight} from \"./hierarchy/index\";\n\nvar keyPrefix = \"$\", // Protect against keys like “__proto__”.\n preroot = {depth: -1},\n ambiguous = {};\n\nfunction defaultId(d) {\n return d.id;\n}\n\nfunction defaultParentId(d) {\n return d.parentId;\n}\n\nexport default function() {\n var id = defaultId,\n parentId = defaultParentId;\n\n function stratify(data) {\n var d,\n i,\n n = data.length,\n root,\n parent,\n node,\n nodes = new Array(n),\n nodeId,\n nodeKey,\n nodeByKey = {};\n\n for (i = 0; i < n; ++i) {\n d = data[i], node = nodes[i] = new Node(d);\n if ((nodeId = id(d, i, data)) != null && (nodeId += \"\")) {\n nodeKey = keyPrefix + (node.id = nodeId);\n nodeByKey[nodeKey] = nodeKey in nodeByKey ? ambiguous : node;\n }\n }\n\n for (i = 0; i < n; ++i) {\n node = nodes[i], nodeId = parentId(data[i], i, data);\n if (nodeId == null || !(nodeId += \"\")) {\n if (root) throw new Error(\"multiple roots\");\n root = node;\n } else {\n parent = nodeByKey[keyPrefix + nodeId];\n if (!parent) throw new Error(\"missing: \" + nodeId);\n if (parent === ambiguous) throw new Error(\"ambiguous: \" + nodeId);\n if (parent.children) parent.children.push(node);\n else parent.children = [node];\n node.parent = parent;\n }\n }\n\n if (!root) throw new Error(\"no root\");\n root.parent = preroot;\n root.eachBefore(function(node) { node.depth = node.parent.depth + 1; --n; }).eachBefore(computeHeight);\n root.parent = null;\n if (n > 0) throw new Error(\"cycle\");\n\n return root;\n }\n\n stratify.id = function(x) {\n return arguments.length ? (id = required(x), stratify) : id;\n };\n\n stratify.parentId = function(x) {\n return arguments.length ? (parentId = required(x), stratify) : parentId;\n };\n\n return stratify;\n}\n","import {Node} from \"./hierarchy/index\";\n\nfunction defaultSeparation(a, b) {\n return a.parent === b.parent ? 1 : 2;\n}\n\n// function radialSeparation(a, b) {\n// return (a.parent === b.parent ? 1 : 2) / a.depth;\n// }\n\n// This function is used to traverse the left contour of a subtree (or\n// subforest). It returns the successor of v on this contour. This successor is\n// either given by the leftmost child of v or by the thread of v. The function\n// returns null if and only if v is on the highest level of its subtree.\nfunction nextLeft(v) {\n var children = v.children;\n return children ? children[0] : v.t;\n}\n\n// This function works analogously to nextLeft.\nfunction nextRight(v) {\n var children = v.children;\n return children ? children[children.length - 1] : v.t;\n}\n\n// Shifts the current subtree rooted at w+. This is done by increasing\n// prelim(w+) and mod(w+) by shift.\nfunction moveSubtree(wm, wp, shift) {\n var change = shift / (wp.i - wm.i);\n wp.c -= change;\n wp.s += shift;\n wm.c += change;\n wp.z += shift;\n wp.m += shift;\n}\n\n// All other shifts, applied to the smaller subtrees between w- and w+, are\n// performed by this function. To prepare the shifts, we have to adjust\n// change(w+), shift(w+), and change(w-).\nfunction executeShifts(v) {\n var shift = 0,\n change = 0,\n children = v.children,\n i = children.length,\n w;\n while (--i >= 0) {\n w = children[i];\n w.z += shift;\n w.m += shift;\n shift += w.s + (change += w.c);\n }\n}\n\n// If vi-’s ancestor is a sibling of v, returns vi-’s ancestor. Otherwise,\n// returns the specified (default) ancestor.\nfunction nextAncestor(vim, v, ancestor) {\n return vim.a.parent === v.parent ? vim.a : ancestor;\n}\n\nfunction TreeNode(node, i) {\n this._ = node;\n this.parent = null;\n this.children = null;\n this.A = null; // default ancestor\n this.a = this; // ancestor\n this.z = 0; // prelim\n this.m = 0; // mod\n this.c = 0; // change\n this.s = 0; // shift\n this.t = null; // thread\n this.i = i; // number\n}\n\nTreeNode.prototype = Object.create(Node.prototype);\n\nfunction treeRoot(root) {\n var tree = new TreeNode(root, 0),\n node,\n nodes = [tree],\n child,\n children,\n i,\n n;\n\n while (node = nodes.pop()) {\n if (children = node._.children) {\n node.children = new Array(n = children.length);\n for (i = n - 1; i >= 0; --i) {\n nodes.push(child = node.children[i] = new TreeNode(children[i], i));\n child.parent = node;\n }\n }\n }\n\n (tree.parent = new TreeNode(null, 0)).children = [tree];\n return tree;\n}\n\n// Node-link tree diagram using the Reingold-Tilford \"tidy\" algorithm\nexport default function() {\n var separation = defaultSeparation,\n dx = 1,\n dy = 1,\n nodeSize = null;\n\n function tree(root) {\n var t = treeRoot(root);\n\n // Compute the layout using Buchheim et al.’s algorithm.\n t.eachAfter(firstWalk), t.parent.m = -t.z;\n t.eachBefore(secondWalk);\n\n // If a fixed node size is specified, scale x and y.\n if (nodeSize) root.eachBefore(sizeNode);\n\n // If a fixed tree size is specified, scale x and y based on the extent.\n // Compute the left-most, right-most, and depth-most nodes for extents.\n else {\n var left = root,\n right = root,\n bottom = root;\n root.eachBefore(function(node) {\n if (node.x < left.x) left = node;\n if (node.x > right.x) right = node;\n if (node.depth > bottom.depth) bottom = node;\n });\n var s = left === right ? 1 : separation(left, right) / 2,\n tx = s - left.x,\n kx = dx / (right.x + s + tx),\n ky = dy / (bottom.depth || 1);\n root.eachBefore(function(node) {\n node.x = (node.x + tx) * kx;\n node.y = node.depth * ky;\n });\n }\n\n return root;\n }\n\n // Computes a preliminary x-coordinate for v. Before that, FIRST WALK is\n // applied recursively to the children of v, as well as the function\n // APPORTION. After spacing out the children by calling EXECUTE SHIFTS, the\n // node v is placed to the midpoint of its outermost children.\n function firstWalk(v) {\n var children = v.children,\n siblings = v.parent.children,\n w = v.i ? siblings[v.i - 1] : null;\n if (children) {\n executeShifts(v);\n var midpoint = (children[0].z + children[children.length - 1].z) / 2;\n if (w) {\n v.z = w.z + separation(v._, w._);\n v.m = v.z - midpoint;\n } else {\n v.z = midpoint;\n }\n } else if (w) {\n v.z = w.z + separation(v._, w._);\n }\n v.parent.A = apportion(v, w, v.parent.A || siblings[0]);\n }\n\n // Computes all real x-coordinates by summing up the modifiers recursively.\n function secondWalk(v) {\n v._.x = v.z + v.parent.m;\n v.m += v.parent.m;\n }\n\n // The core of the algorithm. Here, a new subtree is combined with the\n // previous subtrees. Threads are used to traverse the inside and outside\n // contours of the left and right subtree up to the highest common level. The\n // vertices used for the traversals are vi+, vi-, vo-, and vo+, where the\n // superscript o means outside and i means inside, the subscript - means left\n // subtree and + means right subtree. For summing up the modifiers along the\n // contour, we use respective variables si+, si-, so-, and so+. Whenever two\n // nodes of the inside contours conflict, we compute the left one of the\n // greatest uncommon ancestors using the function ANCESTOR and call MOVE\n // SUBTREE to shift the subtree and prepare the shifts of smaller subtrees.\n // Finally, we add a new thread (if necessary).\n function apportion(v, w, ancestor) {\n if (w) {\n var vip = v,\n vop = v,\n vim = w,\n vom = vip.parent.children[0],\n sip = vip.m,\n sop = vop.m,\n sim = vim.m,\n som = vom.m,\n shift;\n while (vim = nextRight(vim), vip = nextLeft(vip), vim && vip) {\n vom = nextLeft(vom);\n vop = nextRight(vop);\n vop.a = v;\n shift = vim.z + sim - vip.z - sip + separation(vim._, vip._);\n if (shift > 0) {\n moveSubtree(nextAncestor(vim, v, ancestor), v, shift);\n sip += shift;\n sop += shift;\n }\n sim += vim.m;\n sip += vip.m;\n som += vom.m;\n sop += vop.m;\n }\n if (vim && !nextRight(vop)) {\n vop.t = vim;\n vop.m += sim - sop;\n }\n if (vip && !nextLeft(vom)) {\n vom.t = vip;\n vom.m += sip - som;\n ancestor = v;\n }\n }\n return ancestor;\n }\n\n function sizeNode(node) {\n node.x *= dx;\n node.y = node.depth * dy;\n }\n\n tree.separation = function(x) {\n return arguments.length ? (separation = x, tree) : separation;\n };\n\n tree.size = function(x) {\n return arguments.length ? (nodeSize = false, dx = +x[0], dy = +x[1], tree) : (nodeSize ? null : [dx, dy]);\n };\n\n tree.nodeSize = function(x) {\n return arguments.length ? (nodeSize = true, dx = +x[0], dy = +x[1], tree) : (nodeSize ? [dx, dy] : null);\n };\n\n return tree;\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n node,\n i = -1,\n n = nodes.length,\n k = parent.value && (y1 - y0) / parent.value;\n\n while (++i < n) {\n node = nodes[i], node.x0 = x0, node.x1 = x1;\n node.y0 = y0, node.y1 = y0 += node.value * k;\n }\n}\n","import treemapDice from \"./dice\";\nimport treemapSlice from \"./slice\";\n\nexport var phi = (1 + Math.sqrt(5)) / 2;\n\nexport function squarifyRatio(ratio, parent, x0, y0, x1, y1) {\n var rows = [],\n nodes = parent.children,\n row,\n nodeValue,\n i0 = 0,\n i1 = 0,\n n = nodes.length,\n dx, dy,\n value = parent.value,\n sumValue,\n minValue,\n maxValue,\n newRatio,\n minRatio,\n alpha,\n beta;\n\n while (i0 < n) {\n dx = x1 - x0, dy = y1 - y0;\n\n // Find the next non-empty node.\n do sumValue = nodes[i1++].value; while (!sumValue && i1 < n);\n minValue = maxValue = sumValue;\n alpha = Math.max(dy / dx, dx / dy) / (value * ratio);\n beta = sumValue * sumValue * alpha;\n minRatio = Math.max(maxValue / beta, beta / minValue);\n\n // Keep adding nodes while the aspect ratio maintains or improves.\n for (; i1 < n; ++i1) {\n sumValue += nodeValue = nodes[i1].value;\n if (nodeValue < minValue) minValue = nodeValue;\n if (nodeValue > maxValue) maxValue = nodeValue;\n beta = sumValue * sumValue * alpha;\n newRatio = Math.max(maxValue / beta, beta / minValue);\n if (newRatio > minRatio) { sumValue -= nodeValue; break; }\n minRatio = newRatio;\n }\n\n // Position and record the row orientation.\n rows.push(row = {value: sumValue, dice: dx < dy, children: nodes.slice(i0, i1)});\n if (row.dice) treemapDice(row, x0, y0, x1, value ? y0 += dy * sumValue / value : y1);\n else treemapSlice(row, x0, y0, value ? x0 += dx * sumValue / value : x1, y1);\n value -= sumValue, i0 = i1;\n }\n\n return rows;\n}\n\nexport default (function custom(ratio) {\n\n function squarify(parent, x0, y0, x1, y1) {\n squarifyRatio(ratio, parent, x0, y0, x1, y1);\n }\n\n squarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return squarify;\n})(phi);\n","import roundNode from \"./round\";\nimport squarify from \"./squarify\";\nimport {required} from \"../accessors\";\nimport constant, {constantZero} from \"../constant\";\n\nexport default function() {\n var tile = squarify,\n round = false,\n dx = 1,\n dy = 1,\n paddingStack = [0],\n paddingInner = constantZero,\n paddingTop = constantZero,\n paddingRight = constantZero,\n paddingBottom = constantZero,\n paddingLeft = constantZero;\n\n function treemap(root) {\n root.x0 =\n root.y0 = 0;\n root.x1 = dx;\n root.y1 = dy;\n root.eachBefore(positionNode);\n paddingStack = [0];\n if (round) root.eachBefore(roundNode);\n return root;\n }\n\n function positionNode(node) {\n var p = paddingStack[node.depth],\n x0 = node.x0 + p,\n y0 = node.y0 + p,\n x1 = node.x1 - p,\n y1 = node.y1 - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n node.x0 = x0;\n node.y0 = y0;\n node.x1 = x1;\n node.y1 = y1;\n if (node.children) {\n p = paddingStack[node.depth + 1] = paddingInner(node) / 2;\n x0 += paddingLeft(node) - p;\n y0 += paddingTop(node) - p;\n x1 -= paddingRight(node) - p;\n y1 -= paddingBottom(node) - p;\n if (x1 < x0) x0 = x1 = (x0 + x1) / 2;\n if (y1 < y0) y0 = y1 = (y0 + y1) / 2;\n tile(node, x0, y0, x1, y1);\n }\n }\n\n treemap.round = function(x) {\n return arguments.length ? (round = !!x, treemap) : round;\n };\n\n treemap.size = function(x) {\n return arguments.length ? (dx = +x[0], dy = +x[1], treemap) : [dx, dy];\n };\n\n treemap.tile = function(x) {\n return arguments.length ? (tile = required(x), treemap) : tile;\n };\n\n treemap.padding = function(x) {\n return arguments.length ? treemap.paddingInner(x).paddingOuter(x) : treemap.paddingInner();\n };\n\n treemap.paddingInner = function(x) {\n return arguments.length ? (paddingInner = typeof x === \"function\" ? x : constant(+x), treemap) : paddingInner;\n };\n\n treemap.paddingOuter = function(x) {\n return arguments.length ? treemap.paddingTop(x).paddingRight(x).paddingBottom(x).paddingLeft(x) : treemap.paddingTop();\n };\n\n treemap.paddingTop = function(x) {\n return arguments.length ? (paddingTop = typeof x === \"function\" ? x : constant(+x), treemap) : paddingTop;\n };\n\n treemap.paddingRight = function(x) {\n return arguments.length ? (paddingRight = typeof x === \"function\" ? x : constant(+x), treemap) : paddingRight;\n };\n\n treemap.paddingBottom = function(x) {\n return arguments.length ? (paddingBottom = typeof x === \"function\" ? x : constant(+x), treemap) : paddingBottom;\n };\n\n treemap.paddingLeft = function(x) {\n return arguments.length ? (paddingLeft = typeof x === \"function\" ? x : constant(+x), treemap) : paddingLeft;\n };\n\n return treemap;\n}\n","export default function(parent, x0, y0, x1, y1) {\n var nodes = parent.children,\n i, n = nodes.length,\n sum, sums = new Array(n + 1);\n\n for (sums[0] = sum = i = 0; i < n; ++i) {\n sums[i + 1] = sum += nodes[i].value;\n }\n\n partition(0, n, parent.value, x0, y0, x1, y1);\n\n function partition(i, j, value, x0, y0, x1, y1) {\n if (i >= j - 1) {\n var node = nodes[i];\n node.x0 = x0, node.y0 = y0;\n node.x1 = x1, node.y1 = y1;\n return;\n }\n\n var valueOffset = sums[i],\n valueTarget = (value / 2) + valueOffset,\n k = i + 1,\n hi = j - 1;\n\n while (k < hi) {\n var mid = k + hi >>> 1;\n if (sums[mid] < valueTarget) k = mid + 1;\n else hi = mid;\n }\n\n if ((valueTarget - sums[k - 1]) < (sums[k] - valueTarget) && i + 1 < k) --k;\n\n var valueLeft = sums[k] - valueOffset,\n valueRight = value - valueLeft;\n\n if ((x1 - x0) > (y1 - y0)) {\n var xk = (x0 * valueRight + x1 * valueLeft) / value;\n partition(i, k, valueLeft, x0, y0, xk, y1);\n partition(k, j, valueRight, xk, y0, x1, y1);\n } else {\n var yk = (y0 * valueRight + y1 * valueLeft) / value;\n partition(i, k, valueLeft, x0, y0, x1, yk);\n partition(k, j, valueRight, x0, yk, x1, y1);\n }\n }\n}\n","import dice from \"./dice\";\nimport slice from \"./slice\";\n\nexport default function(parent, x0, y0, x1, y1) {\n (parent.depth & 1 ? slice : dice)(parent, x0, y0, x1, y1);\n}\n","import treemapDice from \"./dice\";\nimport treemapSlice from \"./slice\";\nimport {phi, squarifyRatio} from \"./squarify\";\n\nexport default (function custom(ratio) {\n\n function resquarify(parent, x0, y0, x1, y1) {\n if ((rows = parent._squarify) && (rows.ratio === ratio)) {\n var rows,\n row,\n nodes,\n i,\n j = -1,\n n,\n m = rows.length,\n value = parent.value;\n\n while (++j < m) {\n row = rows[j], nodes = row.children;\n for (i = row.value = 0, n = nodes.length; i < n; ++i) row.value += nodes[i].value;\n if (row.dice) treemapDice(row, x0, y0, x1, y0 += (y1 - y0) * row.value / value);\n else treemapSlice(row, x0, y0, x0 += (x1 - x0) * row.value / value, y1);\n value -= row.value;\n }\n } else {\n parent._squarify = rows = squarifyRatio(ratio, parent, x0, y0, x1, y1);\n rows.ratio = ratio;\n }\n }\n\n resquarify.ratio = function(x) {\n return custom((x = +x) > 1 ? x : 1);\n };\n\n return resquarify;\n})(phi);\n","import lookup from './lookup';\nimport {ingest, isTuple, Transform, tupleid} from 'vega-dataflow';\nimport {array, error, inherits} from 'vega-util';\nimport {hierarchy} from 'd3-hierarchy';\n\n /**\n * Nest tuples into a tree structure, grouped by key values.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.keys - The key fields to nest by, in order.\n * @param {boolean} [params.generate=false] - A boolean flag indicating if\n * non-leaf nodes generated by this transform should be included in the\n * output. The default (false) includes only the input data (leaf nodes)\n * in the data stream.\n */\nexport default function Nest(params) {\n Transform.call(this, null, params);\n}\n\nNest.Definition = {\n \"type\": \"Nest\",\n \"metadata\": {\"treesource\": true, \"changes\": true},\n \"params\": [\n { \"name\": \"keys\", \"type\": \"field\", \"array\": true },\n { \"name\": \"generate\", \"type\": \"boolean\" }\n ]\n};\n\nvar prototype = inherits(Nest, Transform);\n\nfunction children(n) {\n return n.values;\n}\n\nprototype.transform = function(_, pulse) {\n if (!pulse.source) {\n error('Nest transform requires an upstream data source.');\n }\n\n var gen = _.generate,\n mod = _.modified(),\n out = pulse.clone(),\n tree = this.value;\n\n if (!tree || mod || pulse.changed()) {\n // collect nodes to remove\n if (tree) {\n tree.each(function(node) {\n if (node.children && isTuple(node.data)) {\n out.rem.push(node.data);\n }\n });\n }\n\n // generate new tree structure\n this.value = tree = hierarchy({\n values: array(_.keys)\n .reduce(function(n, k) { n.key(k); return n; }, nest())\n .entries(out.source)\n }, children);\n\n // collect nodes to add\n if (gen) {\n tree.each(function(node) {\n if (node.children) {\n node = ingest(node.data);\n out.add.push(node);\n out.source.push(node);\n }\n });\n }\n\n // build lookup table\n lookup(tree, tupleid, tupleid);\n }\n\n out.source.root = tree;\n return out;\n};\n\nfunction nest() {\n var keys = [],\n nest;\n\n function apply(array, depth) {\n if (depth >= keys.length) {\n return array;\n }\n\n var i = -1,\n n = array.length,\n key = keys[depth++],\n keyValue,\n value,\n valuesByKey = {},\n values,\n result = {};\n\n while (++i < n) {\n keyValue = key(value = array[i]) + '';\n if (values = valuesByKey[keyValue]) {\n values.push(value);\n } else {\n valuesByKey[keyValue] = [value];\n }\n }\n\n for (keyValue in valuesByKey) {\n result[keyValue] = apply(valuesByKey[keyValue], depth);\n }\n\n return result;\n }\n\n function entries(map, depth) {\n if (++depth > keys.length) return map;\n var array = [], k;\n for (k in map) {\n array.push({key: k, values: entries(map[k], depth)});\n }\n return array;\n }\n\n return nest = {\n entries: function(array) { return entries(apply(array, 0), 0); },\n key: function(d) { keys.push(d); return nest; }\n };\n}\n","import {Transform} from 'vega-dataflow';\nimport {error, inherits, one} from 'vega-util';\n\n/**\n * Abstract class for tree layout.\n * @constructor\n * @param {object} params - The parameters for this operator.\n */\nexport default function HierarchyLayout(params) {\n Transform.call(this, null, params);\n}\n\nvar prototype = inherits(HierarchyLayout, Transform);\n\nprototype.transform = function(_, pulse) {\n if (!pulse.source || !pulse.source.root) {\n error(this.constructor.name\n + ' transform requires a backing tree data source.');\n }\n\n var layout = this.layout(_.method),\n fields = this.fields,\n root = pulse.source.root,\n as = _.as || fields;\n\n if (_.field) root.sum(_.field);\n if (_.sort) root.sort(_.sort);\n\n setParams(layout, this.params, _);\n if (layout.separation) {\n layout.separation(_.separation !== false ? defaultSeparation : one);\n }\n\n try {\n this.value = layout(root);\n } catch (err) {\n error(err);\n }\n root.each(function(node) { setFields(node, fields, as); });\n\n return pulse.reflow(_.modified()).modifies(as).modifies('leaf');\n};\n\nfunction setParams(layout, params, _) {\n for (var p, i=0, n=params.length; i 0) return;\n r /= dx;\n if (dx < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dx > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = x1 - ax;\n if (!dx && r < 0) return;\n r /= dx;\n if (dx < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dx > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n r = y0 - ay;\n if (!dy && r > 0) return;\n r /= dy;\n if (dy < 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n } else if (dy > 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n }\n\n r = y1 - ay;\n if (!dy && r < 0) return;\n r /= dy;\n if (dy < 0) {\n if (r > t1) return;\n if (r > t0) t0 = r;\n } else if (dy > 0) {\n if (r < t0) return;\n if (r < t1) t1 = r;\n }\n\n if (!(t0 > 0) && !(t1 < 1)) return true; // TODO Better check?\n\n if (t0 > 0) edge[0] = [ax + t0 * dx, ay + t0 * dy];\n if (t1 < 1) edge[1] = [ax + t1 * dx, ay + t1 * dy];\n return true;\n}\n\nfunction connectEdge(edge, x0, y0, x1, y1) {\n var v1 = edge[1];\n if (v1) return true;\n\n var v0 = edge[0],\n left = edge.left,\n right = edge.right,\n lx = left[0],\n ly = left[1],\n rx = right[0],\n ry = right[1],\n fx = (lx + rx) / 2,\n fy = (ly + ry) / 2,\n fm,\n fb;\n\n if (ry === ly) {\n if (fx < x0 || fx >= x1) return;\n if (lx > rx) {\n if (!v0) v0 = [fx, y0];\n else if (v0[1] >= y1) return;\n v1 = [fx, y1];\n } else {\n if (!v0) v0 = [fx, y1];\n else if (v0[1] < y0) return;\n v1 = [fx, y0];\n }\n } else {\n fm = (lx - rx) / (ry - ly);\n fb = fy - fm * fx;\n if (fm < -1 || fm > 1) {\n if (lx > rx) {\n if (!v0) v0 = [(y0 - fb) / fm, y0];\n else if (v0[1] >= y1) return;\n v1 = [(y1 - fb) / fm, y1];\n } else {\n if (!v0) v0 = [(y1 - fb) / fm, y1];\n else if (v0[1] < y0) return;\n v1 = [(y0 - fb) / fm, y0];\n }\n } else {\n if (ly < ry) {\n if (!v0) v0 = [x0, fm * x0 + fb];\n else if (v0[0] >= x1) return;\n v1 = [x1, fm * x1 + fb];\n } else {\n if (!v0) v0 = [x1, fm * x1 + fb];\n else if (v0[0] < x0) return;\n v1 = [x0, fm * x0 + fb];\n }\n }\n }\n\n edge[0] = v0;\n edge[1] = v1;\n return true;\n}\n\nexport function clipEdges(x0, y0, x1, y1) {\n var i = edges.length,\n edge;\n\n while (i--) {\n if (!connectEdge(edge = edges[i], x0, y0, x1, y1)\n || !clipEdge(edge, x0, y0, x1, y1)\n || !(Math.abs(edge[0][0] - edge[1][0]) > epsilon\n || Math.abs(edge[0][1] - edge[1][1]) > epsilon)) {\n delete edges[i];\n }\n }\n}\n","import {createBorderEdge} from \"./Edge\";\nimport {cells, edges, epsilon} from \"./Diagram\";\n\nexport function createCell(site) {\n return cells[site.index] = {\n site: site,\n halfedges: []\n };\n}\n\nfunction cellHalfedgeAngle(cell, edge) {\n var site = cell.site,\n va = edge.left,\n vb = edge.right;\n if (site === vb) vb = va, va = site;\n if (vb) return Math.atan2(vb[1] - va[1], vb[0] - va[0]);\n if (site === va) va = edge[1], vb = edge[0];\n else va = edge[0], vb = edge[1];\n return Math.atan2(va[0] - vb[0], vb[1] - va[1]);\n}\n\nexport function cellHalfedgeStart(cell, edge) {\n return edge[+(edge.left !== cell.site)];\n}\n\nexport function cellHalfedgeEnd(cell, edge) {\n return edge[+(edge.left === cell.site)];\n}\n\nexport function sortCellHalfedges() {\n for (var i = 0, n = cells.length, cell, halfedges, j, m; i < n; ++i) {\n if ((cell = cells[i]) && (m = (halfedges = cell.halfedges).length)) {\n var index = new Array(m),\n array = new Array(m);\n for (j = 0; j < m; ++j) index[j] = j, array[j] = cellHalfedgeAngle(cell, edges[halfedges[j]]);\n index.sort(function(i, j) { return array[j] - array[i]; });\n for (j = 0; j < m; ++j) array[j] = halfedges[index[j]];\n for (j = 0; j < m; ++j) halfedges[j] = array[j];\n }\n }\n}\n\nexport function clipCells(x0, y0, x1, y1) {\n var nCells = cells.length,\n iCell,\n cell,\n site,\n iHalfedge,\n halfedges,\n nHalfedges,\n start,\n startX,\n startY,\n end,\n endX,\n endY,\n cover = true;\n\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n halfedges = cell.halfedges;\n iHalfedge = halfedges.length;\n\n // Remove any dangling clipped edges.\n while (iHalfedge--) {\n if (!edges[halfedges[iHalfedge]]) {\n halfedges.splice(iHalfedge, 1);\n }\n }\n\n // Insert any border edges as necessary.\n iHalfedge = 0, nHalfedges = halfedges.length;\n while (iHalfedge < nHalfedges) {\n end = cellHalfedgeEnd(cell, edges[halfedges[iHalfedge]]), endX = end[0], endY = end[1];\n start = cellHalfedgeStart(cell, edges[halfedges[++iHalfedge % nHalfedges]]), startX = start[0], startY = start[1];\n if (Math.abs(endX - startX) > epsilon || Math.abs(endY - startY) > epsilon) {\n halfedges.splice(iHalfedge, 0, edges.push(createBorderEdge(site, end,\n Math.abs(endX - x0) < epsilon && y1 - endY > epsilon ? [x0, Math.abs(startX - x0) < epsilon ? startY : y1]\n : Math.abs(endY - y1) < epsilon && x1 - endX > epsilon ? [Math.abs(startY - y1) < epsilon ? startX : x1, y1]\n : Math.abs(endX - x1) < epsilon && endY - y0 > epsilon ? [x1, Math.abs(startX - x1) < epsilon ? startY : y0]\n : Math.abs(endY - y0) < epsilon && endX - x0 > epsilon ? [Math.abs(startY - y0) < epsilon ? startX : x0, y0]\n : null)) - 1);\n ++nHalfedges;\n }\n }\n\n if (nHalfedges) cover = false;\n }\n }\n\n // If there weren’t any edges, have the closest site cover the extent.\n // It doesn’t matter which corner of the extent we measure!\n if (cover) {\n var dx, dy, d2, dc = Infinity;\n\n for (iCell = 0, cover = null; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n site = cell.site;\n dx = site[0] - x0;\n dy = site[1] - y0;\n d2 = dx * dx + dy * dy;\n if (d2 < dc) dc = d2, cover = cell;\n }\n }\n\n if (cover) {\n var v00 = [x0, y0], v01 = [x0, y1], v11 = [x1, y1], v10 = [x1, y0];\n cover.halfedges.push(\n edges.push(createBorderEdge(site = cover.site, v00, v01)) - 1,\n edges.push(createBorderEdge(site, v01, v11)) - 1,\n edges.push(createBorderEdge(site, v11, v10)) - 1,\n edges.push(createBorderEdge(site, v10, v00)) - 1\n );\n }\n }\n\n // Lastly delete any cells with no edges; these were entirely clipped.\n for (iCell = 0; iCell < nCells; ++iCell) {\n if (cell = cells[iCell]) {\n if (!cell.halfedges.length) {\n delete cells[iCell];\n }\n }\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {circles, epsilon2} from \"./Diagram\";\n\nvar circlePool = [];\n\nexport var firstCircle;\n\nfunction Circle() {\n RedBlackNode(this);\n this.x =\n this.y =\n this.arc =\n this.site =\n this.cy = null;\n}\n\nexport function attachCircle(arc) {\n var lArc = arc.P,\n rArc = arc.N;\n\n if (!lArc || !rArc) return;\n\n var lSite = lArc.site,\n cSite = arc.site,\n rSite = rArc.site;\n\n if (lSite === rSite) return;\n\n var bx = cSite[0],\n by = cSite[1],\n ax = lSite[0] - bx,\n ay = lSite[1] - by,\n cx = rSite[0] - bx,\n cy = rSite[1] - by;\n\n var d = 2 * (ax * cy - ay * cx);\n if (d >= -epsilon2) return;\n\n var ha = ax * ax + ay * ay,\n hc = cx * cx + cy * cy,\n x = (cy * ha - ay * hc) / d,\n y = (ax * hc - cx * ha) / d;\n\n var circle = circlePool.pop() || new Circle;\n circle.arc = arc;\n circle.site = cSite;\n circle.x = x + bx;\n circle.y = (circle.cy = y + by) + Math.sqrt(x * x + y * y); // y bottom\n\n arc.circle = circle;\n\n var before = null,\n node = circles._;\n\n while (node) {\n if (circle.y < node.y || (circle.y === node.y && circle.x <= node.x)) {\n if (node.L) node = node.L;\n else { before = node.P; break; }\n } else {\n if (node.R) node = node.R;\n else { before = node; break; }\n }\n }\n\n circles.insert(before, circle);\n if (!before) firstCircle = circle;\n}\n\nexport function detachCircle(arc) {\n var circle = arc.circle;\n if (circle) {\n if (!circle.P) firstCircle = circle.N;\n circles.remove(circle);\n circlePool.push(circle);\n RedBlackNode(circle);\n arc.circle = null;\n }\n}\n","import {RedBlackNode} from \"./RedBlackTree\";\nimport {createCell} from \"./Cell\";\nimport {attachCircle, detachCircle} from \"./Circle\";\nimport {createEdge, setEdgeEnd} from \"./Edge\";\nimport {beaches, epsilon} from \"./Diagram\";\n\nvar beachPool = [];\n\nfunction Beach() {\n RedBlackNode(this);\n this.edge =\n this.site =\n this.circle = null;\n}\n\nfunction createBeach(site) {\n var beach = beachPool.pop() || new Beach;\n beach.site = site;\n return beach;\n}\n\nfunction detachBeach(beach) {\n detachCircle(beach);\n beaches.remove(beach);\n beachPool.push(beach);\n RedBlackNode(beach);\n}\n\nexport function removeBeach(beach) {\n var circle = beach.circle,\n x = circle.x,\n y = circle.cy,\n vertex = [x, y],\n previous = beach.P,\n next = beach.N,\n disappearing = [beach];\n\n detachBeach(beach);\n\n var lArc = previous;\n while (lArc.circle\n && Math.abs(x - lArc.circle.x) < epsilon\n && Math.abs(y - lArc.circle.cy) < epsilon) {\n previous = lArc.P;\n disappearing.unshift(lArc);\n detachBeach(lArc);\n lArc = previous;\n }\n\n disappearing.unshift(lArc);\n detachCircle(lArc);\n\n var rArc = next;\n while (rArc.circle\n && Math.abs(x - rArc.circle.x) < epsilon\n && Math.abs(y - rArc.circle.cy) < epsilon) {\n next = rArc.N;\n disappearing.push(rArc);\n detachBeach(rArc);\n rArc = next;\n }\n\n disappearing.push(rArc);\n detachCircle(rArc);\n\n var nArcs = disappearing.length,\n iArc;\n for (iArc = 1; iArc < nArcs; ++iArc) {\n rArc = disappearing[iArc];\n lArc = disappearing[iArc - 1];\n setEdgeEnd(rArc.edge, lArc.site, rArc.site, vertex);\n }\n\n lArc = disappearing[0];\n rArc = disappearing[nArcs - 1];\n rArc.edge = createEdge(lArc.site, rArc.site, null, vertex);\n\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nexport function addBeach(site) {\n var x = site[0],\n directrix = site[1],\n lArc,\n rArc,\n dxl,\n dxr,\n node = beaches._;\n\n while (node) {\n dxl = leftBreakPoint(node, directrix) - x;\n if (dxl > epsilon) node = node.L; else {\n dxr = x - rightBreakPoint(node, directrix);\n if (dxr > epsilon) {\n if (!node.R) {\n lArc = node;\n break;\n }\n node = node.R;\n } else {\n if (dxl > -epsilon) {\n lArc = node.P;\n rArc = node;\n } else if (dxr > -epsilon) {\n lArc = node;\n rArc = node.N;\n } else {\n lArc = rArc = node;\n }\n break;\n }\n }\n }\n\n createCell(site);\n var newArc = createBeach(site);\n beaches.insert(lArc, newArc);\n\n if (!lArc && !rArc) return;\n\n if (lArc === rArc) {\n detachCircle(lArc);\n rArc = createBeach(lArc.site);\n beaches.insert(newArc, rArc);\n newArc.edge = rArc.edge = createEdge(lArc.site, newArc.site);\n attachCircle(lArc);\n attachCircle(rArc);\n return;\n }\n\n if (!rArc) { // && lArc\n newArc.edge = createEdge(lArc.site, newArc.site);\n return;\n }\n\n // else lArc !== rArc\n detachCircle(lArc);\n detachCircle(rArc);\n\n var lSite = lArc.site,\n ax = lSite[0],\n ay = lSite[1],\n bx = site[0] - ax,\n by = site[1] - ay,\n rSite = rArc.site,\n cx = rSite[0] - ax,\n cy = rSite[1] - ay,\n d = 2 * (bx * cy - by * cx),\n hb = bx * bx + by * by,\n hc = cx * cx + cy * cy,\n vertex = [(cy * hb - by * hc) / d + ax, (bx * hc - cx * hb) / d + ay];\n\n setEdgeEnd(rArc.edge, lSite, rSite, vertex);\n newArc.edge = createEdge(lSite, site, null, vertex);\n rArc.edge = createEdge(site, rSite, null, vertex);\n attachCircle(lArc);\n attachCircle(rArc);\n}\n\nfunction leftBreakPoint(arc, directrix) {\n var site = arc.site,\n rfocx = site[0],\n rfocy = site[1],\n pby2 = rfocy - directrix;\n\n if (!pby2) return rfocx;\n\n var lArc = arc.P;\n if (!lArc) return -Infinity;\n\n site = lArc.site;\n var lfocx = site[0],\n lfocy = site[1],\n plby2 = lfocy - directrix;\n\n if (!plby2) return lfocx;\n\n var hl = lfocx - rfocx,\n aby2 = 1 / pby2 - 1 / plby2,\n b = hl / plby2;\n\n if (aby2) return (-b + Math.sqrt(b * b - 2 * aby2 * (hl * hl / (-2 * plby2) - lfocy + plby2 / 2 + rfocy - pby2 / 2))) / aby2 + rfocx;\n\n return (rfocx + lfocx) / 2;\n}\n\nfunction rightBreakPoint(arc, directrix) {\n var rArc = arc.N;\n if (rArc) return leftBreakPoint(rArc, directrix);\n var site = arc.site;\n return site[1] === directrix ? site[0] : Infinity;\n}\n","import {addBeach, removeBeach} from \"./Beach\";\nimport {sortCellHalfedges, cellHalfedgeStart, clipCells} from \"./Cell\";\nimport {firstCircle} from \"./Circle\";\nimport {clipEdges} from \"./Edge\";\nimport RedBlackTree from \"./RedBlackTree\";\n\nexport var epsilon = 1e-6;\nexport var epsilon2 = 1e-12;\nexport var beaches;\nexport var cells;\nexport var circles;\nexport var edges;\n\nfunction triangleArea(a, b, c) {\n return (a[0] - c[0]) * (b[1] - a[1]) - (a[0] - b[0]) * (c[1] - a[1]);\n}\n\nfunction lexicographic(a, b) {\n return b[1] - a[1]\n || b[0] - a[0];\n}\n\nexport default function Diagram(sites, extent) {\n var site = sites.sort(lexicographic).pop(),\n x,\n y,\n circle;\n\n edges = [];\n cells = new Array(sites.length);\n beaches = new RedBlackTree;\n circles = new RedBlackTree;\n\n while (true) {\n circle = firstCircle;\n if (site && (!circle || site[1] < circle.y || (site[1] === circle.y && site[0] < circle.x))) {\n if (site[0] !== x || site[1] !== y) {\n addBeach(site);\n x = site[0], y = site[1];\n }\n site = sites.pop();\n } else if (circle) {\n removeBeach(circle.arc);\n } else {\n break;\n }\n }\n\n sortCellHalfedges();\n\n if (extent) {\n var x0 = +extent[0][0],\n y0 = +extent[0][1],\n x1 = +extent[1][0],\n y1 = +extent[1][1];\n clipEdges(x0, y0, x1, y1);\n clipCells(x0, y0, x1, y1);\n }\n\n this.edges = edges;\n this.cells = cells;\n\n beaches =\n circles =\n edges =\n cells = null;\n}\n\nDiagram.prototype = {\n constructor: Diagram,\n\n polygons: function() {\n var edges = this.edges;\n\n return this.cells.map(function(cell) {\n var polygon = cell.halfedges.map(function(i) { return cellHalfedgeStart(cell, edges[i]); });\n polygon.data = cell.site.data;\n return polygon;\n });\n },\n\n triangles: function() {\n var triangles = [],\n edges = this.edges;\n\n this.cells.forEach(function(cell, i) {\n if (!(m = (halfedges = cell.halfedges).length)) return;\n var site = cell.site,\n halfedges,\n j = -1,\n m,\n s0,\n e1 = edges[halfedges[m - 1]],\n s1 = e1.left === site ? e1.right : e1.left;\n\n while (++j < m) {\n s0 = s1;\n e1 = edges[halfedges[j]];\n s1 = e1.left === site ? e1.right : e1.left;\n if (s0 && s1 && i < s0.index && i < s1.index && triangleArea(site, s0, s1) < 0) {\n triangles.push([site.data, s0.data, s1.data]);\n }\n }\n });\n\n return triangles;\n },\n\n links: function() {\n return this.edges.filter(function(edge) {\n return edge.right;\n }).map(function(edge) {\n return {\n source: edge.left.data,\n target: edge.right.data\n };\n });\n },\n\n find: function(x, y, radius) {\n var that = this, i0, i1 = that._found || 0, n = that.cells.length, cell;\n\n // Use the previously-found cell, or start with an arbitrary one.\n while (!(cell = that.cells[i1])) if (++i1 >= n) return null;\n var dx = x - cell.site[0], dy = y - cell.site[1], d2 = dx * dx + dy * dy;\n\n // Traverse the half-edges to find a closer cell, if any.\n do {\n cell = that.cells[i0 = i1], i1 = null;\n cell.halfedges.forEach(function(e) {\n var edge = that.edges[e], v = edge.left;\n if ((v === cell.site || !v) && !(v = edge.right)) return;\n var vx = x - v[0], vy = y - v[1], v2 = vx * vx + vy * vy;\n if (v2 < d2) d2 = v2, i1 = v.index;\n });\n } while (i1 !== null);\n\n that._found = i0;\n\n return radius == null || d2 <= radius * radius ? cell.site : null;\n }\n}\n","import constant from \"./constant\";\nimport {x as pointX, y as pointY} from \"./point\";\nimport Diagram, {epsilon} from \"./Diagram\";\n\nexport default function() {\n var x = pointX,\n y = pointY,\n extent = null;\n\n function voronoi(data) {\n return new Diagram(data.map(function(d, i) {\n var s = [Math.round(x(d, i, data) / epsilon) * epsilon, Math.round(y(d, i, data) / epsilon) * epsilon];\n s.index = i;\n s.data = d;\n return s;\n }), extent);\n }\n\n voronoi.polygons = function(data) {\n return voronoi(data).polygons();\n };\n\n voronoi.links = function(data) {\n return voronoi(data).links();\n };\n\n voronoi.triangles = function(data) {\n return voronoi(data).triangles();\n };\n\n voronoi.x = function(_) {\n return arguments.length ? (x = typeof _ === \"function\" ? _ : constant(+_), voronoi) : x;\n };\n\n voronoi.y = function(_) {\n return arguments.length ? (y = typeof _ === \"function\" ? _ : constant(+_), voronoi) : y;\n };\n\n voronoi.extent = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[+_[0][0], +_[0][1]], [+_[1][0], +_[1][1]]], voronoi) : extent && [[extent[0][0], extent[0][1]], [extent[1][0], extent[1][1]]];\n };\n\n voronoi.size = function(_) {\n return arguments.length ? (extent = _ == null ? null : [[0, 0], [+_[0], +_[1]]], voronoi) : extent && [extent[1][0] - extent[0][0], extent[1][1] - extent[0][1]];\n };\n\n return voronoi;\n}\n","import {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\nimport {voronoi} from 'd3-voronoi';\n\nexport default function Voronoi(params) {\n Transform.call(this, null, params);\n}\n\nVoronoi.Definition = {\n \"type\": \"Voronoi\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"x\", \"type\": \"field\", \"required\": true },\n { \"name\": \"y\", \"type\": \"field\", \"required\": true },\n { \"name\": \"size\", \"type\": \"number\", \"array\": true, \"length\": 2 },\n { \"name\": \"extent\", \"type\": \"array\", \"array\": true, \"length\": 2,\n \"default\": [[-1e5, -1e5], [1e5, 1e5]],\n \"content\": {\"type\": \"number\", \"array\": true, \"length\": 2} },\n { \"name\": \"as\", \"type\": \"string\", \"default\": \"path\" }\n ]\n};\n\nvar prototype = inherits(Voronoi, Transform);\n\nvar defaultExtent = [[-1e5, -1e5], [1e5, 1e5]];\n\nprototype.transform = function(_, pulse) {\n var as = _.as || 'path',\n data = pulse.source,\n diagram, polygons, i, n;\n\n // configure and construct voronoi diagram\n diagram = voronoi().x(_.x).y(_.y);\n if (_.size) diagram.size(_.size);\n else diagram.extent(_.extent || defaultExtent);\n\n this.value = (diagram = diagram(data));\n\n // map polygons to paths\n polygons = diagram.polygons();\n for (i=0, n=data.length; i> 5,\n ch = 1 << 11;\n\nexport default function() {\n var size = [256, 256],\n text,\n font,\n fontSize,\n fontStyle,\n fontWeight,\n rotate,\n padding,\n spiral = archimedeanSpiral,\n words = [],\n random = Math.random,\n cloud = {};\n\n cloud.layout = function() {\n var contextAndRatio = getContext(canvas()),\n board = zeroArray((size[0] >> 5) * size[1]),\n bounds = null,\n n = words.length,\n i = -1,\n tags = [],\n data = words.map(function(d) {\n return {\n text: text(d),\n font: font(d),\n style: fontStyle(d),\n weight: fontWeight(d),\n rotate: rotate(d),\n size: ~~fontSize(d),\n padding: padding(d),\n xoff: 0,\n yoff: 0,\n x1: 0,\n y1: 0,\n x0: 0,\n y0: 0,\n hasText: false,\n sprite: null,\n datum: d\n };\n }).sort(function(a, b) { return b.size - a.size; });\n\n while (++i < n) {\n var d = data[i];\n d.x = (size[0] * (random() + .5)) >> 1;\n d.y = (size[1] * (random() + .5)) >> 1;\n cloudSprite(contextAndRatio, d, data, i);\n if (d.hasText && place(board, d, bounds)) {\n tags.push(d);\n if (bounds) cloudBounds(bounds, d);\n else bounds = [{x: d.x + d.x0, y: d.y + d.y0}, {x: d.x + d.x1, y: d.y + d.y1}];\n // Temporary hack\n d.x -= size[0] >> 1;\n d.y -= size[1] >> 1;\n }\n }\n\n return tags;\n };\n\n function getContext(canvas) {\n canvas.width = canvas.height = 1;\n var ratio = Math.sqrt(canvas.getContext(\"2d\").getImageData(0, 0, 1, 1).data.length >> 2);\n canvas.width = (cw << 5) / ratio;\n canvas.height = ch / ratio;\n\n var context = canvas.getContext(\"2d\");\n context.fillStyle = context.strokeStyle = \"red\";\n context.textAlign = \"center\";\n\n return {context: context, ratio: ratio};\n }\n\n function place(board, tag, bounds) {\n var startX = tag.x,\n startY = tag.y,\n maxDelta = Math.sqrt(size[0] * size[0] + size[1] * size[1]),\n s = spiral(size),\n dt = random() < .5 ? 1 : -1,\n t = -dt,\n dxdy,\n dx,\n dy;\n\n while (dxdy = s(t += dt)) {\n dx = ~~dxdy[0];\n dy = ~~dxdy[1];\n\n if (Math.min(Math.abs(dx), Math.abs(dy)) >= maxDelta) break;\n\n tag.x = startX + dx;\n tag.y = startY + dy;\n\n if (tag.x + tag.x0 < 0 || tag.y + tag.y0 < 0 ||\n tag.x + tag.x1 > size[0] || tag.y + tag.y1 > size[1]) continue;\n // TODO only check for collisions within current bounds.\n if (!bounds || !cloudCollide(tag, board, size[0])) {\n if (!bounds || collideRects(tag, bounds)) {\n var sprite = tag.sprite,\n w = tag.width >> 5,\n sw = size[0] >> 5,\n lx = tag.x - (w << 4),\n sx = lx & 0x7f,\n msx = 32 - sx,\n h = tag.y1 - tag.y0,\n x = (tag.y + tag.y0) * sw + (lx >> 5),\n last;\n for (var j = 0; j < h; j++) {\n last = 0;\n for (var i = 0; i <= w; i++) {\n board[x + i] |= (last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0);\n }\n x += sw;\n }\n tag.sprite = null;\n return true;\n }\n }\n }\n return false;\n }\n\n cloud.words = function(_) {\n if (arguments.length) {\n words = _;\n return cloud;\n } else {\n return words;\n }\n };\n\n cloud.size = function(_) {\n if (arguments.length) {\n size = [+_[0], +_[1]];\n return cloud;\n } else {\n return size;\n }\n };\n\n cloud.font = function(_) {\n if (arguments.length) {\n font = functor(_);\n return cloud;\n } else {\n return font;\n }\n };\n\n cloud.fontStyle = function(_) {\n if (arguments.length) {\n fontStyle = functor(_);\n return cloud;\n } else {\n return fontStyle;\n }\n };\n\n cloud.fontWeight = function(_) {\n if (arguments.length) {\n fontWeight = functor(_);\n return cloud;\n } else {\n return fontWeight;\n }\n };\n\n cloud.rotate = function(_) {\n if (arguments.length) {\n rotate = functor(_);\n return cloud;\n } else {\n return rotate;\n }\n };\n\n cloud.text = function(_) {\n if (arguments.length) {\n text = functor(_);\n return cloud;\n } else {\n return text;\n }\n };\n\n cloud.spiral = function(_) {\n if (arguments.length) {\n spiral = spirals[_] || _;\n return cloud;\n } else {\n return spiral;\n }\n };\n\n cloud.fontSize = function(_) {\n if (arguments.length) {\n fontSize = functor(_);\n return cloud;\n } else {\n return fontSize;\n }\n };\n\n cloud.padding = function(_) {\n if (arguments.length) {\n padding = functor(_);\n return cloud;\n } else {\n return padding;\n }\n };\n\n cloud.random = function(_) {\n if (arguments.length) {\n random = _;\n return cloud;\n } else {\n return random;\n }\n };\n\n return cloud;\n}\n\n// Fetches a monochrome sprite bitmap for the specified text.\n// Load in batches for speed.\nfunction cloudSprite(contextAndRatio, d, data, di) {\n if (d.sprite) return;\n var c = contextAndRatio.context,\n ratio = contextAndRatio.ratio;\n\n c.clearRect(0, 0, (cw << 5) / ratio, ch / ratio);\n var x = 0,\n y = 0,\n maxh = 0,\n n = data.length,\n w, w32, h, i, j;\n --di;\n while (++di < n) {\n d = data[di];\n c.save();\n c.font = d.style + \" \" + d.weight + \" \" + ~~((d.size + 1) / ratio) + \"px \" + d.font;\n w = c.measureText(d.text + \"m\").width * ratio;\n h = d.size << 1;\n if (d.rotate) {\n var sr = Math.sin(d.rotate * cloudRadians),\n cr = Math.cos(d.rotate * cloudRadians),\n wcr = w * cr,\n wsr = w * sr,\n hcr = h * cr,\n hsr = h * sr;\n w = (Math.max(Math.abs(wcr + hsr), Math.abs(wcr - hsr)) + 0x1f) >> 5 << 5;\n h = ~~Math.max(Math.abs(wsr + hcr), Math.abs(wsr - hcr));\n } else {\n w = (w + 0x1f) >> 5 << 5;\n }\n if (h > maxh) maxh = h;\n if (x + w >= (cw << 5)) {\n x = 0;\n y += maxh;\n maxh = 0;\n }\n if (y + h >= ch) break;\n c.translate((x + (w >> 1)) / ratio, (y + (h >> 1)) / ratio);\n if (d.rotate) c.rotate(d.rotate * cloudRadians);\n c.fillText(d.text, 0, 0);\n if (d.padding) {\n c.lineWidth = 2 * d.padding;\n c.strokeText(d.text, 0, 0);\n }\n c.restore();\n d.width = w;\n d.height = h;\n d.xoff = x;\n d.yoff = y;\n d.x1 = w >> 1;\n d.y1 = h >> 1;\n d.x0 = -d.x1;\n d.y0 = -d.y1;\n d.hasText = true;\n x += w;\n }\n var pixels = c.getImageData(0, 0, (cw << 5) / ratio, ch / ratio).data,\n sprite = [];\n while (--di >= 0) {\n d = data[di];\n if (!d.hasText) continue;\n w = d.width;\n w32 = w >> 5;\n h = d.y1 - d.y0;\n // Zero the buffer\n for (i = 0; i < h * w32; i++) sprite[i] = 0;\n x = d.xoff;\n if (x == null) return;\n y = d.yoff;\n var seen = 0,\n seenRow = -1;\n for (j = 0; j < h; j++) {\n for (i = 0; i < w; i++) {\n var k = w32 * j + (i >> 5),\n m = pixels[((y + j) * (cw << 5) + (x + i)) << 2] ? 1 << (31 - (i % 32)) : 0;\n sprite[k] |= m;\n seen |= m;\n }\n if (seen) seenRow = j;\n else {\n d.y0++;\n h--;\n j--;\n y++;\n }\n }\n d.y1 = d.y0 + seenRow;\n d.sprite = sprite.slice(0, (d.y1 - d.y0) * w32);\n }\n}\n\n// Use mask-based collision detection.\nfunction cloudCollide(tag, board, sw) {\n sw >>= 5;\n var sprite = tag.sprite,\n w = tag.width >> 5,\n lx = tag.x - (w << 4),\n sx = lx & 0x7f,\n msx = 32 - sx,\n h = tag.y1 - tag.y0,\n x = (tag.y + tag.y0) * sw + (lx >> 5),\n last;\n for (var j = 0; j < h; j++) {\n last = 0;\n for (var i = 0; i <= w; i++) {\n if (((last << msx) | (i < w ? (last = sprite[j * w + i]) >>> sx : 0))\n & board[x + i]) return true;\n }\n x += sw;\n }\n return false;\n}\n\nfunction cloudBounds(bounds, d) {\n var b0 = bounds[0],\n b1 = bounds[1];\n if (d.x + d.x0 < b0.x) b0.x = d.x + d.x0;\n if (d.y + d.y0 < b0.y) b0.y = d.y + d.y0;\n if (d.x + d.x1 > b1.x) b1.x = d.x + d.x1;\n if (d.y + d.y1 > b1.y) b1.y = d.y + d.y1;\n}\n\nfunction collideRects(a, b) {\n return a.x + a.x1 > b[0].x && a.x + a.x0 < b[1].x && a.y + a.y1 > b[0].y && a.y + a.y0 < b[1].y;\n}\n\nfunction archimedeanSpiral(size) {\n var e = size[0] / size[1];\n return function(t) {\n return [e * (t *= .1) * Math.cos(t), t * Math.sin(t)];\n };\n}\n\nfunction rectangularSpiral(size) {\n var dy = 4,\n dx = dy * size[0] / size[1],\n x = 0,\n y = 0;\n return function(t) {\n var sign = t < 0 ? -1 : 1;\n // See triangular numbers: T_n = n * (n + 1) / 2.\n switch ((Math.sqrt(1 + 4 * sign * t) - sign) & 3) {\n case 0: x += dx; break;\n case 1: y += dy; break;\n case 2: x -= dx; break;\n default: y -= dy; break;\n }\n return [x, y];\n };\n}\n\n// TODO reuse arrays?\nfunction zeroArray(n) {\n var a = [],\n i = -1;\n while (++i < n) a[i] = 0;\n return a;\n}\n\nfunction functor(d) {\n return typeof d === \"function\" ? d : function() { return d; };\n}\n\nvar spirals = {\n archimedean: archimedeanSpiral,\n rectangular: rectangularSpiral\n};\n","import cloud from './CloudLayout';\nimport {Transform} from 'vega-dataflow';\nimport {constant, error, inherits, isFunction} from 'vega-util';\nimport {scale} from 'vega-scale';\nimport {random} from 'vega-statistics';\n\nvar Output = ['x', 'y', 'font', 'fontSize', 'fontStyle', 'fontWeight', 'angle'];\n\nvar Params = ['text', 'font', 'rotate', 'fontSize', 'fontStyle', 'fontWeight'];\n\nexport default function Wordcloud(params) {\n Transform.call(this, cloud(), params);\n}\n\nWordcloud.Definition = {\n \"type\": \"Wordcloud\",\n \"metadata\": {\"modifies\": true},\n \"params\": [\n { \"name\": \"size\", \"type\": \"number\", \"array\": true, \"length\": 2 },\n { \"name\": \"font\", \"type\": \"string\", \"expr\": true, \"default\": \"sans-serif\" },\n { \"name\": \"fontStyle\", \"type\": \"string\", \"expr\": true, \"default\": \"normal\" },\n { \"name\": \"fontWeight\", \"type\": \"string\", \"expr\": true, \"default\": \"normal\" },\n { \"name\": \"fontSize\", \"type\": \"number\", \"expr\": true, \"default\": 14 },\n { \"name\": \"fontSizeRange\", \"type\": \"number\", \"array\": \"nullable\", \"default\": [10, 50] },\n { \"name\": \"rotate\", \"type\": \"number\", \"expr\": true, \"default\": 0 },\n { \"name\": \"text\", \"type\": \"field\" },\n { \"name\": \"spiral\", \"type\": \"string\", \"values\": [\"archimedean\", \"rectangular\"] },\n { \"name\": \"padding\", \"type\": \"number\", \"expr\": true },\n { \"name\": \"as\", \"type\": \"string\", \"array\": true, \"length\": 7, \"default\": Output }\n ]\n};\n\nvar prototype = inherits(Wordcloud, Transform);\n\nprototype.transform = function(_, pulse) {\n if (_.size && !(_.size[0] && _.size[1])) {\n error('Wordcloud size dimensions must be non-zero.');\n }\n\n function modp(param) {\n var p = _[param];\n return isFunction(p) && pulse.modified(p.fields);\n }\n\n var mod = _.modified();\n if (!(mod || pulse.changed(pulse.ADD_REM) || Params.some(modp))) return;\n\n var data = pulse.materialize(pulse.SOURCE).source,\n layout = this.value,\n as = _.as || Output,\n fontSize = _.fontSize || 14,\n range;\n\n isFunction(fontSize)\n ? (range = _.fontSizeRange)\n : (fontSize = constant(fontSize));\n\n // create font size scaling function as needed\n if (range) {\n var fsize = fontSize,\n sizeScale = scale('sqrt')()\n .domain(extent(fsize, data))\n .range(range);\n fontSize = function(x) { return sizeScale(fsize(x)); };\n }\n\n data.forEach(function(t) {\n t[as[0]] = NaN;\n t[as[1]] = NaN;\n t[as[3]] = 0;\n });\n\n // configure layout\n var words = layout\n .words(data)\n .text(_.text)\n .size(_.size || [500, 500])\n .padding(_.padding || 1)\n .spiral(_.spiral || 'archimedean')\n .rotate(_.rotate || 0)\n .font(_.font || 'sans-serif')\n .fontStyle(_.fontStyle || 'normal')\n .fontWeight(_.fontWeight || 'normal')\n .fontSize(fontSize)\n .random(random)\n .layout();\n\n var size = layout.size(),\n dx = size[0] >> 1,\n dy = size[1] >> 1,\n i = 0,\n n = words.length,\n w, t;\n\n for (; i max) max = v;\n }\n\n return [min, max];\n}\n","export function array8(n) { return new Uint8Array(n); }\n\nexport function array16(n) { return new Uint16Array(n); }\n\nexport function array32(n) { return new Uint32Array(n); }\n","import {array8, array16, array32} from './arrays';\n\n/**\n * Maintains CrossFilter state.\n */\nexport default function Bitmaps() {\n\n var width = 8,\n data = [],\n seen = array32(0),\n curr = array(0, width),\n prev = array(0, width);\n\n return {\n\n data: function() { return data; },\n\n seen: function() {\n return (seen = lengthen(seen, data.length));\n },\n\n add: function(array) {\n for (var i=0, j=data.length, n=array.length, t; i boolean (true => remove)\n var n = data.length,\n copy = Array(n - num),\n reindex = data, // reuse old data array for index map\n t, i, j;\n\n // seek forward to first removal\n for (i=0; !map[i] && i k || m > width) {\n width = Math.max(m, width);\n curr = array(n, width, curr);\n prev = array(n, width);\n }\n }\n };\n}\n\nfunction lengthen(array, length, copy) {\n if (array.length >= length) return array;\n copy = copy || new array.constructor(length);\n copy.set(array);\n return copy;\n}\n\nfunction array(n, m, array) {\n var copy = (m < 0x101 ? array8 : m < 0x10001 ? array16 : array32)(n);\n if (array) copy.set(array);\n return copy;\n}\n","export default function(index, i, query) {\n var bit = (1 << i);\n\n return {\n one: bit,\n zero: ~bit,\n range: query.slice(),\n bisect: index.bisect,\n index: index.index,\n size: index.size,\n\n onAdd: function(added, curr) {\n var dim = this,\n range = dim.bisect(dim.range, added.value),\n idx = added.index,\n lo = range[0],\n hi = range[1],\n n1 = idx.length, i;\n\n for (i=0; i b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","export default function(source, keys) {\n return Array.from(keys, key => source[key]);\n}\n","import {array32} from './arrays';\nimport {bisectLeft, bisectRight, permute} from 'd3-array';\n\n/**\n * Maintains a list of values, sorted by key.\n */\nexport default function SortedIndex() {\n var index = array32(0),\n value = [],\n size = 0;\n\n function insert(key, data, base) {\n if (!data.length) return [];\n\n var n0 = size,\n n1 = data.length,\n addv = Array(n1),\n addi = array32(n1),\n oldv, oldi, i;\n\n for (i=0; i 0) for (i=0; i remove\n var n = size,\n idx, i, j;\n\n // seek forward to first removal\n for (i=0; !map[index[i]] && i y ? 1 : 0;\n });\n return permute(values, index);\n}\n\nfunction merge(base, value0, index0, n0, value1, index1, n1, value, index) {\n var i0 = 0, i1 = 0, i;\n\n for (i=0; i0 < n0 && i1 < n1; ++i) {\n if (value0[i0] < value1[i1]) {\n value[i] = value0[i0];\n index[i] = index0[i0++];\n } else {\n value[i] = value1[i1];\n index[i] = index1[i1++] + base;\n }\n }\n\n for (; i0 < n0; ++i0, ++i) {\n value[i] = value0[i0];\n index[i] = index0[i0];\n }\n\n for (; i1 < n1; ++i1, ++i) {\n value[i] = value1[i1];\n index[i] = index1[i1] + base;\n }\n}\n","import Bitmaps from './Bitmaps';\nimport Dimension from './Dimension';\nimport SortedIndex from './SortedIndex';\nimport {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * An indexed multi-dimensional filter.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {Array} params.fields - An array of dimension accessors to filter.\n * @param {Array} params.query - An array of per-dimension range queries.\n */\nexport default function CrossFilter(params) {\n Transform.call(this, Bitmaps(), params);\n this._indices = null;\n this._dims = null;\n}\n\nCrossFilter.Definition = {\n \"type\": \"CrossFilter\",\n \"metadata\": {},\n \"params\": [\n { \"name\": \"fields\", \"type\": \"field\", \"array\": true, \"required\": true },\n { \"name\": \"query\", \"type\": \"array\", \"array\": true, \"required\": true,\n \"content\": {\"type\": \"number\", \"array\": true, \"length\": 2} }\n ]\n};\n\nvar prototype = inherits(CrossFilter, Transform);\n\nprototype.transform = function(_, pulse) {\n if (!this._dims) {\n return this.init(_, pulse);\n } else {\n var init = _.modified('fields')\n || _.fields.some(function(f) { return pulse.modified(f.fields); });\n\n return init\n ? this.reinit(_, pulse)\n : this.eval(_, pulse);\n }\n};\n\nprototype.init = function(_, pulse) {\n var fields = _.fields,\n query = _.query,\n indices = this._indices = {},\n dims = this._dims = [],\n m = query.length,\n i = 0, key, index;\n\n // instantiate indices and dimensions\n for (; i lo0) {\n for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n }\n\n // Fast incremental update based on previous hi index.\n if (hi1 > hi0) {\n for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n } else if (hi1 < hi0) {\n for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) {\n k = index[i];\n if (seen[k] !== stamp) {\n prev[k] = curr[k];\n seen[k] = stamp;\n out.push(k);\n }\n curr[k] ^= one;\n }\n }\n\n dim.range = query.slice();\n};\n\nprototype.incrementOne = function(dim, query, add, rem) {\n var bits = this.value,\n curr = bits.curr(),\n index = dim.index(),\n old = dim.bisect(dim.range),\n range = dim.bisect(query),\n lo1 = range[0],\n hi1 = range[1],\n lo0 = old[0],\n hi0 = old[1],\n one = dim.one,\n i, j, k;\n\n // Fast incremental update based on previous lo index.\n if (lo1 < lo0) {\n for (i = lo1, j = Math.min(lo0, hi1); i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n add.push(k);\n }\n } else if (lo1 > lo0) {\n for (i = lo0, j = Math.min(lo1, hi0); i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n rem.push(k);\n }\n }\n\n // Fast incremental update based on previous hi index.\n if (hi1 > hi0) {\n for (i = Math.max(lo1, hi0), j = hi1; i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n add.push(k);\n }\n } else if (hi1 < hi0) {\n for (i = Math.max(lo0, hi1), j = hi0; i < j; ++i) {\n k = index[i];\n curr[k] ^= one;\n rem.push(k);\n }\n }\n\n dim.range = query.slice();\n};\n","import {Transform} from 'vega-dataflow';\nimport {inherits} from 'vega-util';\n\n/**\n * Selectively filters tuples by resolving against a filter bitmap.\n * Useful for processing the output of a cross-filter transform.\n * @constructor\n * @param {object} params - The parameters for this operator.\n * @param {object} params.ignore - A bit mask indicating which filters to ignore.\n * @param {object} params.filter - The per-tuple filter bitmaps. Typically this\n * parameter value is a reference to a {@link CrossFilter} transform.\n */\nexport default function ResolveFilter(params) {\n Transform.call(this, null, params);\n}\n\nResolveFilter.Definition = {\n \"type\": \"ResolveFilter\",\n \"metadata\": {},\n \"params\": [\n { \"name\": \"ignore\", \"type\": \"number\", \"required\": true,\n \"description\": \"A bit mask indicating which filters to ignore.\" },\n { \"name\": \"filter\", \"type\": \"object\", \"required\": true,\n \"description\": \"Per-tuple filter bitmaps from a CrossFilter transform.\" }\n ]\n};\n\nvar prototype = inherits(ResolveFilter, Transform);\n\nprototype.transform = function(_, pulse) {\n var ignore = ~(_.ignore || 0), // bit mask where zeros -> dims to ignore\n bitmap = _.filter,\n mask = bitmap.mask;\n\n // exit early if no relevant filter changes\n if ((mask & ignore) === 0) return pulse.StopPropagation;\n\n var output = pulse.fork(pulse.ALL),\n data = bitmap.data(),\n curr = bitmap.curr(),\n prev = bitmap.prev(),\n pass = function(k) {\n return !(curr[k] & ignore) ? data[k] : null;\n };\n\n // propagate all mod tuples that pass the filter\n output.filter(output.MOD, pass);\n\n // determine add & rem tuples via filter functions\n // for efficiency, we do *not* populate new arrays,\n // instead we add filter functions applied downstream\n\n if (!(mask & (mask-1))) { // only one filter changed\n output.filter(output.ADD, pass);\n output.filter(output.REM, function(k) {\n return (curr[k] & ignore) === mask ? data[k] : null;\n });\n\n } else { // multiple filters changed\n output.filter(output.ADD, function(k) {\n var c = curr[k] & ignore,\n f = !c && (c ^ (prev[k] & ignore));\n return f ? data[k] : null;\n });\n output.filter(output.REM, function(k) {\n var c = curr[k] & ignore,\n f = c && !(c ^ (c ^ (prev[k] & ignore)));\n return f ? data[k] : null;\n });\n }\n\n // add filter to source data in case of reflow...\n return output.filter(output.SOURCE, function(t) { return pass(t._index); });\n};\n","import {isString} from 'vega-util';\n\nvar Default = 'default';\n\nexport default function(view) {\n var cursor = view._signals.cursor;\n\n // add cursor signal to dataflow, if needed\n if (!cursor) {\n view._signals.cursor = (cursor = view.add({user: Default, item: null}));\n }\n\n // evaluate cursor on each mousemove event\n view.on(view.events('view', 'mousemove'), cursor,\n function(_, event) {\n var value = cursor.value,\n user = value ? (isString(value) ? value : value.user) : Default,\n item = event.item && event.item.cursor || null;\n\n return (value && user === value.user && item == value.item) ? value\n : {user: user, item: item};\n }\n );\n\n // when cursor signal updates, set visible cursor\n view.add(null, function(_) {\n var user = _.cursor,\n item = this.value;\n\n if (!isString(user)) {\n item = user.item;\n user = user.user;\n }\n\n setCursor(user && user !== Default ? user : (item || user));\n\n return item;\n }, {cursor: cursor});\n}\n\nfunction setCursor(cursor) {\n // set cursor on document body\n // this ensures cursor applies even if dragging out of view\n if (typeof document !== 'undefined' && document.body) {\n document.body.style.cursor = cursor;\n }\n}\n","import {changeset, isChangeSet} from 'vega-dataflow';\nimport {error} from 'vega-util';\n\nexport function dataref(view, name) {\n var data = view._runtime.data;\n if (!data.hasOwnProperty(name)) {\n error('Unrecognized data set: ' + name);\n }\n return data[name];\n}\n\nexport function data(name) {\n return dataref(this, name).values.value;\n}\n\nexport function change(name, changes) {\n if (!isChangeSet(changes)) {\n error('Second argument to changes must be a changeset.');\n }\n var dataset = dataref(this, name);\n dataset.modified = true;\n return this.pulse(dataset.input, changes);\n}\n\nexport function insert(name, _) {\n return change.call(this, name, changeset().insert(_));\n}\n\nexport function remove(name, _) {\n return change.call(this, name, changeset().remove(_));\n}\n","export function width(view) {\n var padding = view.padding();\n return Math.max(0, view._viewWidth + padding.left + padding.right);\n}\n\nexport function height(view) {\n var padding = view.padding();\n return Math.max(0, view._viewHeight + padding.top + padding.bottom);\n}\n\nexport function offset(view) {\n var padding = view.padding(),\n origin = view._origin;\n return [\n padding.left + origin[0],\n padding.top + origin[1]\n ];\n}\n\nexport function resizeRenderer(view) {\n var origin = offset(view),\n w = width(view),\n h = height(view);\n\n view._renderer.background(view._background);\n view._renderer.resize(w, h, origin);\n view._handler.origin(origin);\n\n view._resizeListeners.forEach(function(handler) {\n try {\n handler(w, h);\n } catch (error) {\n view.error(error);\n }\n });\n}\n","import {offset} from './render-size';\nimport {constant, isString} from 'vega-util';\nimport {point} from 'vega-scenegraph';\n\n/**\n * Extend an event with additional view-specific methods.\n * Adds a new property ('vega') to an event that provides a number\n * of methods for querying information about the current interaction.\n * The vega object provides the following methods:\n * view - Returns the backing View instance.\n * item - Returns the currently active scenegraph item (if any).\n * group - Returns the currently active scenegraph group (if any).\n * This method accepts a single string-typed argument indicating the name\n * of the desired parent group. The scenegraph will be traversed from\n * the item up towards the root to search for a matching group. If no\n * argument is provided the enclosing group for the active item is\n * returned, unless the item it itself a group, in which case it is\n * returned directly.\n * xy - Returns a two-element array containing the x and y coordinates for\n * mouse or touch events. For touch events, this is based on the first\n * elements in the changedTouches array. This method accepts a single\n * argument: either an item instance or mark name that should serve as\n * the reference coordinate system. If no argument is provided the\n * top-level view coordinate system is assumed.\n * x - Returns the current x-coordinate, accepts the same arguments as xy.\n * y - Returns the current y-coordinate, accepts the same arguments as xy.\n * @param {Event} event - The input event to extend.\n * @param {Item} item - The currently active scenegraph item (if any).\n * @return {Event} - The extended input event.\n */\nexport default function(view, event, item) {\n var r = view._renderer,\n el = r && r.canvas(),\n p, e, translate;\n\n if (el) {\n translate = offset(view);\n e = event.changedTouches ? event.changedTouches[0] : event;\n p = point(e, el);\n p[0] -= translate[0];\n p[1] -= translate[1];\n }\n\n event.dataflow = view;\n event.item = item;\n event.vega = extension(view, item, p);\n return event;\n}\n\nfunction extension(view, item, point) {\n var itemGroup = item\n ? item.mark.marktype === 'group' ? item : item.mark.group\n : null;\n\n function group(name) {\n var g = itemGroup, i;\n if (name) for (i = item; i; i = i.mark.group) {\n if (i.mark.name === name) { g = i; break; }\n }\n return g && g.mark && g.mark.interactive ? g : {};\n }\n\n function xy(item) {\n if (!item) return point;\n if (isString(item)) item = group(item);\n\n var p = point.slice();\n while (item) {\n p[0] -= item.x || 0;\n p[1] -= item.y || 0;\n item = item.mark && item.mark.group;\n }\n return p;\n }\n\n return {\n view: constant(view),\n item: constant(item || {}),\n group: group,\n xy: xy,\n x: function(item) { return xy(item)[0]; },\n y: function(item) { return xy(item)[1]; }\n };\n}\n","import eventExtend from './events-extend';\nimport {EventStream} from 'vega-dataflow';\nimport {extend, isArray, toSet} from 'vega-util';\n\nvar VIEW = 'view',\n TIMER = 'timer',\n WINDOW = 'window',\n NO_TRAP = {trap: false};\n\n/**\n * Initialize event handling configuration.\n * @param {object} config - The configuration settings.\n * @return {object}\n */\nexport function initializeEventConfig(config) {\n config = extend({}, config);\n\n var def = config.defaults;\n if (def) {\n if (isArray(def.prevent)) {\n def.prevent = toSet(def.prevent);\n }\n if (isArray(def.allow)) {\n def.allow = toSet(def.allow);\n }\n }\n\n return config;\n}\n\nfunction prevent(view, type) {\n var def = view._eventConfig.defaults,\n prevent = def && def.prevent,\n allow = def && def.allow;\n\n return prevent === false || allow === true ? false\n : prevent === true || allow === false ? true\n : prevent ? prevent[type]\n : allow ? !allow[type]\n : view.preventDefault();\n}\n\n/**\n * Create a new event stream from an event source.\n * @param {object} source - The event source to monitor.\n * @param {string} type - The event type.\n * @param {function(object): boolean} [filter] - Event filter function.\n * @return {EventStream}\n */\nexport function events(source, type, filter) {\n var view = this,\n s = new EventStream(filter),\n send = function(e, item) {\n view.runAsync(null, () => {\n if (source === VIEW && prevent(view, type)) {\n e.preventDefault();\n }\n s.receive(eventExtend(view, e, item));\n });\n },\n sources;\n\n if (source === TIMER) {\n view.timer(send, type);\n }\n\n else if (source === VIEW) {\n // send traps errors, so use {trap: false} option\n view.addEventListener(type, send, NO_TRAP);\n }\n\n else {\n if (source === WINDOW) {\n if (typeof window !== 'undefined') sources = [window];\n } else if (typeof document !== 'undefined') {\n sources = document.querySelectorAll(source);\n }\n\n if (!sources) {\n view.warn('Can not resolve event source: ' + source);\n } else {\n for (var i=0, n=sources.length; i= 0) {\n timers[n].stop();\n }\n\n n = listeners.length;\n while (--n >= 0) {\n e = listeners[n];\n m = e.sources.length;\n while (--m >= 0) {\n e.sources[m].removeEventListener(e.type, e.handler);\n }\n }\n\n if (tooltip) {\n tooltip.call(this, this._handler, null, null, null);\n }\n\n return this;\n}\n","export default function(tag, attr, text) {\n var el = document.createElement(tag);\n for (var key in attr) el.setAttribute(key, attr[key]);\n if (text != null) el.textContent = text;\n return el;\n}\n","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","var e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\nexport default function(start, stop, count) {\n var reverse,\n i = -1,\n n,\n ticks,\n step;\n\n stop = +stop, start = +start, count = +count;\n if (start === stop && count > 0) return [start];\n if (reverse = stop < start) n = start, start = stop, stop = n;\n if ((step = tickIncrement(start, stop, count)) === 0 || !isFinite(step)) return [];\n\n if (step > 0) {\n start = Math.ceil(start / step);\n stop = Math.floor(stop / step);\n ticks = new Array(n = Math.ceil(stop - start + 1));\n while (++i < n) ticks[i] = (start + i) * step;\n } else {\n start = Math.floor(start * step);\n stop = Math.ceil(stop * step);\n ticks = new Array(n = Math.ceil(start - stop + 1));\n while (++i < n) ticks[i] = (start - i) / step;\n }\n\n if (reverse) ticks.reverse();\n\n return ticks;\n}\n\nexport function tickIncrement(start, stop, count) {\n var step = (stop - start) / Math.max(0, count),\n power = Math.floor(Math.log(step) / Math.LN10),\n error = step / Math.pow(10, power);\n return power >= 0\n ? (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1) * Math.pow(10, power)\n : -Math.pow(10, -power) / (error >= e10 ? 10 : error >= e5 ? 5 : error >= e2 ? 2 : 1);\n}\n\nexport function tickStep(start, stop, count) {\n var step0 = Math.abs(stop - start) / Math.max(0, count),\n step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10)),\n error = step0 / step1;\n if (error >= e10) step1 *= 10;\n else if (error >= e5) step1 *= 5;\n else if (error >= e2) step1 *= 2;\n return stop < start ? -step1 : step1;\n}\n","import element from './element';\nimport {debounce} from 'vega-util';\nimport {tickStep} from 'd3-array';\n\nvar BindClass = 'vega-bind',\n NameClass = 'vega-bind-name',\n RadioClass = 'vega-bind-radio',\n OptionClass = 'vega-option-';\n\n/**\n * Bind a signal to an external HTML input element. The resulting two-way\n * binding will propagate input changes to signals, and propagate signal\n * changes to the input element state. If this view instance has no parent\n * element, we assume the view is headless and no bindings are created.\n * @param {Element|string} el - The parent DOM element to which the input\n * element should be appended as a child. If string-valued, this argument\n * will be treated as a CSS selector. If null or undefined, the parent\n * element of this view will be used as the element.\n * @param {object} param - The binding parameters which specify the signal\n * to bind to, the input element type, and type-specific configuration.\n * @return {View} - This view instance.\n */\nexport default function(view, el, binding) {\n if (!el) return;\n\n var param = binding.param,\n bind = binding.state;\n\n if (!bind) {\n bind = binding.state = {\n elements: null,\n active: false,\n set: null,\n update: function(value) {\n if (value !== view.signal(param.signal)) {\n view.runAsync(null, function() {\n bind.source = true;\n view.signal(param.signal, value);\n });\n }\n }\n };\n if (param.debounce) {\n bind.update = debounce(param.debounce, bind.update);\n }\n }\n\n generate(bind, el, param, view.signal(param.signal));\n\n if (!bind.active) {\n view.on(view._signals[param.signal], null, function() {\n bind.source\n ? (bind.source = false)\n : bind.set(view.signal(param.signal));\n });\n bind.active = true;\n }\n\n return bind;\n}\n\n/**\n * Generate an HTML input form element and bind it to a signal.\n */\nfunction generate(bind, el, param, value) {\n var div = element('div', {'class': BindClass});\n\n div.appendChild(element('span',\n {'class': NameClass},\n (param.name || param.signal)\n ));\n\n el.appendChild(div);\n\n var input = form;\n switch (param.input) {\n case 'checkbox': input = checkbox; break;\n case 'select': input = select; break;\n case 'radio': input = radio; break;\n case 'range': input = range; break;\n }\n\n input(bind, div, param, value);\n}\n\n/**\n * Generates an arbitrary input form element.\n * The input type is controlled via user-provided parameters.\n */\nfunction form(bind, el, param, value) {\n var node = element('input');\n\n for (var key in param) {\n if (key !== 'signal' && key !== 'element') {\n node.setAttribute(key === 'input' ? 'type' : key, param[key]);\n }\n }\n node.setAttribute('name', param.signal);\n node.value = value;\n\n el.appendChild(node);\n\n node.addEventListener('input', function() {\n bind.update(node.value);\n });\n\n bind.elements = [node];\n bind.set = function(value) { node.value = value; };\n}\n\n/**\n * Generates a checkbox input element.\n */\nfunction checkbox(bind, el, param, value) {\n var attr = {type: 'checkbox', name: param.signal};\n if (value) attr.checked = true;\n var node = element('input', attr);\n\n el.appendChild(node);\n\n node.addEventListener('change', function() {\n bind.update(node.checked);\n });\n\n bind.elements = [node];\n bind.set = function(value) { node.checked = !!value || null; }\n}\n\n/**\n * Generates a selection list input element.\n */\nfunction select(bind, el, param, value) {\n var node = element('select', {name: param.signal});\n\n param.options.forEach(function(option) {\n var attr = {value: option};\n if (valuesEqual(option, value)) attr.selected = true;\n node.appendChild(element('option', attr, option+''));\n });\n\n el.appendChild(node);\n\n node.addEventListener('change', function() {\n bind.update(param.options[node.selectedIndex]);\n });\n\n bind.elements = [node];\n bind.set = function(value) {\n for (var i=0, n=param.options.length; i\n Copyright (C) 2013 Thaddee Tyl \n Copyright (C) 2013 Mathias Bynens \n Copyright (C) 2012 Ariya Hidayat \n Copyright (C) 2012 Mathias Bynens \n Copyright (C) 2012 Joost-Wim Boekesteijn \n Copyright (C) 2012 Kris Kowal \n Copyright (C) 2012 Yusuke Suzuki \n Copyright (C) 2012 Arpad Borsos \n Copyright (C) 2011 Ariya Hidayat \n\n Redistribution and use in source and binary forms, with or without\n modification, are permitted provided that the following conditions are met:\n\n * Redistributions of source code must retain the above copyright\n notice, this list of conditions and the following disclaimer.\n * Redistributions in binary form must reproduce the above copyright\n notice, this list of conditions and the following disclaimer in the\n documentation and/or other materials provided with the distribution.\n\n THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\n AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE\n ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY\n DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;\n LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND\n ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF\n THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n*/\nimport ASTNode from './ast';\n\nvar TokenName,\n source,\n index,\n length,\n lookahead;\n\nvar TokenBooleanLiteral = 1,\n TokenEOF = 2,\n TokenIdentifier = 3,\n TokenKeyword = 4,\n TokenNullLiteral = 5,\n TokenNumericLiteral = 6,\n TokenPunctuator = 7,\n TokenStringLiteral = 8,\n TokenRegularExpression = 9;\n\nTokenName = {};\nTokenName[TokenBooleanLiteral] = 'Boolean';\nTokenName[TokenEOF] = '';\nTokenName[TokenIdentifier] = 'Identifier';\nTokenName[TokenKeyword] = 'Keyword';\nTokenName[TokenNullLiteral] = 'Null';\nTokenName[TokenNumericLiteral] = 'Numeric';\nTokenName[TokenPunctuator] = 'Punctuator';\nTokenName[TokenStringLiteral] = 'String';\nTokenName[TokenRegularExpression] = 'RegularExpression';\n\nvar SyntaxArrayExpression = 'ArrayExpression',\n SyntaxBinaryExpression = 'BinaryExpression',\n SyntaxCallExpression = 'CallExpression',\n SyntaxConditionalExpression = 'ConditionalExpression',\n SyntaxIdentifier = 'Identifier',\n SyntaxLiteral = 'Literal',\n SyntaxLogicalExpression = 'LogicalExpression',\n SyntaxMemberExpression = 'MemberExpression',\n SyntaxObjectExpression = 'ObjectExpression',\n SyntaxProperty = 'Property',\n SyntaxUnaryExpression = 'UnaryExpression';\n\n// Error messages should be identical to V8.\nvar MessageUnexpectedToken = 'Unexpected token %0',\n MessageUnexpectedNumber = 'Unexpected number',\n MessageUnexpectedString = 'Unexpected string',\n MessageUnexpectedIdentifier = 'Unexpected identifier',\n MessageUnexpectedReserved = 'Unexpected reserved word',\n MessageUnexpectedEOS = 'Unexpected end of input',\n MessageInvalidRegExp = 'Invalid regular expression',\n MessageUnterminatedRegExp = 'Invalid regular expression: missing /',\n MessageStrictOctalLiteral = 'Octal literals are not allowed in strict mode.',\n MessageStrictDuplicateProperty = 'Duplicate data property in object literal not allowed in strict mode';\n\nvar ILLEGAL = 'ILLEGAL',\n DISABLED = 'Disabled.';\n\n// See also tools/generate-unicode-regex.py.\n var RegexNonAsciiIdentifierStart = new RegExp(\"[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0370-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0620-\\\\u064A\\\\u066E\\\\u066F\\\\u0671-\\\\u06D3\\\\u06D5\\\\u06E5\\\\u06E6\\\\u06EE\\\\u06EF\\\\u06FA-\\\\u06FC\\\\u06FF\\\\u0710\\\\u0712-\\\\u072F\\\\u074D-\\\\u07A5\\\\u07B1\\\\u07CA-\\\\u07EA\\\\u07F4\\\\u07F5\\\\u07FA\\\\u0800-\\\\u0815\\\\u081A\\\\u0824\\\\u0828\\\\u0840-\\\\u0858\\\\u08A0-\\\\u08B2\\\\u0904-\\\\u0939\\\\u093D\\\\u0950\\\\u0958-\\\\u0961\\\\u0971-\\\\u0980\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BD\\\\u09CE\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E1\\\\u09F0\\\\u09F1\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A72-\\\\u0A74\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABD\\\\u0AD0\\\\u0AE0\\\\u0AE1\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3D\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B61\\\\u0B71\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BD0\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D\\\\u0C58\\\\u0C59\\\\u0C60\\\\u0C61\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBD\\\\u0CDE\\\\u0CE0\\\\u0CE1\\\\u0CF1\\\\u0CF2\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D\\\\u0D4E\\\\u0D60\\\\u0D61\\\\u0D7A-\\\\u0D7F\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0E01-\\\\u0E30\\\\u0E32\\\\u0E33\\\\u0E40-\\\\u0E46\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB0\\\\u0EB2\\\\u0EB3\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F40-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F88-\\\\u0F8C\\\\u1000-\\\\u102A\\\\u103F\\\\u1050-\\\\u1055\\\\u105A-\\\\u105D\\\\u1061\\\\u1065\\\\u1066\\\\u106E-\\\\u1070\\\\u1075-\\\\u1081\\\\u108E\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1711\\\\u1720-\\\\u1731\\\\u1740-\\\\u1751\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1780-\\\\u17B3\\\\u17D7\\\\u17DC\\\\u1820-\\\\u1877\\\\u1880-\\\\u18A8\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1950-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19C1-\\\\u19C7\\\\u1A00-\\\\u1A16\\\\u1A20-\\\\u1A54\\\\u1AA7\\\\u1B05-\\\\u1B33\\\\u1B45-\\\\u1B4B\\\\u1B83-\\\\u1BA0\\\\u1BAE\\\\u1BAF\\\\u1BBA-\\\\u1BE5\\\\u1C00-\\\\u1C23\\\\u1C4D-\\\\u1C4F\\\\u1C5A-\\\\u1C7D\\\\u1CE9-\\\\u1CEC\\\\u1CEE-\\\\u1CF1\\\\u1CF5\\\\u1CF6\\\\u1D00-\\\\u1DBF\\\\u1E00-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CEE\\\\u2CF2\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D80-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u3029\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA61F\\\\uA62A\\\\uA62B\\\\uA640-\\\\uA66E\\\\uA67F-\\\\uA69D\\\\uA6A0-\\\\uA6EF\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA801\\\\uA803-\\\\uA805\\\\uA807-\\\\uA80A\\\\uA80C-\\\\uA822\\\\uA840-\\\\uA873\\\\uA882-\\\\uA8B3\\\\uA8F2-\\\\uA8F7\\\\uA8FB\\\\uA90A-\\\\uA925\\\\uA930-\\\\uA946\\\\uA960-\\\\uA97C\\\\uA984-\\\\uA9B2\\\\uA9CF\\\\uA9E0-\\\\uA9E4\\\\uA9E6-\\\\uA9EF\\\\uA9FA-\\\\uA9FE\\\\uAA00-\\\\uAA28\\\\uAA40-\\\\uAA42\\\\uAA44-\\\\uAA4B\\\\uAA60-\\\\uAA76\\\\uAA7A\\\\uAA7E-\\\\uAAAF\\\\uAAB1\\\\uAAB5\\\\uAAB6\\\\uAAB9-\\\\uAABD\\\\uAAC0\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEA\\\\uAAF2-\\\\uAAF4\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABE2\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D\\\\uFB1F-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF21-\\\\uFF3A\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]\"),\n RegexNonAsciiIdentifierPart = new RegExp(\"[\\\\xAA\\\\xB5\\\\xBA\\\\xC0-\\\\xD6\\\\xD8-\\\\xF6\\\\xF8-\\\\u02C1\\\\u02C6-\\\\u02D1\\\\u02E0-\\\\u02E4\\\\u02EC\\\\u02EE\\\\u0300-\\\\u0374\\\\u0376\\\\u0377\\\\u037A-\\\\u037D\\\\u037F\\\\u0386\\\\u0388-\\\\u038A\\\\u038C\\\\u038E-\\\\u03A1\\\\u03A3-\\\\u03F5\\\\u03F7-\\\\u0481\\\\u0483-\\\\u0487\\\\u048A-\\\\u052F\\\\u0531-\\\\u0556\\\\u0559\\\\u0561-\\\\u0587\\\\u0591-\\\\u05BD\\\\u05BF\\\\u05C1\\\\u05C2\\\\u05C4\\\\u05C5\\\\u05C7\\\\u05D0-\\\\u05EA\\\\u05F0-\\\\u05F2\\\\u0610-\\\\u061A\\\\u0620-\\\\u0669\\\\u066E-\\\\u06D3\\\\u06D5-\\\\u06DC\\\\u06DF-\\\\u06E8\\\\u06EA-\\\\u06FC\\\\u06FF\\\\u0710-\\\\u074A\\\\u074D-\\\\u07B1\\\\u07C0-\\\\u07F5\\\\u07FA\\\\u0800-\\\\u082D\\\\u0840-\\\\u085B\\\\u08A0-\\\\u08B2\\\\u08E4-\\\\u0963\\\\u0966-\\\\u096F\\\\u0971-\\\\u0983\\\\u0985-\\\\u098C\\\\u098F\\\\u0990\\\\u0993-\\\\u09A8\\\\u09AA-\\\\u09B0\\\\u09B2\\\\u09B6-\\\\u09B9\\\\u09BC-\\\\u09C4\\\\u09C7\\\\u09C8\\\\u09CB-\\\\u09CE\\\\u09D7\\\\u09DC\\\\u09DD\\\\u09DF-\\\\u09E3\\\\u09E6-\\\\u09F1\\\\u0A01-\\\\u0A03\\\\u0A05-\\\\u0A0A\\\\u0A0F\\\\u0A10\\\\u0A13-\\\\u0A28\\\\u0A2A-\\\\u0A30\\\\u0A32\\\\u0A33\\\\u0A35\\\\u0A36\\\\u0A38\\\\u0A39\\\\u0A3C\\\\u0A3E-\\\\u0A42\\\\u0A47\\\\u0A48\\\\u0A4B-\\\\u0A4D\\\\u0A51\\\\u0A59-\\\\u0A5C\\\\u0A5E\\\\u0A66-\\\\u0A75\\\\u0A81-\\\\u0A83\\\\u0A85-\\\\u0A8D\\\\u0A8F-\\\\u0A91\\\\u0A93-\\\\u0AA8\\\\u0AAA-\\\\u0AB0\\\\u0AB2\\\\u0AB3\\\\u0AB5-\\\\u0AB9\\\\u0ABC-\\\\u0AC5\\\\u0AC7-\\\\u0AC9\\\\u0ACB-\\\\u0ACD\\\\u0AD0\\\\u0AE0-\\\\u0AE3\\\\u0AE6-\\\\u0AEF\\\\u0B01-\\\\u0B03\\\\u0B05-\\\\u0B0C\\\\u0B0F\\\\u0B10\\\\u0B13-\\\\u0B28\\\\u0B2A-\\\\u0B30\\\\u0B32\\\\u0B33\\\\u0B35-\\\\u0B39\\\\u0B3C-\\\\u0B44\\\\u0B47\\\\u0B48\\\\u0B4B-\\\\u0B4D\\\\u0B56\\\\u0B57\\\\u0B5C\\\\u0B5D\\\\u0B5F-\\\\u0B63\\\\u0B66-\\\\u0B6F\\\\u0B71\\\\u0B82\\\\u0B83\\\\u0B85-\\\\u0B8A\\\\u0B8E-\\\\u0B90\\\\u0B92-\\\\u0B95\\\\u0B99\\\\u0B9A\\\\u0B9C\\\\u0B9E\\\\u0B9F\\\\u0BA3\\\\u0BA4\\\\u0BA8-\\\\u0BAA\\\\u0BAE-\\\\u0BB9\\\\u0BBE-\\\\u0BC2\\\\u0BC6-\\\\u0BC8\\\\u0BCA-\\\\u0BCD\\\\u0BD0\\\\u0BD7\\\\u0BE6-\\\\u0BEF\\\\u0C00-\\\\u0C03\\\\u0C05-\\\\u0C0C\\\\u0C0E-\\\\u0C10\\\\u0C12-\\\\u0C28\\\\u0C2A-\\\\u0C39\\\\u0C3D-\\\\u0C44\\\\u0C46-\\\\u0C48\\\\u0C4A-\\\\u0C4D\\\\u0C55\\\\u0C56\\\\u0C58\\\\u0C59\\\\u0C60-\\\\u0C63\\\\u0C66-\\\\u0C6F\\\\u0C81-\\\\u0C83\\\\u0C85-\\\\u0C8C\\\\u0C8E-\\\\u0C90\\\\u0C92-\\\\u0CA8\\\\u0CAA-\\\\u0CB3\\\\u0CB5-\\\\u0CB9\\\\u0CBC-\\\\u0CC4\\\\u0CC6-\\\\u0CC8\\\\u0CCA-\\\\u0CCD\\\\u0CD5\\\\u0CD6\\\\u0CDE\\\\u0CE0-\\\\u0CE3\\\\u0CE6-\\\\u0CEF\\\\u0CF1\\\\u0CF2\\\\u0D01-\\\\u0D03\\\\u0D05-\\\\u0D0C\\\\u0D0E-\\\\u0D10\\\\u0D12-\\\\u0D3A\\\\u0D3D-\\\\u0D44\\\\u0D46-\\\\u0D48\\\\u0D4A-\\\\u0D4E\\\\u0D57\\\\u0D60-\\\\u0D63\\\\u0D66-\\\\u0D6F\\\\u0D7A-\\\\u0D7F\\\\u0D82\\\\u0D83\\\\u0D85-\\\\u0D96\\\\u0D9A-\\\\u0DB1\\\\u0DB3-\\\\u0DBB\\\\u0DBD\\\\u0DC0-\\\\u0DC6\\\\u0DCA\\\\u0DCF-\\\\u0DD4\\\\u0DD6\\\\u0DD8-\\\\u0DDF\\\\u0DE6-\\\\u0DEF\\\\u0DF2\\\\u0DF3\\\\u0E01-\\\\u0E3A\\\\u0E40-\\\\u0E4E\\\\u0E50-\\\\u0E59\\\\u0E81\\\\u0E82\\\\u0E84\\\\u0E87\\\\u0E88\\\\u0E8A\\\\u0E8D\\\\u0E94-\\\\u0E97\\\\u0E99-\\\\u0E9F\\\\u0EA1-\\\\u0EA3\\\\u0EA5\\\\u0EA7\\\\u0EAA\\\\u0EAB\\\\u0EAD-\\\\u0EB9\\\\u0EBB-\\\\u0EBD\\\\u0EC0-\\\\u0EC4\\\\u0EC6\\\\u0EC8-\\\\u0ECD\\\\u0ED0-\\\\u0ED9\\\\u0EDC-\\\\u0EDF\\\\u0F00\\\\u0F18\\\\u0F19\\\\u0F20-\\\\u0F29\\\\u0F35\\\\u0F37\\\\u0F39\\\\u0F3E-\\\\u0F47\\\\u0F49-\\\\u0F6C\\\\u0F71-\\\\u0F84\\\\u0F86-\\\\u0F97\\\\u0F99-\\\\u0FBC\\\\u0FC6\\\\u1000-\\\\u1049\\\\u1050-\\\\u109D\\\\u10A0-\\\\u10C5\\\\u10C7\\\\u10CD\\\\u10D0-\\\\u10FA\\\\u10FC-\\\\u1248\\\\u124A-\\\\u124D\\\\u1250-\\\\u1256\\\\u1258\\\\u125A-\\\\u125D\\\\u1260-\\\\u1288\\\\u128A-\\\\u128D\\\\u1290-\\\\u12B0\\\\u12B2-\\\\u12B5\\\\u12B8-\\\\u12BE\\\\u12C0\\\\u12C2-\\\\u12C5\\\\u12C8-\\\\u12D6\\\\u12D8-\\\\u1310\\\\u1312-\\\\u1315\\\\u1318-\\\\u135A\\\\u135D-\\\\u135F\\\\u1380-\\\\u138F\\\\u13A0-\\\\u13F4\\\\u1401-\\\\u166C\\\\u166F-\\\\u167F\\\\u1681-\\\\u169A\\\\u16A0-\\\\u16EA\\\\u16EE-\\\\u16F8\\\\u1700-\\\\u170C\\\\u170E-\\\\u1714\\\\u1720-\\\\u1734\\\\u1740-\\\\u1753\\\\u1760-\\\\u176C\\\\u176E-\\\\u1770\\\\u1772\\\\u1773\\\\u1780-\\\\u17D3\\\\u17D7\\\\u17DC\\\\u17DD\\\\u17E0-\\\\u17E9\\\\u180B-\\\\u180D\\\\u1810-\\\\u1819\\\\u1820-\\\\u1877\\\\u1880-\\\\u18AA\\\\u18B0-\\\\u18F5\\\\u1900-\\\\u191E\\\\u1920-\\\\u192B\\\\u1930-\\\\u193B\\\\u1946-\\\\u196D\\\\u1970-\\\\u1974\\\\u1980-\\\\u19AB\\\\u19B0-\\\\u19C9\\\\u19D0-\\\\u19D9\\\\u1A00-\\\\u1A1B\\\\u1A20-\\\\u1A5E\\\\u1A60-\\\\u1A7C\\\\u1A7F-\\\\u1A89\\\\u1A90-\\\\u1A99\\\\u1AA7\\\\u1AB0-\\\\u1ABD\\\\u1B00-\\\\u1B4B\\\\u1B50-\\\\u1B59\\\\u1B6B-\\\\u1B73\\\\u1B80-\\\\u1BF3\\\\u1C00-\\\\u1C37\\\\u1C40-\\\\u1C49\\\\u1C4D-\\\\u1C7D\\\\u1CD0-\\\\u1CD2\\\\u1CD4-\\\\u1CF6\\\\u1CF8\\\\u1CF9\\\\u1D00-\\\\u1DF5\\\\u1DFC-\\\\u1F15\\\\u1F18-\\\\u1F1D\\\\u1F20-\\\\u1F45\\\\u1F48-\\\\u1F4D\\\\u1F50-\\\\u1F57\\\\u1F59\\\\u1F5B\\\\u1F5D\\\\u1F5F-\\\\u1F7D\\\\u1F80-\\\\u1FB4\\\\u1FB6-\\\\u1FBC\\\\u1FBE\\\\u1FC2-\\\\u1FC4\\\\u1FC6-\\\\u1FCC\\\\u1FD0-\\\\u1FD3\\\\u1FD6-\\\\u1FDB\\\\u1FE0-\\\\u1FEC\\\\u1FF2-\\\\u1FF4\\\\u1FF6-\\\\u1FFC\\\\u200C\\\\u200D\\\\u203F\\\\u2040\\\\u2054\\\\u2071\\\\u207F\\\\u2090-\\\\u209C\\\\u20D0-\\\\u20DC\\\\u20E1\\\\u20E5-\\\\u20F0\\\\u2102\\\\u2107\\\\u210A-\\\\u2113\\\\u2115\\\\u2119-\\\\u211D\\\\u2124\\\\u2126\\\\u2128\\\\u212A-\\\\u212D\\\\u212F-\\\\u2139\\\\u213C-\\\\u213F\\\\u2145-\\\\u2149\\\\u214E\\\\u2160-\\\\u2188\\\\u2C00-\\\\u2C2E\\\\u2C30-\\\\u2C5E\\\\u2C60-\\\\u2CE4\\\\u2CEB-\\\\u2CF3\\\\u2D00-\\\\u2D25\\\\u2D27\\\\u2D2D\\\\u2D30-\\\\u2D67\\\\u2D6F\\\\u2D7F-\\\\u2D96\\\\u2DA0-\\\\u2DA6\\\\u2DA8-\\\\u2DAE\\\\u2DB0-\\\\u2DB6\\\\u2DB8-\\\\u2DBE\\\\u2DC0-\\\\u2DC6\\\\u2DC8-\\\\u2DCE\\\\u2DD0-\\\\u2DD6\\\\u2DD8-\\\\u2DDE\\\\u2DE0-\\\\u2DFF\\\\u2E2F\\\\u3005-\\\\u3007\\\\u3021-\\\\u302F\\\\u3031-\\\\u3035\\\\u3038-\\\\u303C\\\\u3041-\\\\u3096\\\\u3099\\\\u309A\\\\u309D-\\\\u309F\\\\u30A1-\\\\u30FA\\\\u30FC-\\\\u30FF\\\\u3105-\\\\u312D\\\\u3131-\\\\u318E\\\\u31A0-\\\\u31BA\\\\u31F0-\\\\u31FF\\\\u3400-\\\\u4DB5\\\\u4E00-\\\\u9FCC\\\\uA000-\\\\uA48C\\\\uA4D0-\\\\uA4FD\\\\uA500-\\\\uA60C\\\\uA610-\\\\uA62B\\\\uA640-\\\\uA66F\\\\uA674-\\\\uA67D\\\\uA67F-\\\\uA69D\\\\uA69F-\\\\uA6F1\\\\uA717-\\\\uA71F\\\\uA722-\\\\uA788\\\\uA78B-\\\\uA78E\\\\uA790-\\\\uA7AD\\\\uA7B0\\\\uA7B1\\\\uA7F7-\\\\uA827\\\\uA840-\\\\uA873\\\\uA880-\\\\uA8C4\\\\uA8D0-\\\\uA8D9\\\\uA8E0-\\\\uA8F7\\\\uA8FB\\\\uA900-\\\\uA92D\\\\uA930-\\\\uA953\\\\uA960-\\\\uA97C\\\\uA980-\\\\uA9C0\\\\uA9CF-\\\\uA9D9\\\\uA9E0-\\\\uA9FE\\\\uAA00-\\\\uAA36\\\\uAA40-\\\\uAA4D\\\\uAA50-\\\\uAA59\\\\uAA60-\\\\uAA76\\\\uAA7A-\\\\uAAC2\\\\uAADB-\\\\uAADD\\\\uAAE0-\\\\uAAEF\\\\uAAF2-\\\\uAAF6\\\\uAB01-\\\\uAB06\\\\uAB09-\\\\uAB0E\\\\uAB11-\\\\uAB16\\\\uAB20-\\\\uAB26\\\\uAB28-\\\\uAB2E\\\\uAB30-\\\\uAB5A\\\\uAB5C-\\\\uAB5F\\\\uAB64\\\\uAB65\\\\uABC0-\\\\uABEA\\\\uABEC\\\\uABED\\\\uABF0-\\\\uABF9\\\\uAC00-\\\\uD7A3\\\\uD7B0-\\\\uD7C6\\\\uD7CB-\\\\uD7FB\\\\uF900-\\\\uFA6D\\\\uFA70-\\\\uFAD9\\\\uFB00-\\\\uFB06\\\\uFB13-\\\\uFB17\\\\uFB1D-\\\\uFB28\\\\uFB2A-\\\\uFB36\\\\uFB38-\\\\uFB3C\\\\uFB3E\\\\uFB40\\\\uFB41\\\\uFB43\\\\uFB44\\\\uFB46-\\\\uFBB1\\\\uFBD3-\\\\uFD3D\\\\uFD50-\\\\uFD8F\\\\uFD92-\\\\uFDC7\\\\uFDF0-\\\\uFDFB\\\\uFE00-\\\\uFE0F\\\\uFE20-\\\\uFE2D\\\\uFE33\\\\uFE34\\\\uFE4D-\\\\uFE4F\\\\uFE70-\\\\uFE74\\\\uFE76-\\\\uFEFC\\\\uFF10-\\\\uFF19\\\\uFF21-\\\\uFF3A\\\\uFF3F\\\\uFF41-\\\\uFF5A\\\\uFF66-\\\\uFFBE\\\\uFFC2-\\\\uFFC7\\\\uFFCA-\\\\uFFCF\\\\uFFD2-\\\\uFFD7\\\\uFFDA-\\\\uFFDC]\");\n\n// Ensure the condition is true, otherwise throw an error.\n// This is only to have a better contract semantic, i.e. another safety net\n// to catch a logic error. The condition shall be fulfilled in normal case.\n// Do NOT use this to enforce a certain condition on any user input.\n\nfunction assert(condition, message) {\n /* istanbul ignore next */\n if (!condition) {\n throw new Error('ASSERT: ' + message);\n }\n}\n\nfunction isDecimalDigit(ch) {\n return (ch >= 0x30 && ch <= 0x39); // 0..9\n}\n\nfunction isHexDigit(ch) {\n return '0123456789abcdefABCDEF'.indexOf(ch) >= 0;\n}\n\nfunction isOctalDigit(ch) {\n return '01234567'.indexOf(ch) >= 0;\n}\n\n// 7.2 White Space\n\nfunction isWhiteSpace(ch) {\n return (ch === 0x20) || (ch === 0x09) || (ch === 0x0B) || (ch === 0x0C) || (ch === 0xA0) ||\n (ch >= 0x1680 && [0x1680, 0x180E, 0x2000, 0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007, 0x2008, 0x2009, 0x200A, 0x202F, 0x205F, 0x3000, 0xFEFF].indexOf(ch) >= 0);\n}\n\n// 7.3 Line Terminators\n\nfunction isLineTerminator(ch) {\n return (ch === 0x0A) || (ch === 0x0D) || (ch === 0x2028) || (ch === 0x2029);\n}\n\n// 7.6 Identifier Names and Identifiers\n\nfunction isIdentifierStart(ch) {\n return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore)\n (ch >= 0x41 && ch <= 0x5A) || // A..Z\n (ch >= 0x61 && ch <= 0x7A) || // a..z\n (ch === 0x5C) || // \\ (backslash)\n ((ch >= 0x80) && RegexNonAsciiIdentifierStart.test(String.fromCharCode(ch)));\n}\n\nfunction isIdentifierPart(ch) {\n return (ch === 0x24) || (ch === 0x5F) || // $ (dollar) and _ (underscore)\n (ch >= 0x41 && ch <= 0x5A) || // A..Z\n (ch >= 0x61 && ch <= 0x7A) || // a..z\n (ch >= 0x30 && ch <= 0x39) || // 0..9\n (ch === 0x5C) || // \\ (backslash)\n ((ch >= 0x80) && RegexNonAsciiIdentifierPart.test(String.fromCharCode(ch)));\n}\n\n// 7.6.1.1 Keywords\n\nvar keywords = {\n 'if':1, 'in':1, 'do':1,\n 'var':1, 'for':1, 'new':1, 'try':1, 'let':1,\n 'this':1, 'else':1, 'case':1, 'void':1, 'with':1, 'enum':1,\n 'while':1, 'break':1, 'catch':1, 'throw':1, 'const':1, 'yield':1, 'class':1, 'super':1,\n 'return':1, 'typeof':1, 'delete':1, 'switch':1, 'export':1, 'import':1, 'public':1, 'static':1,\n 'default':1, 'finally':1, 'extends':1, 'package':1, 'private':1,\n 'function':1, 'continue':1, 'debugger':1,\n 'interface':1, 'protected':1,\n 'instanceof':1, 'implements':1\n};\n\nfunction skipComment() {\n var ch;\n\n while (index < length) {\n ch = source.charCodeAt(index);\n\n if (isWhiteSpace(ch) || isLineTerminator(ch)) {\n ++index;\n } else {\n break;\n }\n }\n}\n\nfunction scanHexEscape(prefix) {\n var i, len, ch, code = 0;\n\n len = (prefix === 'u') ? 4 : 2;\n for (i = 0; i < len; ++i) {\n if (index < length && isHexDigit(source[index])) {\n ch = source[index++];\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n return String.fromCharCode(code);\n}\n\nfunction scanUnicodeCodePointEscape() {\n var ch, code, cu1, cu2;\n\n ch = source[index];\n code = 0;\n\n // At least, one hex digit is required.\n if (ch === '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n while (index < length) {\n ch = source[index++];\n if (!isHexDigit(ch)) {\n break;\n }\n code = code * 16 + '0123456789abcdef'.indexOf(ch.toLowerCase());\n }\n\n if (code > 0x10FFFF || ch !== '}') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n // UTF-16 Encoding\n if (code <= 0xFFFF) {\n return String.fromCharCode(code);\n }\n cu1 = ((code - 0x10000) >> 10) + 0xD800;\n cu2 = ((code - 0x10000) & 1023) + 0xDC00;\n return String.fromCharCode(cu1, cu2);\n}\n\nfunction getEscapedIdentifier() {\n var ch, id;\n\n ch = source.charCodeAt(index++);\n id = String.fromCharCode(ch);\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (ch === 0x5C) {\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n ++index;\n ch = scanHexEscape('u');\n if (!ch || ch === '\\\\' || !isIdentifierStart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n id = ch;\n }\n\n while (index < length) {\n ch = source.charCodeAt(index);\n if (!isIdentifierPart(ch)) {\n break;\n }\n ++index;\n id += String.fromCharCode(ch);\n\n // '\\u' (U+005C, U+0075) denotes an escaped character.\n if (ch === 0x5C) {\n id = id.substr(0, id.length - 1);\n if (source.charCodeAt(index) !== 0x75) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n ++index;\n ch = scanHexEscape('u');\n if (!ch || ch === '\\\\' || !isIdentifierPart(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n id += ch;\n }\n }\n\n return id;\n}\n\nfunction getIdentifier() {\n var start, ch;\n\n start = index++;\n while (index < length) {\n ch = source.charCodeAt(index);\n if (ch === 0x5C) {\n // Blackslash (U+005C) marks Unicode escape sequence.\n index = start;\n return getEscapedIdentifier();\n }\n if (isIdentifierPart(ch)) {\n ++index;\n } else {\n break;\n }\n }\n\n return source.slice(start, index);\n}\n\nfunction scanIdentifier() {\n var start, id, type;\n\n start = index;\n\n // Backslash (U+005C) starts an escaped character.\n id = (source.charCodeAt(index) === 0x5C) ? getEscapedIdentifier() : getIdentifier();\n\n // There is no keyword or literal with only one character.\n // Thus, it must be an identifier.\n if (id.length === 1) {\n type = TokenIdentifier;\n } else if (keywords.hasOwnProperty(id)) {\n type = TokenKeyword;\n } else if (id === 'null') {\n type = TokenNullLiteral;\n } else if (id === 'true' || id === 'false') {\n type = TokenBooleanLiteral;\n } else {\n type = TokenIdentifier;\n }\n\n return {\n type: type,\n value: id,\n start: start,\n end: index\n };\n}\n\n// 7.7 Punctuators\n\nfunction scanPunctuator() {\n var start = index,\n code = source.charCodeAt(index),\n code2,\n ch1 = source[index],\n ch2,\n ch3,\n ch4;\n\n switch (code) {\n\n // Check for most common single-character punctuators.\n case 0x2E: // . dot\n case 0x28: // ( open bracket\n case 0x29: // ) close bracket\n case 0x3B: // ; semicolon\n case 0x2C: // , comma\n case 0x7B: // { open curly brace\n case 0x7D: // } close curly brace\n case 0x5B: // [\n case 0x5D: // ]\n case 0x3A: // :\n case 0x3F: // ?\n case 0x7E: // ~\n ++index;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code),\n start: start,\n end: index\n };\n\n default:\n code2 = source.charCodeAt(index + 1);\n\n // '=' (U+003D) marks an assignment or comparison operator.\n if (code2 === 0x3D) {\n switch (code) {\n case 0x2B: // +\n case 0x2D: // -\n case 0x2F: // /\n case 0x3C: // <\n case 0x3E: // >\n case 0x5E: // ^\n case 0x7C: // |\n case 0x25: // %\n case 0x26: // &\n case 0x2A: // *\n index += 2;\n return {\n type: TokenPunctuator,\n value: String.fromCharCode(code) + String.fromCharCode(code2),\n start: start,\n end: index\n };\n\n case 0x21: // !\n case 0x3D: // =\n index += 2;\n\n // !== and ===\n if (source.charCodeAt(index) === 0x3D) {\n ++index;\n }\n return {\n type: TokenPunctuator,\n value: source.slice(start, index),\n start: start,\n end: index\n };\n }\n }\n }\n\n // 4-character punctuator: >>>=\n\n ch4 = source.substr(index, 4);\n\n if (ch4 === '>>>=') {\n index += 4;\n return {\n type: TokenPunctuator,\n value: ch4,\n start: start,\n end: index\n };\n }\n\n // 3-character punctuators: === !== >>> <<= >>=\n\n ch3 = ch4.substr(0, 3);\n\n if (ch3 === '>>>' || ch3 === '<<=' || ch3 === '>>=') {\n index += 3;\n return {\n type: TokenPunctuator,\n value: ch3,\n start: start,\n end: index\n };\n }\n\n // Other 2-character punctuators: ++ -- << >> && ||\n ch2 = ch3.substr(0, 2);\n\n if ((ch1 === ch2[1] && ('+-<>&|'.indexOf(ch1) >= 0)) || ch2 === '=>') {\n index += 2;\n return {\n type: TokenPunctuator,\n value: ch2,\n start: start,\n end: index\n };\n }\n\n // 1-character punctuators: < > = ! + - * % & | ^ /\n\n if ('<>=!+-*%&|^/'.indexOf(ch1) >= 0) {\n ++index;\n return {\n type: TokenPunctuator,\n value: ch1,\n start: start,\n end: index\n };\n }\n\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n}\n\n// 7.8.3 Numeric Literals\n\nfunction scanHexLiteral(start) {\n var number = '';\n\n while (index < length) {\n if (!isHexDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n\n if (number.length === 0) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseInt('0x' + number, 16),\n start: start,\n end: index\n };\n}\n\nfunction scanOctalLiteral(start) {\n var number = '0' + source[index++];\n while (index < length) {\n if (!isOctalDigit(source[index])) {\n break;\n }\n number += source[index++];\n }\n\n if (isIdentifierStart(source.charCodeAt(index)) || isDecimalDigit(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseInt(number, 8),\n octal: true,\n start: start,\n end: index\n };\n}\n\nfunction scanNumericLiteral() {\n var number, start, ch;\n\n ch = source[index];\n assert(isDecimalDigit(ch.charCodeAt(0)) || (ch === '.'),\n 'Numeric literal must start with a decimal digit or a decimal point');\n\n start = index;\n number = '';\n if (ch !== '.') {\n number = source[index++];\n ch = source[index];\n\n // Hex number starts with '0x'.\n // Octal number starts with '0'.\n if (number === '0') {\n if (ch === 'x' || ch === 'X') {\n ++index;\n return scanHexLiteral(start);\n }\n if (isOctalDigit(ch)) {\n return scanOctalLiteral(start);\n }\n\n // decimal number starts with '0' such as '09' is illegal.\n if (ch && isDecimalDigit(ch.charCodeAt(0))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === '.') {\n number += source[index++];\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n ch = source[index];\n }\n\n if (ch === 'e' || ch === 'E') {\n number += source[index++];\n\n ch = source[index];\n if (ch === '+' || ch === '-') {\n number += source[index++];\n }\n if (isDecimalDigit(source.charCodeAt(index))) {\n while (isDecimalDigit(source.charCodeAt(index))) {\n number += source[index++];\n }\n } else {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n }\n\n if (isIdentifierStart(source.charCodeAt(index))) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenNumericLiteral,\n value: parseFloat(number),\n start: start,\n end: index\n };\n}\n\n// 7.8.4 String Literals\n\nfunction scanStringLiteral() {\n var str = '',\n quote, start, ch, code, octal = false;\n\n quote = source[index];\n assert((quote === '\\'' || quote === '\"'),\n 'String literal must starts with a quote');\n\n start = index;\n ++index;\n\n while (index < length) {\n ch = source[index++];\n\n if (ch === quote) {\n quote = '';\n break;\n } else if (ch === '\\\\') {\n ch = source[index++];\n if (!ch || !isLineTerminator(ch.charCodeAt(0))) {\n switch (ch) {\n case 'u':\n case 'x':\n if (source[index] === '{') {\n ++index;\n str += scanUnicodeCodePointEscape();\n } else {\n str += scanHexEscape(ch);\n }\n break;\n case 'n':\n str += '\\n';\n break;\n case 'r':\n str += '\\r';\n break;\n case 't':\n str += '\\t';\n break;\n case 'b':\n str += '\\b';\n break;\n case 'f':\n str += '\\f';\n break;\n case 'v':\n str += '\\x0B';\n break;\n\n default:\n if (isOctalDigit(ch)) {\n code = '01234567'.indexOf(ch);\n\n // \\0 is not octal escape sequence\n if (code !== 0) {\n octal = true;\n }\n\n if (index < length && isOctalDigit(source[index])) {\n octal = true;\n code = code * 8 + '01234567'.indexOf(source[index++]);\n\n // 3 digits are only allowed when string starts\n // with 0, 1, 2, 3\n if ('0123'.indexOf(ch) >= 0 &&\n index < length &&\n isOctalDigit(source[index])) {\n code = code * 8 + '01234567'.indexOf(source[index++]);\n }\n }\n str += String.fromCharCode(code);\n } else {\n str += ch;\n }\n break;\n }\n } else {\n if (ch === '\\r' && source[index] === '\\n') {\n ++index;\n }\n }\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n break;\n } else {\n str += ch;\n }\n }\n\n if (quote !== '') {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n }\n\n return {\n type: TokenStringLiteral,\n value: str,\n octal: octal,\n start: start,\n end: index\n };\n}\n\nfunction testRegExp(pattern, flags) {\n var tmp = pattern;\n\n if (flags.indexOf('u') >= 0) {\n // Replace each astral symbol and every Unicode code point\n // escape sequence with a single ASCII symbol to avoid throwing on\n // regular expressions that are only valid in combination with the\n // `/u` flag.\n // Note: replacing with the ASCII symbol `x` might cause false\n // negatives in unlikely scenarios. For example, `[\\u{61}-b]` is a\n // perfectly valid pattern that is equivalent to `[a-b]`, but it\n // would be replaced by `[x-b]` which throws an error.\n tmp = tmp\n .replace(/\\\\u\\{([0-9a-fA-F]+)\\}/g, function($0, $1) {\n if (parseInt($1, 16) <= 0x10FFFF) {\n return 'x';\n }\n throwError({}, MessageInvalidRegExp);\n })\n .replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, 'x');\n }\n\n // First, detect invalid regular expressions.\n try {\n new RegExp(tmp);\n } catch (e) {\n throwError({}, MessageInvalidRegExp);\n }\n\n // Return a regular expression object for this pattern-flag pair, or\n // `null` in case the current environment doesn't support the flags it\n // uses.\n try {\n return new RegExp(pattern, flags);\n } catch (exception) {\n return null;\n }\n}\n\nfunction scanRegExpBody() {\n var ch, str, classMarker, terminated, body;\n\n ch = source[index];\n assert(ch === '/', 'Regular expression literal must start with a slash');\n str = source[index++];\n\n classMarker = false;\n terminated = false;\n while (index < length) {\n ch = source[index++];\n str += ch;\n if (ch === '\\\\') {\n ch = source[index++];\n // ECMA-262 7.8.5\n if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n }\n str += ch;\n } else if (isLineTerminator(ch.charCodeAt(0))) {\n throwError({}, MessageUnterminatedRegExp);\n } else if (classMarker) {\n if (ch === ']') {\n classMarker = false;\n }\n } else {\n if (ch === '/') {\n terminated = true;\n break;\n } else if (ch === '[') {\n classMarker = true;\n }\n }\n }\n\n if (!terminated) {\n throwError({}, MessageUnterminatedRegExp);\n }\n\n // Exclude leading and trailing slash.\n body = str.substr(1, str.length - 2);\n return {\n value: body,\n literal: str\n };\n}\n\nfunction scanRegExpFlags() {\n var ch, str, flags;\n\n str = '';\n flags = '';\n while (index < length) {\n ch = source[index];\n if (!isIdentifierPart(ch.charCodeAt(0))) {\n break;\n }\n\n ++index;\n if (ch === '\\\\' && index < length) {\n throwError({}, MessageUnexpectedToken, ILLEGAL);\n } else {\n flags += ch;\n str += ch;\n }\n }\n\n if (flags.search(/[^gimuy]/g) >= 0) {\n throwError({}, MessageInvalidRegExp, flags);\n }\n\n return {\n value: flags,\n literal: str\n };\n}\n\nfunction scanRegExp() {\n var start, body, flags, value;\n\n lookahead = null;\n skipComment();\n start = index;\n\n body = scanRegExpBody();\n flags = scanRegExpFlags();\n value = testRegExp(body.value, flags.value);\n\n return {\n literal: body.literal + flags.literal,\n value: value,\n regex: {\n pattern: body.value,\n flags: flags.value\n },\n start: start,\n end: index\n };\n}\n\nfunction isIdentifierName(token) {\n return token.type === TokenIdentifier ||\n token.type === TokenKeyword ||\n token.type === TokenBooleanLiteral ||\n token.type === TokenNullLiteral;\n}\n\nfunction advance() {\n var ch;\n\n skipComment();\n\n if (index >= length) {\n return {\n type: TokenEOF,\n start: index,\n end: index\n };\n }\n\n ch = source.charCodeAt(index);\n\n if (isIdentifierStart(ch)) {\n return scanIdentifier();\n }\n\n // Very common: ( and ) and ;\n if (ch === 0x28 || ch === 0x29 || ch === 0x3B) {\n return scanPunctuator();\n }\n\n // String literal starts with single quote (U+0027) or double quote (U+0022).\n if (ch === 0x27 || ch === 0x22) {\n return scanStringLiteral();\n }\n\n\n // Dot (.) U+002E can also start a floating-point number, hence the need\n // to check the next character.\n if (ch === 0x2E) {\n if (isDecimalDigit(source.charCodeAt(index + 1))) {\n return scanNumericLiteral();\n }\n return scanPunctuator();\n }\n\n if (isDecimalDigit(ch)) {\n return scanNumericLiteral();\n }\n\n return scanPunctuator();\n}\n\nfunction lex() {\n var token;\n\n token = lookahead;\n index = token.end;\n\n lookahead = advance();\n\n index = token.end;\n\n return token;\n}\n\nfunction peek() {\n var pos;\n\n pos = index;\n\n lookahead = advance();\n index = pos;\n}\n\nfunction finishArrayExpression(elements) {\n var node = new ASTNode(SyntaxArrayExpression);\n node.elements = elements;\n return node;\n}\n\nfunction finishBinaryExpression(operator, left, right) {\n var node = new ASTNode((operator === '||' || operator === '&&') ? SyntaxLogicalExpression : SyntaxBinaryExpression);\n node.operator = operator;\n node.left = left;\n node.right = right;\n return node;\n}\n\nfunction finishCallExpression(callee, args) {\n var node = new ASTNode(SyntaxCallExpression);\n node.callee = callee;\n node.arguments = args;\n return node;\n}\n\nfunction finishConditionalExpression(test, consequent, alternate) {\n var node = new ASTNode(SyntaxConditionalExpression);\n node.test = test;\n node.consequent = consequent;\n node.alternate = alternate;\n return node;\n}\n\nfunction finishIdentifier(name) {\n var node = new ASTNode(SyntaxIdentifier);\n node.name = name;\n return node;\n}\n\nfunction finishLiteral(token) {\n var node = new ASTNode(SyntaxLiteral);\n node.value = token.value;\n node.raw = source.slice(token.start, token.end);\n if (token.regex) {\n if (node.raw === '//') {\n node.raw = '/(?:)/';\n }\n node.regex = token.regex;\n }\n return node;\n}\n\nfunction finishMemberExpression(accessor, object, property) {\n var node = new ASTNode(SyntaxMemberExpression);\n node.computed = accessor === '[';\n node.object = object;\n node.property = property;\n if (!node.computed) property.member = true;\n return node;\n}\n\nfunction finishObjectExpression(properties) {\n var node = new ASTNode(SyntaxObjectExpression);\n node.properties = properties;\n return node;\n}\n\nfunction finishProperty(kind, key, value) {\n var node = new ASTNode(SyntaxProperty);\n node.key = key;\n node.value = value;\n node.kind = kind;\n return node;\n}\n\nfunction finishUnaryExpression(operator, argument) {\n var node = new ASTNode(SyntaxUnaryExpression);\n node.operator = operator;\n node.argument = argument;\n node.prefix = true;\n return node;\n}\n\n// Throw an exception\n\nfunction throwError(token, messageFormat) {\n var error,\n args = Array.prototype.slice.call(arguments, 2),\n msg = messageFormat.replace(\n /%(\\d)/g,\n function(whole, index) {\n assert(index < args.length, 'Message reference must be in range');\n return args[index];\n }\n );\n\n\n error = new Error(msg);\n error.index = index;\n error.description = msg;\n throw error;\n}\n\n// Throw an exception because of the token.\n\nfunction throwUnexpected(token) {\n if (token.type === TokenEOF) {\n throwError(token, MessageUnexpectedEOS);\n }\n\n if (token.type === TokenNumericLiteral) {\n throwError(token, MessageUnexpectedNumber);\n }\n\n if (token.type === TokenStringLiteral) {\n throwError(token, MessageUnexpectedString);\n }\n\n if (token.type === TokenIdentifier) {\n throwError(token, MessageUnexpectedIdentifier);\n }\n\n if (token.type === TokenKeyword) {\n throwError(token, MessageUnexpectedReserved);\n }\n\n // BooleanLiteral, NullLiteral, or Punctuator.\n throwError(token, MessageUnexpectedToken, token.value);\n}\n\n// Expect the next token to match the specified punctuator.\n// If not, an exception will be thrown.\n\nfunction expect(value) {\n var token = lex();\n if (token.type !== TokenPunctuator || token.value !== value) {\n throwUnexpected(token);\n }\n}\n\n// Return true if the next token matches the specified punctuator.\n\nfunction match(value) {\n return lookahead.type === TokenPunctuator && lookahead.value === value;\n}\n\n// Return true if the next token matches the specified keyword\n\nfunction matchKeyword(keyword) {\n return lookahead.type === TokenKeyword && lookahead.value === keyword;\n}\n\n// 11.1.4 Array Initialiser\n\nfunction parseArrayInitialiser() {\n var elements = [];\n\n index = lookahead.start;\n expect('[');\n\n while (!match(']')) {\n if (match(',')) {\n lex();\n elements.push(null);\n } else {\n elements.push(parseConditionalExpression());\n\n if (!match(']')) {\n expect(',');\n }\n }\n }\n\n lex();\n\n return finishArrayExpression(elements);\n}\n\n// 11.1.5 Object Initialiser\n\nfunction parseObjectPropertyKey() {\n var token;\n\n index = lookahead.start;\n token = lex();\n\n // Note: This function is called only from parseObjectProperty(), where\n // EOF and Punctuator tokens are already filtered out.\n\n if (token.type === TokenStringLiteral || token.type === TokenNumericLiteral) {\n if (token.octal) {\n throwError(token, MessageStrictOctalLiteral);\n }\n return finishLiteral(token);\n }\n\n return finishIdentifier(token.value);\n}\n\nfunction parseObjectProperty() {\n var token, key, id, value;\n\n index = lookahead.start;\n token = lookahead;\n\n if (token.type === TokenIdentifier) {\n id = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', id, value);\n }\n if (token.type === TokenEOF || token.type === TokenPunctuator) {\n throwUnexpected(token);\n } else {\n key = parseObjectPropertyKey();\n expect(':');\n value = parseConditionalExpression();\n return finishProperty('init', key, value);\n }\n}\n\nfunction parseObjectInitialiser() {\n var properties = [],\n property, name, key, map = {},\n toString = String;\n\n index = lookahead.start;\n expect('{');\n\n while (!match('}')) {\n property = parseObjectProperty();\n\n if (property.key.type === SyntaxIdentifier) {\n name = property.key.name;\n } else {\n name = toString(property.key.value);\n }\n\n key = '$' + name;\n if (Object.prototype.hasOwnProperty.call(map, key)) {\n throwError({}, MessageStrictDuplicateProperty);\n } else {\n map[key] = true;\n }\n\n properties.push(property);\n\n if (!match('}')) {\n expect(',');\n }\n }\n\n expect('}');\n\n return finishObjectExpression(properties);\n}\n\n// 11.1.6 The Grouping Operator\n\nfunction parseGroupExpression() {\n var expr;\n\n expect('(');\n\n expr = parseExpression();\n\n expect(')');\n\n return expr;\n}\n\n\n// 11.1 Primary Expressions\n\nvar legalKeywords = {\n \"if\": 1,\n \"this\": 1\n};\n\nfunction parsePrimaryExpression() {\n var type, token, expr;\n\n if (match('(')) {\n return parseGroupExpression();\n }\n\n if (match('[')) {\n return parseArrayInitialiser();\n }\n\n if (match('{')) {\n return parseObjectInitialiser();\n }\n\n type = lookahead.type;\n index = lookahead.start;\n\n\n if (type === TokenIdentifier || legalKeywords[lookahead.value]) {\n expr = finishIdentifier(lex().value);\n } else if (type === TokenStringLiteral || type === TokenNumericLiteral) {\n if (lookahead.octal) {\n throwError(lookahead, MessageStrictOctalLiteral);\n }\n expr = finishLiteral(lex());\n } else if (type === TokenKeyword) {\n throw new Error(DISABLED);\n } else if (type === TokenBooleanLiteral) {\n token = lex();\n token.value = (token.value === 'true');\n expr = finishLiteral(token);\n } else if (type === TokenNullLiteral) {\n token = lex();\n token.value = null;\n expr = finishLiteral(token);\n } else if (match('/') || match('/=')) {\n expr = finishLiteral(scanRegExp());\n peek();\n } else {\n throwUnexpected(lex());\n }\n\n return expr;\n}\n\n// 11.2 Left-Hand-Side Expressions\n\nfunction parseArguments() {\n var args = [];\n\n expect('(');\n\n if (!match(')')) {\n while (index < length) {\n args.push(parseConditionalExpression());\n if (match(')')) {\n break;\n }\n expect(',');\n }\n }\n\n expect(')');\n\n return args;\n}\n\nfunction parseNonComputedProperty() {\n var token;\n index = lookahead.start;\n token = lex();\n\n if (!isIdentifierName(token)) {\n throwUnexpected(token);\n }\n\n return finishIdentifier(token.value);\n}\n\nfunction parseNonComputedMember() {\n expect('.');\n\n return parseNonComputedProperty();\n}\n\nfunction parseComputedMember() {\n var expr;\n\n expect('[');\n\n expr = parseExpression();\n\n expect(']');\n\n return expr;\n}\n\nfunction parseLeftHandSideExpressionAllowCall() {\n var expr, args, property;\n\n expr = parsePrimaryExpression();\n\n for (;;) {\n if (match('.')) {\n property = parseNonComputedMember();\n expr = finishMemberExpression('.', expr, property);\n } else if (match('(')) {\n args = parseArguments();\n expr = finishCallExpression(expr, args);\n } else if (match('[')) {\n property = parseComputedMember();\n expr = finishMemberExpression('[', expr, property);\n } else {\n break;\n }\n }\n\n return expr;\n}\n\n// 11.3 Postfix Expressions\n\nfunction parsePostfixExpression() {\n var expr = parseLeftHandSideExpressionAllowCall();\n\n if (lookahead.type === TokenPunctuator) {\n if ((match('++') || match('--'))) {\n throw new Error(DISABLED);\n }\n }\n\n return expr;\n}\n\n// 11.4 Unary Operators\n\nfunction parseUnaryExpression() {\n var token, expr;\n\n if (lookahead.type !== TokenPunctuator && lookahead.type !== TokenKeyword) {\n expr = parsePostfixExpression();\n } else if (match('++') || match('--')) {\n throw new Error(DISABLED);\n } else if (match('+') || match('-') || match('~') || match('!')) {\n token = lex();\n expr = parseUnaryExpression();\n expr = finishUnaryExpression(token.value, expr);\n } else if (matchKeyword('delete') || matchKeyword('void') || matchKeyword('typeof')) {\n throw new Error(DISABLED);\n } else {\n expr = parsePostfixExpression();\n }\n\n return expr;\n}\n\nfunction binaryPrecedence(token) {\n var prec = 0;\n\n if (token.type !== TokenPunctuator && token.type !== TokenKeyword) {\n return 0;\n }\n\n switch (token.value) {\n case '||':\n prec = 1;\n break;\n\n case '&&':\n prec = 2;\n break;\n\n case '|':\n prec = 3;\n break;\n\n case '^':\n prec = 4;\n break;\n\n case '&':\n prec = 5;\n break;\n\n case '==':\n case '!=':\n case '===':\n case '!==':\n prec = 6;\n break;\n\n case '<':\n case '>':\n case '<=':\n case '>=':\n case 'instanceof':\n case 'in':\n prec = 7;\n break;\n\n case '<<':\n case '>>':\n case '>>>':\n prec = 8;\n break;\n\n case '+':\n case '-':\n prec = 9;\n break;\n\n case '*':\n case '/':\n case '%':\n prec = 11;\n break;\n\n default:\n break;\n }\n\n return prec;\n}\n\n// 11.5 Multiplicative Operators\n// 11.6 Additive Operators\n// 11.7 Bitwise Shift Operators\n// 11.8 Relational Operators\n// 11.9 Equality Operators\n// 11.10 Binary Bitwise Operators\n// 11.11 Binary Logical Operators\n\nfunction parseBinaryExpression() {\n var marker, markers, expr, token, prec, stack, right, operator, left, i;\n\n marker = lookahead;\n left = parseUnaryExpression();\n\n token = lookahead;\n prec = binaryPrecedence(token);\n if (prec === 0) {\n return left;\n }\n token.prec = prec;\n lex();\n\n markers = [marker, lookahead];\n right = parseUnaryExpression();\n\n stack = [left, token, right];\n\n while ((prec = binaryPrecedence(lookahead)) > 0) {\n\n // Reduce: make a binary expression from the three topmost entries.\n while ((stack.length > 2) && (prec <= stack[stack.length - 2].prec)) {\n right = stack.pop();\n operator = stack.pop().value;\n left = stack.pop();\n markers.pop();\n expr = finishBinaryExpression(operator, left, right);\n stack.push(expr);\n }\n\n // Shift.\n token = lex();\n token.prec = prec;\n stack.push(token);\n markers.push(lookahead);\n expr = parseUnaryExpression();\n stack.push(expr);\n }\n\n // Final reduce to clean-up the stack.\n i = stack.length - 1;\n expr = stack[i];\n markers.pop();\n while (i > 1) {\n markers.pop()\n expr = finishBinaryExpression(stack[i - 1].value, stack[i - 2], expr);\n i -= 2;\n }\n\n return expr;\n}\n\n// 11.12 Conditional Operator\n\nfunction parseConditionalExpression() {\n var expr, consequent, alternate;\n\n expr = parseBinaryExpression();\n\n if (match('?')) {\n lex();\n consequent = parseConditionalExpression();\n expect(':');\n alternate = parseConditionalExpression();\n\n expr = finishConditionalExpression(expr, consequent, alternate);\n }\n\n return expr;\n}\n\n// 11.14 Comma Operator\n\nfunction parseExpression() {\n var expr = parseConditionalExpression();\n\n if (match(',')) {\n throw new Error(DISABLED); // no sequence expressions\n }\n\n return expr;\n}\n\nexport default function(code) {\n source = code;\n index = 0;\n length = source.length;\n lookahead = null;\n\n peek();\n\n var expr = parseExpression();\n\n if (lookahead.type !== TokenEOF) {\n throw new Error(\"Unexpect token after expression.\");\n }\n return expr;\n}\n","export default {\n NaN: 'NaN',\n E: 'Math.E',\n LN2: 'Math.LN2',\n LN10: 'Math.LN10',\n LOG2E: 'Math.LOG2E',\n LOG10E: 'Math.LOG10E',\n PI: 'Math.PI',\n SQRT1_2: 'Math.SQRT1_2',\n SQRT2: 'Math.SQRT2',\n MIN_VALUE: 'Number.MIN_VALUE',\n MAX_VALUE: 'Number.MAX_VALUE'\n};\n","import {error} from 'vega-util';\n\nexport default function(codegen) {\n\n function fncall(name, args, cast, type) {\n var obj = codegen(args[0]);\n if (cast) {\n obj = cast + '(' + obj + ')';\n if (cast.lastIndexOf('new ', 0) === 0) obj = '(' + obj + ')';\n }\n return obj + '.' + name + (type < 0 ? '' : type === 0 ?\n '()' :\n '(' + args.slice(1).map(codegen).join(',') + ')');\n }\n\n function fn(name, cast, type) {\n return function(args) {\n return fncall(name, args, cast, type);\n };\n }\n\n var DATE = 'new Date',\n STRING = 'String',\n REGEXP = 'RegExp';\n\n return {\n // MATH functions\n isNaN: 'isNaN',\n isFinite: 'isFinite',\n abs: 'Math.abs',\n acos: 'Math.acos',\n asin: 'Math.asin',\n atan: 'Math.atan',\n atan2: 'Math.atan2',\n ceil: 'Math.ceil',\n cos: 'Math.cos',\n exp: 'Math.exp',\n floor: 'Math.floor',\n log: 'Math.log',\n max: 'Math.max',\n min: 'Math.min',\n pow: 'Math.pow',\n random: 'Math.random',\n round: 'Math.round',\n sin: 'Math.sin',\n sqrt: 'Math.sqrt',\n tan: 'Math.tan',\n\n clamp: function(args) {\n if (args.length < 3) error('Missing arguments to clamp function.');\n if (args.length > 3) error('Too many arguments to clamp function.');\n var a = args.map(codegen);\n return 'Math.max('+a[1]+', Math.min('+a[2]+','+a[0]+'))';\n },\n\n // DATE functions\n now: 'Date.now',\n utc: 'Date.UTC',\n datetime: DATE,\n date: fn('getDate', DATE, 0),\n day: fn('getDay', DATE, 0),\n year: fn('getFullYear', DATE, 0),\n month: fn('getMonth', DATE, 0),\n hours: fn('getHours', DATE, 0),\n minutes: fn('getMinutes', DATE, 0),\n seconds: fn('getSeconds', DATE, 0),\n milliseconds: fn('getMilliseconds', DATE, 0),\n time: fn('getTime', DATE, 0),\n timezoneoffset: fn('getTimezoneOffset', DATE, 0),\n utcdate: fn('getUTCDate', DATE, 0),\n utcday: fn('getUTCDay', DATE, 0),\n utcyear: fn('getUTCFullYear', DATE, 0),\n utcmonth: fn('getUTCMonth', DATE, 0),\n utchours: fn('getUTCHours', DATE, 0),\n utcminutes: fn('getUTCMinutes', DATE, 0),\n utcseconds: fn('getUTCSeconds', DATE, 0),\n utcmilliseconds: fn('getUTCMilliseconds', DATE, 0),\n\n // sequence functions\n length: fn('length', null, -1),\n join: fn('join', null),\n indexof: fn('indexOf', null),\n lastindexof: fn('lastIndexOf', null),\n slice: fn('slice', null),\n\n reverse: function(args) {\n return '('+codegen(args[0])+').slice().reverse()';\n },\n\n // STRING functions\n parseFloat: 'parseFloat',\n parseInt: 'parseInt',\n upper: fn('toUpperCase', STRING, 0),\n lower: fn('toLowerCase', STRING, 0),\n substring: fn('substring', STRING),\n split: fn('split', STRING),\n replace: fn('replace', STRING),\n trim: fn('trim', STRING, 0),\n\n // REGEXP functions\n regexp: REGEXP,\n test: fn('test', REGEXP),\n\n // Control Flow functions\n if: function(args) {\n if (args.length < 3) error('Missing arguments to if function.');\n if (args.length > 3) error('Too many arguments to if function.');\n var a = args.map(codegen);\n return '('+a[0]+'?'+a[1]+':'+a[2]+')';\n }\n };\n}\n","import Constants from './constants';\nimport Functions from './functions';\nimport {error, isFunction, isString, toSet} from 'vega-util';\n\nfunction stripQuotes(s) {\n var n = s && s.length - 1;\n return n && (\n (s[0]==='\"' && s[n]==='\"') ||\n (s[0]==='\\'' && s[n]==='\\'')\n ) ? s.slice(1, -1) : s;\n}\n\nexport default function(opt) {\n opt = opt || {};\n\n var whitelist = opt.whitelist ? toSet(opt.whitelist) : {},\n blacklist = opt.blacklist ? toSet(opt.blacklist) : {},\n constants = opt.constants || Constants,\n functions = (opt.functions || Functions)(visit),\n globalvar = opt.globalvar,\n fieldvar = opt.fieldvar,\n globals = {},\n fields = {},\n memberDepth = 0;\n\n var outputGlobal = isFunction(globalvar)\n ? globalvar\n : function (id) { return globalvar + '[\"' + id + '\"]'; };\n\n function visit(ast) {\n if (isString(ast)) return ast;\n var generator = Generators[ast.type];\n if (generator == null) error('Unsupported type: ' + ast.type);\n return generator(ast);\n }\n\n var Generators = {\n Literal: function(n) {\n return n.raw;\n },\n\n Identifier: function(n) {\n var id = n.name;\n if (memberDepth > 0) {\n return id;\n } else if (blacklist.hasOwnProperty(id)) {\n return error('Illegal identifier: ' + id);\n } else if (constants.hasOwnProperty(id)) {\n return constants[id];\n } else if (whitelist.hasOwnProperty(id)) {\n return id;\n } else {\n globals[id] = 1;\n return outputGlobal(id);\n }\n },\n\n MemberExpression: function(n) {\n var d = !n.computed;\n var o = visit(n.object);\n if (d) memberDepth += 1;\n var p = visit(n.property);\n if (o === fieldvar) {\n // strip quotes to sanitize field name (#1653)\n fields[stripQuotes(p)] = 1;\n }\n if (d) memberDepth -= 1;\n return o + (d ? '.'+p : '['+p+']');\n },\n\n CallExpression: function(n) {\n if (n.callee.type !== 'Identifier') {\n error('Illegal callee type: ' + n.callee.type);\n }\n var callee = n.callee.name;\n var args = n.arguments;\n var fn = functions.hasOwnProperty(callee) && functions[callee];\n if (!fn) error('Unrecognized function: ' + callee);\n return isFunction(fn)\n ? fn(args)\n : fn + '(' + args.map(visit).join(',') + ')';\n },\n\n ArrayExpression: function(n) {\n return '[' + n.elements.map(visit).join(',') + ']';\n },\n\n BinaryExpression: function(n) {\n return '(' + visit(n.left) + n.operator + visit(n.right) + ')';\n },\n\n UnaryExpression: function(n) {\n return '(' + n.operator + visit(n.argument) + ')';\n },\n\n ConditionalExpression: function(n) {\n return '(' + visit(n.test) +\n '?' + visit(n.consequent) +\n ':' + visit(n.alternate) +\n ')';\n },\n\n LogicalExpression: function(n) {\n return '(' + visit(n.left) + n.operator + visit(n.right) + ')';\n },\n\n ObjectExpression: function(n) {\n return '{' + n.properties.map(visit).join(',') + '}';\n },\n\n Property: function(n) {\n memberDepth += 1;\n var k = visit(n.key);\n memberDepth -= 1;\n return k + ':' + visit(n.value);\n }\n };\n\n function codegen(ast) {\n var result = {\n code: visit(ast),\n globals: Object.keys(globals),\n fields: Object.keys(fields)\n };\n globals = {};\n fields = {};\n return result;\n }\n\n codegen.functions = functions;\n codegen.constants = constants;\n\n return codegen;\n}\n","export const Intersect = 'intersect';\nexport const Union = 'union';\n","import {Intersect} from './constants';\nimport {field, inrange, isArray, isDate, toNumber} from 'vega-util';\n\nvar TYPE_ENUM = 'E',\n TYPE_RANGE_INC = 'R',\n TYPE_RANGE_EXC = 'R-E',\n TYPE_RANGE_LE = 'R-LE',\n TYPE_RANGE_RE = 'R-RE',\n UNIT_INDEX = 'index:unit';\n\n// TODO: revisit date coercion?\nfunction testPoint(datum, entry) {\n var fields = entry.fields,\n values = entry.values,\n n = fields.length,\n i = 0, dval, f;\n\n for (; i, values: array<*>}.\n * Fielddef is of the form\n * {field: string, channel: string, type: 'E' | 'R'} where\n * 'type' identifies whether tuples in the dataset enumerate\n * values for the field, or specify a continuous range.\n * @param {object} datum - The tuple to test for inclusion.\n * @param {string} op - The set operation for combining selections.\n * One of 'intersect' or 'union' (default).\n * @return {boolean} - True if the datum is in the selection, false otherwise.\n */\nexport function selectionTest(name, datum, op) {\n var data = this.context.data[name],\n entries = data ? data.values.value : [],\n unitIdx = data ? data[UNIT_INDEX] && data[UNIT_INDEX].value : undefined,\n intersect = op === Intersect,\n n = entries.length,\n i = 0,\n entry, miss, count, unit, b;\n\n for (; i= 0; });\n },\n\n R_union: function(base, value) {\n var lo = toNumber(value[0]), hi = toNumber(value[1]);\n if (lo > hi) {\n lo = value[1];\n hi = value[0];\n }\n\n if (!base.length) return [lo, hi];\n if (base[0] > lo) base[0] = lo;\n if (base[1] < hi) base[1] = hi;\n return base;\n },\n\n R_intersect: function(base, value) {\n var lo = toNumber(value[0]), hi = toNumber(value[1]);\n if (lo > hi) {\n lo = value[1];\n hi = value[0];\n }\n\n if (!base.length) return [lo, hi];\n if (hi < base[0] || base[1] < lo) {\n return [];\n } else {\n if (base[0] < lo) base[0] = lo;\n if (base[1] > hi) base[1] = hi;\n }\n return base;\n }\n};\n","import {Intersect} from './constants';\nimport {Literal} from 'vega-expression';\nimport {error, peek} from 'vega-util';\n\nconst DataPrefix = ':',\n IndexPrefix = '@';\n\nexport function selectionVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) error('First argument to selection functions must be a string literal.');\n\n const data = args[0].value,\n op = args.length >= 2 && peek(args).value,\n field = 'unit',\n indexName = IndexPrefix + field,\n dataName = DataPrefix + data;\n\n if (op === Intersect && !params.hasOwnProperty(indexName)) {\n params[indexName] = scope.getData(data).indataRef(scope, field);\n }\n\n if (!params.hasOwnProperty(dataName)) {\n params[dataName] = scope.getData(data).tuplesRef();\n }\n}","export default function(a, b) {\n return a < b ? -1 : a > b ? 1 : a >= b ? 0 : NaN;\n}\n","import ascending from \"./ascending.js\";\n\nexport default function(compare) {\n if (compare.length === 1) compare = ascendingComparator(compare);\n return {\n left: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) < 0) lo = mid + 1;\n else hi = mid;\n }\n return lo;\n },\n right: function(a, x, lo, hi) {\n if (lo == null) lo = 0;\n if (hi == null) hi = a.length;\n while (lo < hi) {\n var mid = lo + hi >>> 1;\n if (compare(a[mid], x) > 0) hi = mid;\n else lo = mid + 1;\n }\n return lo;\n }\n };\n}\n\nfunction ascendingComparator(f) {\n return function(d, x) {\n return ascending(f(d), x);\n };\n}\n","import ascending from \"./ascending.js\";\nimport bisector from \"./bisector.js\";\n\nvar ascendingBisect = bisector(ascending);\nexport var bisectRight = ascendingBisect.right;\nexport var bisectLeft = ascendingBisect.left;\nexport default bisectRight;\n","export default function(start, stop, step) {\n start = +start, stop = +stop, step = (n = arguments.length) < 2 ? (stop = start, start = 0, 1) : n < 3 ? 1 : +step;\n\n var i = -1,\n n = Math.max(0, Math.ceil((stop - start) / step)) | 0,\n range = new Array(n);\n\n while (++i < n) {\n range[i] = start + i * step;\n }\n\n return range;\n}\n","import {truthy} from 'vega-util';\n\nexport function data(name) {\n const data = this.context.data[name];\n return data ? data.values.value : [];\n}\n\nexport function indata(name, field, value) {\n const index = this.context.data[name]['index:' + field],\n entry = index ? index.value.get(value) : undefined;\n return entry ? entry.count : entry;\n}\n\nexport function setdata(name, tuples) {\n const df = this.context.dataflow,\n data = this.context.data[name],\n input = data.input;\n\n df.pulse(input, df.changeset().remove(truthy).insert(tuples));\n return 1;\n}\n","export default function(item, name, retval) {\n if (item) {\n const df = this.context.dataflow,\n target = item.mark.source;\n df.pulse(target, df.changeset().encode(item, name));\n }\n return retval !== undefined ? retval : item;\n}\n","import {\n format as d3_format\n} from 'd3-format';\n\nimport {\n timeFormat as d3_timeFormat,\n timeParse as d3_timeParse,\n utcFormat as d3_utcFormat,\n utcParse as d3_utcParse\n} from 'd3-time-format';\n\nconst formatCache = {};\n\nfunction formatter(type, method, specifier) {\n let k = type + ':' + specifier,\n e = formatCache[k];\n if (!e || e[0] !== method) {\n formatCache[k] = (e = [method, method(specifier)]);\n }\n return e[1];\n}\n\nexport function format(_, specifier) {\n return formatter('format', d3_format, specifier)(_);\n}\n\nexport function timeFormat(_, specifier) {\n return formatter('timeFormat', d3_timeFormat, specifier)(_);\n}\n\nexport function utcFormat(_, specifier) {\n return formatter('utcFormat', d3_utcFormat, specifier)(_);\n}\n\nexport function timeParse(_, specifier) {\n return formatter('timeParse', d3_timeParse, specifier)(_);\n}\n\nexport function utcParse(_, specifier) {\n return formatter('utcParse', d3_utcParse, specifier)(_);\n}\n\nvar dateObj = new Date(2000, 0, 1);\n\nfunction time(month, day, specifier) {\n dateObj.setMonth(month);\n dateObj.setDate(day);\n return timeFormat(dateObj, specifier);\n}\n\nexport function monthFormat(month) {\n return time(month, 1, '%B');\n}\n\nexport function monthAbbrevFormat(month) {\n return time(month, 1, '%b');\n}\n\nexport function dayFormat(day) {\n return time(0, 2 + day, '%A');\n}\n\nexport function dayAbbrevFormat(day) {\n return time(0, 2 + day, '%a');\n}\n","import {bandSpace} from 'vega-scale';\nimport {isArray, isFunction, isString} from 'vega-util';\n\nexport function getScale(name, ctx) {\n let s;\n return isFunction(name) ? name\n : isString(name) ? (s = ctx.scales[name]) && s.value\n : undefined;\n}\n\nexport function range(name, group) {\n const s = getScale(name, (group || this).context);\n return s && s.range ? s.range() : [];\n}\n\nexport function domain(name, group) {\n const s = getScale(name, (group || this).context);\n return s ? s.domain() : [];\n}\n\nexport function bandwidth(name, group) {\n const s = getScale(name, (group || this).context);\n return s && s.bandwidth ? s.bandwidth() : 0;\n}\n\nexport function bandspace(count, paddingInner, paddingOuter) {\n return bandSpace(count || 0, paddingInner || 0, paddingOuter || 0);\n}\n\nexport function copy(name, group) {\n const s = getScale(name, (group || this).context);\n return s ? s.copy() : undefined;\n}\n\nexport function scale(name, value, group) {\n const s = getScale(name, (group || this).context);\n return s && value !== undefined ? s(value) : undefined;\n}\n\nexport function invert(name, range, group) {\n const s = getScale(name, (group || this).context);\n return !s ? undefined\n : isArray(range) ? (s.invertRange || s.invert)(range)\n : (s.invert || s.invertExtent)(range);\n}\n","import {getScale} from './scale';\nimport {\n geoArea as area,\n geoBounds as bounds,\n geoCentroid as centroid\n} from 'd3-geo';\n\nfunction geoMethod(methodName, globalMethod) {\n return function(projection, geojson, group) {\n if (projection) {\n // projection defined, use it\n const p = getScale(projection, (group || this).context);\n return p && p.path[methodName](geojson);\n } else {\n // projection undefined, use global method\n return globalMethod(geojson);\n }\n };\n}\n\nexport const geoArea = geoMethod('area', area);\nexport const geoBounds = geoMethod('bounds', bounds);\nexport const geoCentroid = geoMethod('centroid', centroid);\n","export default function(item) {\n let group = this.context.group,\n value = false;\n\n if (group) while (item) {\n if (item === group) { value = true; break; }\n item = item.mark.group;\n }\n return value;\n}\n","import {Bounds, intersect} from 'vega-scenegraph';\nimport {array} from 'vega-util';\n\nexport default function(b, opt, group) {\n if (!b) return [];\n\n const [u, v] = b,\n box = new Bounds().set(u[0], u[1], v[0], v[1]),\n scene = group || this.context.dataflow.scenegraph().root;\n\n return intersect(scene, box, filter(opt));\n}\n\nfunction filter(opt) {\n let p = null;\n\n if (opt) {\n const types = array(opt.marktype),\n names = array(opt.markname);\n p = _ => (!types.length || types.some(t => _.marktype === t))\n && (!names.length || names.some(s => _.name === s));\n }\n\n return p;\n}","function log(df, method, args) {\n try {\n df[method].apply(df, ['EXPRESSION'].concat([].slice.call(args)));\n } catch (err) {\n df.warn(err);\n }\n return args[args.length-1];\n}\n\nexport function warn() {\n return log(this.context.dataflow, 'warn', arguments);\n}\n\nexport function info() {\n return log(this.context.dataflow, 'info', arguments);\n}\n\nexport function debug() {\n return log(this.context.dataflow, 'debug', arguments);\n}\n","import {extend} from 'vega-util';\n\nexport default function() {\n var args = [].slice.call(arguments);\n args.unshift({});\n return extend.apply(null, args);\n}\n","import {isTuple} from 'vega-dataflow';\nimport {isArray, truthy} from 'vega-util';\n\nfunction equal(a, b) {\n return a === b || a !== a && b !== b ? true\n : isArray(a) && isArray(b) && a.length === b.length ? equalArray(a, b)\n : false;\n}\n\nfunction equalArray(a, b) {\n for (let i=0, n=a.length; i gradient.stop(fraction(_), scale(_)));\n\n return gradient;\n}\n","import {getScale} from './scale';\nimport {pathParse, pathRender} from 'vega-scenegraph';\n\nexport function geoShape(projection, geojson, group) {\n const p = getScale(projection, (group || this).context);\n return function(context) {\n return p ? p.path.context(context)(geojson) : '';\n }\n}\n\nexport function pathShape(path) {\n let p = null;\n return function(context) {\n return context\n ? pathRender(context, (p = p || pathParse(path)))\n : path;\n };\n}\n","import {data} from './data';\n\nconst EMPTY = {};\n\nfunction datum(d) { return d.data; }\n\nfunction treeNodes(name, context) {\n const tree = data.call(context, name);\n return tree.root && tree.root.lookup || EMPTY;\n}\n\nexport function treePath(name, source, target) {\n const nodes = treeNodes(name, this),\n s = nodes[source],\n t = nodes[target];\n return s && t ? s.path(t).map(datum) : undefined;\n}\n\nexport function treeAncestors(name, node) {\n const n = treeNodes(name, this)[node];\n return n ? n.ancestors().map(datum) : undefined;\n}\n","const _window = (typeof window !== 'undefined' && window) || null;\n\nexport function screen() {\n return _window ? _window.screen : {};\n}\n\nexport function windowSize() {\n return _window\n ? [_window.innerWidth, _window.innerHeight]\n : [undefined, undefined];\n}\n\nexport function containerSize() {\n const view = this.context.dataflow,\n el = view.container && view.container();\n return el\n ? [el.clientWidth, el.clientHeight]\n : [undefined, undefined];\n}\n","export const DataPrefix = ':';\nexport const IndexPrefix = '@';\nexport const ScalePrefix = '%';\nexport const SignalPrefix = '$';\n","import {DataPrefix, IndexPrefix, ScalePrefix} from './prefix';\nimport {Identifier, Literal} from 'vega-expression';\nimport {error} from 'vega-util';\n\nexport function dataVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) {\n error('First argument to data functions must be a string literal.');\n }\n\n const data = args[0].value,\n dataName = DataPrefix + data;\n\n if (!params.hasOwnProperty(dataName)) {\n params[dataName] = scope.getData(data).tuplesRef();\n }\n}\n\nexport function indataVisitor(name, args, scope, params) {\n if (args[0].type !== Literal) error('First argument to indata must be a string literal.');\n if (args[1].type !== Literal) error('Second argument to indata must be a string literal.');\n\n const data = args[0].value,\n field = args[1].value,\n indexName = IndexPrefix + field;\n\n if (!params.hasOwnProperty(indexName)) {\n params[indexName] = scope.getData(data).indataRef(scope, field);\n }\n}\n\nexport function scaleVisitor(name, args, scope, params) {\n if (args[0].type === Literal) {\n // add scale dependency\n addScaleDependency(scope, params, args[0].value);\n }\n else if (args[0].type === Identifier) {\n // indirect scale lookup; add all scales as parameters\n for (name in scope.scales) {\n addScaleDependency(scope, params, name);\n }\n }\n}\n\nfunction addScaleDependency(scope, params, name) {\n const scaleName = ScalePrefix + name;\n if (!params.hasOwnProperty(scaleName)) {\n try {\n params[scaleName] = scope.scaleRef(name);\n } catch (err) {\n // TODO: error handling? warning?\n }\n }\n}\n","import {\n codegen,\n constants,\n functions\n} from 'vega-expression';\n\nimport {\n isTuple\n} from 'vega-dataflow';\n\nimport {\n selectionTest,\n selectionResolve,\n selectionVisitor\n} from 'vega-selections';\n\nimport {\n random\n} from 'vega-statistics';\n\nimport {\n isArray,\n isBoolean,\n isDate,\n isNumber,\n isObject,\n isRegExp,\n isString,\n panLinear,\n panLog,\n panPow,\n panSymlog,\n zoomLinear,\n zoomLog,\n zoomPow,\n zoomSymlog,\n toBoolean,\n toDate,\n toNumber,\n toString,\n clampRange,\n extent,\n flush,\n inrange,\n lerp,\n pad,\n peek,\n quarter,\n utcquarter,\n span,\n stringValue,\n truncate\n} from 'vega-util';\n\nimport {\n range as sequence\n} from 'd3-array';\n\nimport {\n rgb,\n lab,\n hcl,\n hsl\n} from 'd3-color';\n\nimport {\n data,\n indata,\n setdata\n} from './data';\n\nimport {\n default as encode\n} from './encode';\n\nimport {\n format,\n utcFormat,\n timeFormat,\n utcParse,\n timeParse,\n monthFormat,\n monthAbbrevFormat,\n dayFormat,\n dayAbbrevFormat\n} from './format';\n\nimport {\n geoArea,\n geoBounds,\n geoCentroid\n} from './geo';\n\nimport {\n default as inScope\n} from './inscope';\n\nimport {\n default as intersect\n} from './intersect';\n\nimport {\n warn,\n info,\n debug\n} from './log';\n\nimport {\n default as merge\n} from './merge';\n\nimport {\n default as modify\n} from './modify';\n\nimport {\n pinchDistance,\n pinchAngle\n} from './pinch';\n\nimport {\n range,\n domain,\n bandwidth,\n bandspace,\n copy,\n scale,\n invert\n} from './scale';\n\nimport {\n default as scaleGradient\n} from './scale-gradient';\n\nimport {\n geoShape,\n pathShape\n} from './shape';\n\nimport {\n treePath,\n treeAncestors\n} from './tree';\n\nimport {\n containerSize,\n screen,\n windowSize\n} from './window';\n\nimport {\n dataVisitor,\n indataVisitor,\n scaleVisitor\n} from './visitors';\n\nimport {SignalPrefix} from './prefix';\n\n// Expression function context object\nexport const functionContext = {\n random: function() { return random(); }, // override default\n isArray,\n isBoolean,\n isDate,\n isDefined: function(_) { return _ !== undefined; },\n isNumber,\n isObject,\n isRegExp,\n isString,\n isTuple,\n isValid: function(_) { return _ != null && _ === _; },\n toBoolean,\n toDate,\n toNumber,\n toString,\n flush,\n lerp,\n merge,\n pad,\n peek,\n span,\n inrange,\n truncate,\n rgb,\n lab,\n hcl,\n hsl,\n sequence,\n format,\n utcFormat,\n utcParse,\n timeFormat,\n timeParse,\n monthFormat,\n monthAbbrevFormat,\n dayFormat,\n dayAbbrevFormat,\n quarter,\n utcquarter,\n warn,\n info,\n debug,\n extent,\n inScope,\n intersect,\n clampRange,\n pinchDistance,\n pinchAngle,\n screen,\n containerSize,\n windowSize,\n bandspace,\n setdata,\n pathShape,\n panLinear,\n panLog,\n panPow,\n panSymlog,\n zoomLinear,\n zoomLog,\n zoomPow,\n zoomSymlog,\n encode,\n modify\n};\n\nconst eventFunctions = ['view', 'item', 'group', 'xy', 'x', 'y'], // event functions\n eventPrefix = 'event.vega.', // event function prefix\n thisPrefix = 'this.', // function context prefix\n astVisitors = {}; // AST visitors for dependency analysis\n\n// Build expression function registry\nfunction buildFunctions(codegen) {\n const fn = functions(codegen);\n eventFunctions.forEach(name => fn[name] = eventPrefix + name);\n for (let name in functionContext) { fn[name] = thisPrefix + name; }\n return fn;\n}\n\n// Register an expression function\nexport function expressionFunction(name, fn, visitor) {\n if (arguments.length === 1) {\n return functionContext[name];\n }\n\n // register with the functionContext\n functionContext[name] = fn;\n\n // if there is an astVisitor register that, too\n if (visitor) astVisitors[name] = visitor;\n\n // if the code generator has already been initialized,\n // we need to also register the function with it\n if (codeGenerator) codeGenerator.functions[name] = thisPrefix + name;\n return this;\n}\n\n// register expression functions with ast visitors\nexpressionFunction('bandwidth', bandwidth, scaleVisitor);\nexpressionFunction('copy', copy, scaleVisitor);\nexpressionFunction('domain', domain, scaleVisitor);\nexpressionFunction('range', range, scaleVisitor);\nexpressionFunction('invert', invert, scaleVisitor);\nexpressionFunction('scale', scale, scaleVisitor);\nexpressionFunction('gradient', scaleGradient, scaleVisitor);\nexpressionFunction('geoArea', geoArea, scaleVisitor);\nexpressionFunction('geoBounds', geoBounds, scaleVisitor);\nexpressionFunction('geoCentroid', geoCentroid, scaleVisitor);\nexpressionFunction('geoShape', geoShape, scaleVisitor);\nexpressionFunction('indata', indata, indataVisitor);\nexpressionFunction('data', data, dataVisitor);\nexpressionFunction('treePath', treePath, dataVisitor);\nexpressionFunction('treeAncestors', treeAncestors, dataVisitor);\n\n// register Vega-Lite selection functions\nexpressionFunction('vlSelectionTest', selectionTest, selectionVisitor);\nexpressionFunction('vlSelectionResolve', selectionResolve, selectionVisitor);\n\n// Export code generator and parameters\nexport const codegenParams = {\n blacklist: ['_'],\n whitelist: ['datum', 'event', 'item'],\n fieldvar: 'datum',\n globalvar: function(id) { return '_[' + stringValue(SignalPrefix + id) + ']'; },\n functions: buildFunctions,\n constants: constants,\n visitors: astVisitors\n};\n\nexport var codeGenerator = codegen(codegenParams);\n","/**\n * Parse an expression given the argument signature and body code.\n */\nexport default function expression(args, code, ctx) {\n // wrap code in return statement if expression does not terminate\n if (code[code.length-1] !== ';') {\n code = 'return(' + code + ');';\n }\n var fn = Function.apply(null, args.concat(code));\n return ctx && ctx.functions ? fn.bind(ctx.functions) : fn;\n}\n\n/**\n * Parse an expression used to update an operator value.\n */\nexport function operatorExpression(code, ctx) {\n return expression(['_'], code, ctx);\n}\n\n/**\n * Parse an expression provided as an operator parameter value.\n */\nexport function parameterExpression(code, ctx) {\n return expression(['datum', '_'], code, ctx);\n}\n\n/**\n * Parse an expression applied to an event stream.\n */\nexport function eventExpression(code, ctx) {\n return expression(['event'], code, ctx);\n}\n\n/**\n * Parse an expression used to handle an event-driven operator update.\n */\nexport function handlerExpression(code, ctx) {\n return expression(['_', 'event'], code, ctx);\n}\n\n/**\n * Parse an expression that performs visual encoding.\n */\nexport function encodeExpression(code, ctx) {\n return expression(['item', '_'], code, ctx);\n}\n","import parseDataflow from './dataflow';\nimport {parameterExpression, encodeExpression} from './expression';\nimport {tupleid} from 'vega-dataflow';\nimport {accessor, array, compare, error, field, isArray, isObject, key} from 'vega-util';\n\n/**\n * Parse a set of operator parameters.\n */\nexport default function parseParameters(spec, ctx, params) {\n params = params || {};\n var key, value;\n\n for (key in spec) {\n value = spec[key];\n\n params[key] = isArray(value)\n ? value.map(function(v) { return parseParameter(v, ctx, params); })\n : parseParameter(value, ctx, params);\n }\n return params;\n}\n\n/**\n * Parse a single parameter.\n */\nfunction parseParameter(spec, ctx, params) {\n if (!spec || !isObject(spec)) return spec;\n\n for (var i=0, n=PARSERS.length, p; i v.resize());\n }, false, 1);\n}\n","import {transforms} from 'vega-dataflow';\nimport {isArray} from 'vega-util';\n\n/**\n * Get the current view state, consisting of signal values and/or data sets.\n * @param {object} [options] - Options flags indicating which state to export.\n * If unspecified, all signals and data sets will be exported.\n * @param {function(string, Operator):boolean} [options.signals] - Optional\n * predicate function for testing if a signal should be included in the\n * exported state. If unspecified, all signals will be included, except for\n * those named 'parent' or those which refer to a Transform value.\n * @param {function(string, object):boolean} [options.data] - Optional\n * predicate function for testing if a data set's input should be included\n * in the exported state. If unspecified, all data sets that have been\n * explicitly modified will be included.\n * @param {boolean} [options.recurse=true] - Flag indicating if the exported\n * state should recursively include state from group mark sub-contexts.\n * @return {object} - An object containing the exported state values.\n */\nexport function getState(options) {\n return this._runtime.getState(options || {\n data: dataTest,\n signals: signalTest,\n recurse: true\n });\n}\n\nfunction dataTest(name, data) {\n return data.modified\n && isArray(data.input.value)\n && name.indexOf('_:vega:_');\n}\n\nfunction signalTest(name, op) {\n return !(name === 'parent' || op instanceof transforms.proxy);\n}\n\n/**\n * Sets the current view state and updates the view by invoking run.\n * @param {object} state - A state object containing signal and/or\n * data set values, following the format used by the getState method.\n * @return {View} - This view instance.\n */\nexport function setState(state) {\n this.runAsync(null,\n v => { v._trigger = false; v._runtime.setState(state); },\n v => { v._trigger = true; }\n );\n return this;\n}\n","import {interval} from 'd3-timer';\n\nexport default function(callback, delay) {\n function tick(elapsed) {\n callback({timestamp: Date.now(), elapsed: elapsed});\n }\n this._timers.push(interval(tick, delay));\n}\n","import {isArray, isDate, isObject} from 'vega-util';\n\nexport default function(handler, event, item, value) {\n var el = handler.element();\n if (el) el.setAttribute('title', formatTooltip(value));\n}\n\nfunction formatTooltip(value) {\n return value == null ? ''\n : isArray(value) ? formatArray(value)\n : isObject(value) && !isDate(value) ? formatObject(value)\n : value + '';\n}\n\nfunction formatObject(obj) {\n return Object.keys(obj).map(function(key) {\n var v = obj[key];\n return key + ': ' + (isArray(v) ? formatArray(v) : formatValue(v));\n }).join('\\n');\n}\n\nfunction formatArray(value) {\n return '[' + value.map(formatValue).join(', ') + ']';\n}\n\nfunction formatValue(value) {\n return isArray(value) ? '[\\u2026]'\n : isObject(value) && !isDate(value) ? '{\\u2026}'\n : value;\n}\n","import cursor from './cursor';\nimport {data, dataref, change, insert, remove} from './data';\nimport {initializeEventConfig, events} from './events';\nimport hover from './hover';\nimport finalize from './finalize';\nimport initialize from './initialize';\nimport renderToImageURL from './render-to-image-url';\nimport renderToCanvas from './render-to-canvas';\nimport renderToSVG from './render-to-svg';\nimport {resizeRenderer} from './render-size';\nimport runtime from './runtime';\nimport {scale} from './scale';\nimport {resizeView, initializeResize, viewWidth, viewHeight} from './size';\nimport {getState, setState} from './state';\nimport timer from './timer';\nimport defaultTooltip from './tooltip';\nimport trap from './trap';\n\nimport {asyncCallback, Dataflow} from 'vega-dataflow';\nimport {error, extend, inherits, stringValue} from 'vega-util';\nimport {\n CanvasHandler, Scenegraph,\n renderModule, RenderType\n} from 'vega-scenegraph';\n\n/**\n * Create a new View instance from a Vega dataflow runtime specification.\n * The generated View will not immediately be ready for display. Callers\n * should also invoke the initialize method (e.g., to set the parent\n * DOM element in browser-based deployment) and then invoke the run\n * method to evaluate the dataflow graph. Rendering will automatically\n * be peformed upon dataflow runs.\n * @constructor\n * @param {object} spec - The Vega dataflow runtime specification.\n */\nexport default function View(spec, options) {\n var view = this;\n options = options || {};\n\n Dataflow.call(view);\n if (options.loader) view.loader(options.loader);\n if (options.logger) view.logger(options.logger);\n if (options.logLevel != null) view.logLevel(options.logLevel);\n\n view._el = null;\n view._elBind = null;\n view._renderType = options.renderer || RenderType.Canvas;\n view._scenegraph = new Scenegraph();\n var root = view._scenegraph.root;\n\n // initialize renderer, handler and event management\n view._renderer = null;\n view._tooltip = options.tooltip || defaultTooltip,\n view._redraw = true;\n view._handler = new CanvasHandler().scene(root);\n view._preventDefault = false;\n view._timers = [];\n view._eventListeners = [];\n view._resizeListeners = [];\n\n // initialize dataflow graph\n var ctx = runtime(view, spec, options.functions);\n view._runtime = ctx;\n view._signals = ctx.signals;\n view._bind = (spec.bindings || []).map(function(_) {\n return {\n state: null,\n param: extend({}, _)\n };\n });\n\n // initialize scenegraph\n if (ctx.root) ctx.root.set(root);\n root.source = ctx.data.root.input;\n view.pulse(\n ctx.data.root.input,\n view.changeset().insert(root.items)\n );\n\n // initialize background color\n view._background = options.background || ctx.background || null;\n\n // initialize event configuration\n view._eventConfig = initializeEventConfig(ctx.eventConfig);\n\n // initialize view size\n view._width = view.width();\n view._height = view.height();\n view._viewWidth = viewWidth(view, view._width);\n view._viewHeight = viewHeight(view, view._height);\n view._origin = [0, 0];\n view._resize = 0;\n view._autosize = 1;\n initializeResize(view);\n\n // initialize cursor\n cursor(view);\n\n // initialize hover proessing, if requested\n if (options.hover) view.hover();\n\n // initialize DOM container(s) and renderer\n if (options.container) view.initialize(options.container, options.bind);\n}\n\nvar prototype = inherits(View, Dataflow);\n\n// -- DATAFLOW / RENDERING ----\n\nprototype.evaluate = async function(encode, prerun, postrun) {\n // evaluate dataflow and prerun\n await Dataflow.prototype.evaluate.call(this, encode, prerun);\n\n // render as needed\n if (this._redraw || this._resize) {\n try {\n if (this._renderer) {\n if (this._resize) {\n this._resize = 0;\n resizeRenderer(this);\n }\n await this._renderer.renderAsync(this._scenegraph.root);\n }\n this._redraw = false;\n } catch (e) {\n this.error(e);\n }\n }\n\n // evaluate postrun\n if (postrun) asyncCallback(this, postrun);\n\n return this;\n};\n\nprototype.dirty = function(item) {\n this._redraw = true;\n this._renderer && this._renderer.dirty(item);\n};\n\n// -- GET / SET ----\n\nprototype.container = function() {\n return this._el;\n};\n\nprototype.scenegraph = function() {\n return this._scenegraph;\n};\n\nprototype.origin = function() {\n return this._origin.slice();\n};\n\nfunction lookupSignal(view, name) {\n return view._signals.hasOwnProperty(name)\n ? view._signals[name]\n : error('Unrecognized signal name: ' + stringValue(name));\n}\n\nprototype.signal = function(name, value, options) {\n var op = lookupSignal(this, name);\n return arguments.length === 1\n ? op.value\n : this.update(op, value, options);\n};\n\nprototype.background = function(_) {\n if (arguments.length) {\n this._background = _;\n this._resize = 1;\n return this;\n } else {\n return this._background;\n }\n};\n\nprototype.width = function(_) {\n return arguments.length ? this.signal('width', _) : this.signal('width');\n};\n\nprototype.height = function(_) {\n return arguments.length ? this.signal('height', _) : this.signal('height');\n};\n\nprototype.padding = function(_) {\n return arguments.length ? this.signal('padding', _) : this.signal('padding');\n};\n\nprototype.autosize = function(_) {\n return arguments.length ? this.signal('autosize', _) : this.signal('autosize');\n};\n\nprototype.renderer = function(type) {\n if (!arguments.length) return this._renderType;\n if (!renderModule(type)) error('Unrecognized renderer type: ' + type);\n if (type !== this._renderType) {\n this._renderType = type;\n this._resetRenderer();\n }\n return this;\n};\n\nprototype.tooltip = function(handler) {\n if (!arguments.length) return this._tooltip;\n if (handler !== this._tooltip) {\n this._tooltip = handler;\n this._resetRenderer();\n }\n return this;\n};\n\nprototype.loader = function(loader) {\n if (!arguments.length) return this._loader;\n if (loader !== this._loader) {\n Dataflow.prototype.loader.call(this, loader);\n this._resetRenderer();\n }\n return this;\n};\n\nprototype.resize = function() {\n // set flag to perform autosize\n this._autosize = 1;\n // touch autosize signal to ensure top-level ViewLayout runs\n return this.touch(lookupSignal(this, 'autosize'));\n};\n\nprototype._resetRenderer = function() {\n if (this._renderer) {\n this._renderer = null;\n this.initialize(this._el, this._elBind);\n }\n};\n\n// -- SIZING ----\nprototype._resizeView = resizeView;\n\n// -- EVENT HANDLING ----\n\nprototype.addEventListener = function(type, handler, options) {\n var callback = handler;\n if (!(options && options.trap === false)) {\n // wrap callback in error handler\n callback = trap(this, handler);\n callback.raw = handler;\n }\n this._handler.on(type, callback);\n return this;\n};\n\nprototype.removeEventListener = function(type, handler) {\n var handlers = this._handler.handlers(type),\n i = handlers.length, h, t;\n\n // search registered handlers, remove if match found\n while (--i >= 0) {\n t = handlers[i].type;\n h = handlers[i].handler;\n if (type === t && (handler === h || handler === h.raw)) {\n this._handler.off(t, h);\n break;\n }\n }\n return this;\n};\n\nprototype.addResizeListener = function(handler) {\n var l = this._resizeListeners;\n if (l.indexOf(handler) < 0) {\n // add handler if it isn't already registered\n // note: error trapping handled elsewhere, so\n // no need to wrap handlers here\n l.push(handler);\n }\n return this;\n};\n\nprototype.removeResizeListener = function(handler) {\n var l = this._resizeListeners,\n i = l.indexOf(handler);\n if (i >= 0) {\n l.splice(i, 1);\n }\n return this;\n};\n\nfunction findOperatorHandler(op, handler) {\n var t = op._targets || [],\n h = t.filter(function(op) {\n var u = op._update;\n return u && u.handler === handler;\n });\n return h.length ? h[0] : null;\n}\n\nfunction addOperatorListener(view, name, op, handler) {\n var h = findOperatorHandler(op, handler);\n if (!h) {\n h = trap(this, function() { handler(name, op.value); });\n h.handler = handler;\n view.on(op, null, h);\n }\n return view;\n}\n\nfunction removeOperatorListener(view, op, handler) {\n var h = findOperatorHandler(op, handler);\n if (h) op._targets.remove(h);\n return view;\n}\n\nprototype.addSignalListener = function(name, handler) {\n return addOperatorListener(this, name, lookupSignal(this, name), handler);\n};\n\nprototype.removeSignalListener = function(name, handler) {\n return removeOperatorListener(this, lookupSignal(this, name), handler);\n};\n\nprototype.addDataListener = function(name, handler) {\n return addOperatorListener(this, name, dataref(this, name).values, handler);\n};\n\nprototype.removeDataListener = function(name, handler) {\n return removeOperatorListener(this, dataref(this, name).values, handler);\n};\n\nprototype.preventDefault = function(_) {\n if (arguments.length) {\n this._preventDefault = _;\n return this;\n } else {\n return this._preventDefault;\n }\n};\n\nprototype.timer = timer;\nprototype.events = events;\nprototype.finalize = finalize;\nprototype.hover = hover;\n\n// -- DATA ----\nprototype.data = data;\nprototype.change = change;\nprototype.insert = insert;\nprototype.remove = remove;\n\n// -- SCALES --\nprototype.scale = scale;\n\n// -- INITIALIZATION ----\nprototype.initialize = initialize;\n\n// -- HEADLESS RENDERING ----\nprototype.toImageURL = renderToImageURL;\nprototype.toCanvas = renderToCanvas;\nprototype.toSVG = renderToSVG;\n\n// -- SAVE / RESTORE STATE ----\nprototype.getState = getState;\nprototype.setState = setState;\n","import {CallExpression, parse} from 'vega-expression';\nimport {codeGenerator, codegenParams, SignalPrefix} from 'vega-functions';\nimport {error, isString, stringValue} from 'vega-util';\n\nexport default function(expr, scope, preamble) {\n var params = {}, ast, gen;\n\n // parse the expression to an abstract syntax tree (ast)\n try {\n expr = isString(expr) ? expr : (stringValue(expr) + '');\n ast = parse(expr);\n } catch (err) {\n error('Expression parse error: ' + expr);\n }\n\n // analyze ast function calls for dependencies\n ast.visit(function visitor(node) {\n if (node.type !== CallExpression) return;\n var name = node.callee.name,\n visit = codegenParams.visitors[name];\n if (visit) visit(name, node.arguments, scope, params);\n });\n\n // perform code generation\n gen = codeGenerator(ast);\n\n // collect signal dependencies\n gen.globals.forEach(function(name) {\n var signalName = SignalPrefix + name;\n if (!params.hasOwnProperty(signalName) && scope.getSignal(name)) {\n params[signalName] = scope.signalRef(name);\n }\n });\n\n // return generated expression code and dependencies\n return {\n $expr: preamble ? preamble + 'return(' + gen.code + ');' : gen.code,\n $fields: gen.fields,\n $params: params\n };\n}\n","import {isObject} from 'vega-util';\n\nexport function Entry(type, value, params, parent) {\n this.id = -1;\n this.type = type;\n this.value = value;\n this.params = params;\n if (parent) this.parent = parent;\n}\n\nexport function entry(type, value, params, parent) {\n return new Entry(type, value, params, parent);\n}\n\nexport function operator(value, params) {\n return entry('operator', value, params);\n}\n\n// -----\n\nexport function ref(op) {\n var ref = {$ref: op.id};\n // if operator not yet registered, cache ref to resolve later\n if (op.id < 0) (op.refs = op.refs || []).push(ref);\n return ref;\n}\n\nexport var tupleidRef = {\n $tupleid: 1,\n toString: function() { return ':_tupleid_:'; }\n};\n\nexport function fieldRef(field, name) {\n return name ? {$field: field, $name: name} : {$field: field};\n}\n\nexport var keyFieldRef = fieldRef('key');\n\nexport function compareRef(fields, orders) {\n return {$compare: fields, $order: orders};\n}\n\nexport function keyRef(fields, flat) {\n var ref = {$key: fields};\n if (flat) ref.$flat = true;\n return ref;\n}\n\n// -----\n\nexport var Ascending = 'ascending';\n\nexport var Descending = 'descending';\n\nexport function sortKey(sort) {\n return !isObject(sort) ? ''\n : (sort.order === Descending ? '-' : '+')\n + aggrField(sort.op, sort.field);\n}\n\nexport function aggrField(op, field) {\n return (op && op.signal ? '$' + op.signal : op || '')\n + (op && field ? '_' : '')\n + (field && field.signal ? '$' + field.signal : field || '');\n}\n\n// -----\n\nexport var Scope = 'scope';\n\nexport var View = 'view';\n\nexport function isSignal(_) {\n return _ && _.signal;\n}\n\nexport function isExpr(_) {\n return _ && _.expr;\n}\n\nexport function hasSignal(_) {\n if (isSignal(_)) return true;\n if (isObject(_)) for (var key in _) {\n if (hasSignal(_[key])) return true;\n }\n return false;\n}\n\nexport function value(specValue, defaultValue) {\n return specValue != null ? specValue : defaultValue;\n}\n\nexport function deref(v) {\n return v && v.signal || v;\n}\n","/**\n * Parse an event selector string.\n * Returns an array of event stream definitions.\n */\nexport default function(selector, source, marks) {\n DEFAULT_SOURCE = source || VIEW;\n MARKS = marks || DEFAULT_MARKS;\n return parseMerge(selector.trim()).map(parseSelector);\n}\n\nvar VIEW = 'view',\n LBRACK = '[',\n RBRACK = ']',\n LBRACE = '{',\n RBRACE = '}',\n COLON = ':',\n COMMA = ',',\n NAME = '@',\n GT = '>',\n ILLEGAL = /[[\\]{}]/,\n DEFAULT_SOURCE,\n MARKS,\n DEFAULT_MARKS = {\n '*': 1,\n arc: 1,\n area: 1,\n group: 1,\n image: 1,\n line: 1,\n path: 1,\n rect: 1,\n rule: 1,\n shape: 1,\n symbol: 1,\n text: 1,\n trail: 1\n };\n\nfunction isMarkType(type) {\n return MARKS.hasOwnProperty(type);\n}\n\nfunction find(s, i, endChar, pushChar, popChar) {\n var count = 0,\n n = s.length,\n c;\n for (; i= 0) --count;\n else if (pushChar && pushChar.indexOf(c) >= 0) ++count;\n }\n return i;\n}\n\nfunction parseMerge(s) {\n var output = [],\n start = 0,\n n = s.length,\n i = 0;\n\n while (i < n) {\n i = find(s, i, COMMA, LBRACK + LBRACE, RBRACK + RBRACE);\n output.push(s.substring(start, i).trim());\n start = ++i;\n }\n\n if (output.length === 0) {\n throw 'Empty event selector: ' + s;\n }\n return output;\n}\n\nfunction parseSelector(s) {\n return s[0] === '['\n ? parseBetween(s)\n : parseStream(s);\n}\n\nfunction parseBetween(s) {\n var n = s.length,\n i = 1,\n b, stream;\n\n i = find(s, i, RBRACK, LBRACK, RBRACK);\n if (i === n) {\n throw 'Empty between selector: ' + s;\n }\n\n b = parseMerge(s.substring(1, i));\n if (b.length !== 2) {\n throw 'Between selector must have two elements: ' + s;\n }\n\n s = s.slice(i + 1).trim();\n if (s[0] !== GT) {\n throw 'Expected \\'>\\' after between selector: ' + s;\n }\n\n b = b.map(parseSelector);\n\n stream = parseSelector(s.slice(1).trim());\n if (stream.between) {\n return {\n between: b,\n stream: stream\n };\n } else {\n stream.between = b;\n }\n\n return stream;\n}\n\nfunction parseStream(s) {\n var stream = {source: DEFAULT_SOURCE},\n source = [],\n throttle = [0, 0],\n markname = 0,\n start = 0,\n n = s.length,\n i = 0, j,\n filter;\n\n // extract throttle from end\n if (s[n-1] === RBRACE) {\n i = s.lastIndexOf(LBRACE);\n if (i >= 0) {\n try {\n throttle = parseThrottle(s.substring(i+1, n-1));\n } catch (e) {\n throw 'Invalid throttle specification: ' + s;\n }\n s = s.slice(0, i).trim();\n n = s.length;\n } else throw 'Unmatched right brace: ' + s;\n i = 0;\n }\n\n if (!n) throw s;\n\n // set name flag based on first char\n if (s[0] === NAME) markname = ++i;\n\n // extract first part of multi-part stream selector\n j = find(s, i, COLON);\n if (j < n) {\n source.push(s.substring(start, j).trim());\n start = i = ++j;\n }\n\n // extract remaining part of stream selector\n i = find(s, i, LBRACK);\n if (i === n) {\n source.push(s.substring(start, n).trim());\n } else {\n source.push(s.substring(start, i).trim());\n filter = [];\n start = ++i;\n if (start === n) throw 'Unmatched left bracket: ' + s;\n }\n\n // extract filters\n while (i < n) {\n i = find(s, i, RBRACK);\n if (i === n) throw 'Unmatched left bracket: ' + s;\n filter.push(s.substring(start, i).trim());\n if (i < n-1 && s[++i] !== LBRACK) throw 'Expected left bracket: ' + s;\n start = ++i;\n }\n\n // marshall event stream specification\n if (!(n = source.length) || ILLEGAL.test(source[n-1])) {\n throw 'Invalid event selector: ' + s;\n }\n\n if (n > 1) {\n stream.type = source[1];\n if (markname) {\n stream.markname = source[0].slice(1);\n } else if (isMarkType(source[0])) {\n stream.marktype = source[0];\n } else {\n stream.source = source[0];\n }\n } else {\n stream.type = source[0];\n }\n if (stream.type.slice(-1) === '!') {\n stream.consume = true;\n stream.type = stream.type.slice(0, -1)\n }\n if (filter != null) stream.filter = filter;\n if (throttle[0]) stream.throttle = throttle[0];\n if (throttle[1]) stream.debounce = throttle[1];\n\n return stream;\n}\n\nfunction parseThrottle(s) {\n var a = s.split(COMMA);\n if (!s.length || a.length > 2) throw s;\n return a.map(function(_) {\n var x = +_;\n if (x !== x) throw s;\n return x;\n });\n}\n","import {entry} from './util';\n\nfunction transform(name) {\n return function(params, value, parent) {\n return entry(name, value, params || undefined, parent);\n };\n}\n\nexport var Aggregate = transform('aggregate');\nexport var AxisTicks = transform('axisticks');\nexport var Bound = transform('bound');\nexport var Collect = transform('collect');\nexport var Compare = transform('compare');\nexport var DataJoin = transform('datajoin');\nexport var Encode = transform('encode');\nexport var Expression = transform('expression');\nexport var Extent = transform('extent');\nexport var Facet = transform('facet');\nexport var Field = transform('field');\nexport var Key = transform('key');\nexport var LegendEntries = transform('legendentries');\nexport var Load = transform('load');\nexport var Mark = transform('mark');\nexport var MultiExtent = transform('multiextent');\nexport var MultiValues = transform('multivalues');\nexport var Overlap = transform('overlap');\nexport var Params = transform('params');\nexport var PreFacet = transform('prefacet');\nexport var Projection = transform('projection');\nexport var Proxy = transform('proxy');\nexport var Relay = transform('relay');\nexport var Render = transform('render');\nexport var Scale = transform('scale');\nexport var Sieve = transform('sieve');\nexport var SortItems = transform('sortitems');\nexport var ViewLayout = transform('viewlayout');\nexport var Values = transform('values');\n","export const Top = 'top';\nexport const Left = 'left';\nexport const Right = 'right';\nexport const Bottom = 'bottom';\nexport const Center = 'center';\n\nexport const Vertical = 'vertical';\n\nexport const Start = 'start';\nexport const Middle = 'middle';\nexport const End = 'end';\n\nexport const Index = 'index';\nexport const Label = 'label';\nexport const Offset = 'offset';\nexport const Perc = 'perc';\nexport const Perc2 = 'perc2';\nexport const Size = 'size';\nexport const Value = 'value';\n\nexport const GuideLabelStyle = 'guide-label';\nexport const GuideTitleStyle = 'guide-title';\nexport const GroupTitleStyle = 'group-title';\n\nexport const Symbols = 'symbol';\nexport const Gradient = 'gradient';\nexport const Discrete = 'discrete';\n\n// Encoding channels supported by legends\n// In priority order of 'canonical' scale\nexport const LegendScales = [\n 'size',\n 'shape',\n 'fill',\n 'stroke',\n 'strokeWidth',\n 'strokeDash',\n 'opacity'\n];\n\nexport const Skip = {\n name: 1,\n interactive: 1\n};\n\nexport const zero = {value: 0};\nexport const one = {value: 1};\n","import {toSet} from 'vega-util';\n\nvar Skip = toSet(['rule']),\n Swap = toSet(['group', 'image', 'rect']);\n\nexport default function(encode, marktype) {\n var code = '';\n\n if (Skip[marktype]) return code;\n\n if (encode.x2) {\n if (encode.x) {\n if (Swap[marktype]) {\n code += 'if(o.x>o.x2)$=o.x,o.x=o.x2,o.x2=$;';\n }\n code += 'o.width=o.x2-o.x;';\n } else {\n code += 'o.x=o.x2-(o.width||0);';\n }\n }\n\n if (encode.xc) {\n code += 'o.x=o.xc-(o.width||0)/2;';\n }\n\n if (encode.y2) {\n if (encode.y) {\n if (Swap[marktype]) {\n code += 'if(o.y>o.y2)$=o.y,o.y=o.y2,o.y2=$;';\n }\n code += 'o.height=o.y2-o.y;';\n } else {\n code += 'o.y=o.y2-(o.height||0);';\n }\n }\n\n if (encode.yc) {\n code += 'o.y=o.yc-(o.height||0)/2;';\n }\n\n return code;\n}\n","import {Left, Right, Center, Start, End, Vertical} from './constants';\nimport {value} from '../../util';\nimport {stringValue} from 'vega-util';\n\nexport function lookup(spec, config) {\n const _ = name => value(spec[name], config[name]);\n\n _.isVertical = s => Vertical === value(\n spec.direction,\n config.direction || (s ? config.symbolDirection : config.gradientDirection)\n );\n\n _.gradientLength = () => value(\n spec.gradientLength,\n config.gradientLength || config.gradientWidth\n );\n\n _.gradientThickness = () => value(\n spec.gradientThickness,\n config.gradientThickness || config.gradientHeight\n );\n\n _.entryColumns = () => value(\n spec.columns,\n value(config.columns, +_.isVertical(true))\n );\n\n return _;\n}\n\nexport function getEncoding(name, encode) {\n var v = encode && (\n (encode.update && encode.update[name]) ||\n (encode.enter && encode.enter[name])\n );\n return v && v.signal ? v : v ? v.value : null;\n}\n\nexport function getStyle(name, scope, style) {\n var s = scope.config.style[style];\n return s && s[name];\n}\n\nexport function anchorExpr(s, e, m) {\n return `item.anchor === \"${Start}\" ? ${s} : item.anchor === \"${End}\" ? ${e} : ${m}`;\n}\n\nexport const alignExpr = anchorExpr(\n stringValue(Left),\n stringValue(Right),\n stringValue(Center)\n);\n","import {entry, ref, keyFieldRef, aggrField, sortKey} from './util';\nimport {Aggregate, Collect} from './transforms';\nimport {isString} from 'vega-util';\n\nexport default function DataScope(scope, input, output, values, aggr) {\n this.scope = scope; // parent scope object\n this.input = input; // first operator in pipeline (tuple input)\n this.output = output; // last operator in pipeline (tuple output)\n this.values = values; // operator for accessing tuples (but not tuple flow)\n\n // last aggregate in transform pipeline\n this.aggregate = aggr;\n\n // lookup table of field indices\n this.index = {};\n}\n\nDataScope.fromEntries = function(scope, entries) {\n var n = entries.length,\n i = 1,\n input = entries[0],\n values = entries[n-1],\n output = entries[n-2],\n aggr = null;\n\n if (input && input.type === 'load') {\n input = entries[1];\n }\n\n // add operator entries to this scope, wire up pulse chain\n scope.add(entries[0]);\n for (; i 0;\n};\n\nprototype.toRuntime = function() {\n this.finish();\n return {\n background: this.background,\n operators: this.operators,\n streams: this.streams,\n updates: this.updates,\n bindings: this.bindings,\n eventConfig: this.eventConfig\n };\n};\n\nprototype.id = function() {\n return (this._subid ? this._subid + ':' : 0) + this._id++;\n};\n\nprototype.add = function(op) {\n this.operators.push(op);\n op.id = this.id();\n // if pre-registration references exist, resolve them now\n if (op.refs) {\n op.refs.forEach(function(ref) { ref.$ref = op.id; });\n op.refs = null;\n }\n return op;\n};\n\nprototype.proxy = function(op) {\n var vref = op instanceof Entry ? ref(op) : op;\n return this.add(Proxy({value: vref}));\n};\n\nprototype.addStream = function(stream) {\n this.streams.push(stream);\n stream.id = this.id();\n return stream;\n};\n\nprototype.addUpdate = function(update) {\n this.updates.push(update);\n return update;\n};\n\n// Apply metadata\nprototype.finish = function() {\n var name, ds;\n\n // annotate root\n if (this.root) this.root.root = true;\n\n // annotate signals\n for (name in this.signals) {\n this.signals[name].signal = name;\n }\n\n // annotate scales\n for (name in this.scales) {\n this.scales[name].scale = name;\n }\n\n // annotate data sets\n function annotate(op, name, type) {\n var data, list;\n if (op) {\n data = op.data || (op.data = {});\n list = data[name] || (data[name] = []);\n list.push(type);\n }\n }\n for (name in this.data) {\n ds = this.data[name];\n annotate(ds.input, name, 'input');\n annotate(ds.output, name, 'output');\n annotate(ds.values, name, 'values');\n for (var field in ds.index) {\n annotate(ds.index[field], name, 'index:' + field);\n }\n }\n\n return this;\n};\n\n// ----\n\nprototype.pushState = function(encode, parent, lookup) {\n this._encode.push(ref(this.add(Sieve({pulse: encode}))));\n this._parent.push(parent);\n this._lookup.push(lookup ? ref(this.proxy(lookup)) : null);\n this._markpath.push(-1);\n};\n\nprototype.popState = function() {\n this._encode.pop();\n this._parent.pop();\n this._lookup.pop();\n this._markpath.pop();\n};\n\nprototype.parent = function() {\n return peek(this._parent);\n};\n\nprototype.encode = function() {\n return peek(this._encode);\n};\n\nprototype.lookup = function() {\n return peek(this._lookup);\n};\n\nprototype.markpath = function() {\n var p = this._markpath;\n return ++p[p.length-1];\n};\n\n// ----\n\nprototype.fieldRef = function(field, name) {\n if (isString(field)) return fieldRef(field, name);\n if (!field.signal) {\n error('Unsupported field reference: ' + stringValue(field));\n }\n\n var s = field.signal,\n f = this.field[s],\n params;\n\n if (!f) {\n params = {name: this.signalRef(s)};\n if (name) params.as = name;\n this.field[s] = f = ref(this.add(Field(params)));\n }\n return f;\n};\n\nprototype.compareRef = function(cmp, stable) {\n function check(_) {\n if (isSignal(_)) {\n signal = true;\n return scope.signalRef(_.signal);\n } else if (isExpr(_)) {\n signal = true;\n return scope.exprRef(_.expr);\n } else {\n return _;\n }\n }\n\n var scope = this,\n signal = false,\n fields = array(cmp.field).map(check),\n orders = array(cmp.order).map(check);\n\n if (stable) {\n fields.push(tupleidRef);\n }\n\n return signal\n ? ref(this.add(Compare({fields: fields, orders: orders})))\n : compareRef(fields, orders);\n};\n\nprototype.keyRef = function(fields, flat) {\n function check(_) {\n if (isSignal(_)) {\n signal = true;\n return ref(sig[_.signal]);\n } else {\n return _;\n }\n }\n\n var sig = this.signals,\n signal = false;\n fields = array(fields).map(check);\n\n return signal\n ? ref(this.add(Key({fields: fields, flat: flat})))\n : keyRef(fields, flat);\n};\n\nprototype.sortRef = function(sort) {\n if (!sort) return sort;\n\n // including id ensures stable sorting\n var a = [aggrField(sort.op, sort.field), tupleidRef],\n o = sort.order || Ascending;\n\n return o.signal\n ? ref(this.add(Compare({\n fields: a,\n orders: [o = this.signalRef(o.signal), o]\n })))\n : compareRef(a, [o, o]);\n};\n\n// ----\n\nprototype.event = function(source, type) {\n var key = source + ':' + type;\n if (!this.events[key]) {\n var id = this.id();\n this.streams.push({\n id: id,\n source: source,\n type: type\n });\n this.events[key] = id;\n }\n return this.events[key];\n};\n\n// ----\n\nprototype.addSignal = function(name, value) {\n if (this.signals.hasOwnProperty(name)) {\n error('Duplicate signal name: ' + stringValue(name));\n }\n var op = value instanceof Entry ? value : this.add(operator(value));\n return this.signals[name] = op;\n};\n\nprototype.getSignal = function(name) {\n if (!this.signals[name]) {\n error('Unrecognized signal name: ' + stringValue(name));\n }\n return this.signals[name];\n};\n\nprototype.signalRef = function(s) {\n if (this.signals[s]) {\n return ref(this.signals[s]);\n } else if (!this.lambdas.hasOwnProperty(s)) {\n this.lambdas[s] = this.add(operator(null));\n }\n return ref(this.lambdas[s]);\n};\n\nprototype.parseLambdas = function() {\n var code = Object.keys(this.lambdas);\n for (var i=0, n=code.length; i 0 ? ',' : '')\n + (isObject(value)\n ? (value.signal || propertyLambda(value))\n : stringValue(value));\n }\n return code + ']';\n}\n\nfunction objectLambda(obj) {\n var code = '{',\n i = 0,\n key, value;\n\n for (key in obj) {\n value = obj[key];\n code += (++i > 1 ? ',' : '')\n + stringValue(key) + ':'\n + (isObject(value)\n ? (value.signal || propertyLambda(value))\n : stringValue(value));\n }\n return code + '}';\n}\n\nprototype.exprRef = function(code, name) {\n var params = {expr: parseExpression(code, this)};\n if (name) params.expr.$name = name;\n return ref(this.add(Expression(params)));\n}\n\nprototype.addBinding = function(name, bind) {\n if (!this.bindings) {\n error('Nested signals do not support binding: ' + stringValue(name));\n }\n this.bindings.push(extend({signal: name}, bind));\n};\n\n// ----\n\nprototype.addScaleProj = function(name, transform) {\n if (this.scales.hasOwnProperty(name)) {\n error('Duplicate scale or projection name: ' + stringValue(name));\n }\n this.scales[name] = this.add(transform);\n};\n\nprototype.addScale = function(name, params) {\n this.addScaleProj(name, Scale(params));\n};\n\nprototype.addProjection = function(name, params) {\n this.addScaleProj(name, Projection(params));\n};\n\nprototype.getScale = function(name) {\n if (!this.scales[name]) {\n error('Unrecognized scale name: ' + stringValue(name));\n }\n return this.scales[name];\n};\n\nprototype.projectionRef =\nprototype.scaleRef = function(name) {\n return ref(this.getScale(name));\n};\n\nprototype.projectionType =\nprototype.scaleType = function(name) {\n return this.getScale(name).params.type;\n};\n\n// ----\n\nprototype.addData = function(name, dataScope) {\n if (this.data.hasOwnProperty(name)) {\n error('Duplicate data set name: ' + stringValue(name));\n }\n return (this.data[name] = dataScope);\n};\n\nprototype.getData = function(name) {\n if (!this.data[name]) {\n error('Undefined data set name: ' + stringValue(name));\n }\n return this.data[name];\n};\n\nprototype.addDataPipeline = function(name, entries) {\n if (this.data.hasOwnProperty(name)) {\n error('Duplicate data set name: ' + stringValue(name));\n }\n return this.addData(name, DataScope.fromEntries(this, entries));\n};\n","// -- Transforms -----\n\nimport {extend} from 'vega-util';\nimport {transforms} from 'vega-dataflow';\nimport * as tx from 'vega-transforms';\nimport * as vtx from 'vega-view-transforms';\nimport * as encode from 'vega-encode';\nimport * as geo from 'vega-geo';\nimport * as force from 'vega-force';\nimport * as tree from 'vega-hierarchy';\nimport * as voronoi from 'vega-voronoi';\nimport * as wordcloud from 'vega-wordcloud';\nimport * as xf from 'vega-crossfilter';\nextend(transforms, tx, vtx, encode, geo, force, tree, voronoi, wordcloud, xf);\n\n\n// -- Exports -----\n\nexport {\n version\n} from './package.json';\n\nexport * from 'vega-statistics';\n\nexport * from 'vega-util';\n\nexport * from 'vega-loader';\n\nexport * from 'vega-scenegraph';\n\nexport {\n Dataflow,\n EventStream,\n Parameters,\n Pulse,\n MultiPulse,\n Operator,\n Transform,\n changeset,\n ingest,\n isTuple,\n definition,\n transform,\n transforms,\n tupleid\n} from 'vega-dataflow';\n\nexport {\n scale,\n scheme,\n interpolate,\n interpolateColors,\n interpolateRange,\n timeInterval,\n quantizeInterpolator\n} from 'vega-scale';\n\nexport {\n projection\n} from 'vega-projection';\n\nexport {\n View\n} from 'vega-view';\n\nexport {\n expressionFunction,\n formatLocale,\n timeFormatLocale\n} from 'vega-functions';\n\nexport {\n parse\n} from 'vega-parser';\n\nexport {\n parse as runtime,\n context as runtimeContext\n} from 'vega-runtime';\n","import { extent } from \"d3-array\";\nimport { inferTypes } from \"vega\";\nexport class Data {\n static fromArray(arr) {\n const fields = getFieldsFromArr(arr);\n const inferredTypes = inferTypes(arr, fields);\n const schema = fields.reduce((schema, f) => {\n const descriptor = {\n type: inferredTypes[f],\n cardinality: getCardinalityFromArr(arr, f)\n };\n if (descriptor.type !== FieldType.STRING &&\n descriptor.type !== FieldType.BOOLEAN) {\n descriptor[\"extent\"] = extent(arr, d => d[f]);\n }\n schema[f] = descriptor;\n return schema;\n }, {});\n const numRows = arr.length;\n let asp = [Data.getNumRowsDeclaration(numRows)];\n asp = fields.reduce((asp, f) => {\n asp.push(Data.getFieldDeclaration(f, schema[f].type));\n asp.push(Data.getCardinalityDeclaration(f, schema[f].cardinality));\n // TODO: figure out how to handle non ints\n if (schema[f].extent && schema[f].type === FieldType.INTEGER) {\n asp.push(Data.getExtentDeclaration(f, schema[f].extent[0], schema[f].extent[1]));\n }\n return asp;\n }, asp);\n return {\n fields,\n schema,\n numRows,\n asp: asp.join(\"\\n\"),\n data: arr\n };\n }\n static getNumRowsDeclaration(numRows) {\n return `num_rows(${numRows}).`;\n }\n static getFieldDeclaration(fieldName, fieldType) {\n return `fieldtype(${cleanFieldName(fieldName)},${fieldType}).`;\n }\n static getCardinalityDeclaration(fieldName, cardinality) {\n return `cardinality(${cleanFieldName(fieldName)},${cardinality}).`;\n }\n static getExtentDeclaration(fieldName, min, max) {\n if (!Number.isInteger(min) || !Number.isInteger(max)) {\n throw new Error(`Extent is yet supported for floats: ${min} ${max}`);\n }\n return `extent(${cleanFieldName(fieldName)},${min},${max}).`;\n }\n}\nfunction cleanFieldName(fieldName) {\n return `\"${fieldName}\"`;\n}\nfunction getFieldsFromArr(arr) {\n if (!arr) {\n return [];\n }\n return Object.keys(arr[0]);\n}\nfunction getCardinalityFromArr(arr, field) {\n const unique = arr.reduce((set, d) => {\n set.add(d[field]);\n return set;\n }, new Set());\n return unique.size;\n}\nexport class FieldType {\n}\nFieldType.STRING = \"string\";\nFieldType.BOOLEAN = \"boolean\";\nFieldType.INTEGER = \"integer\";\nFieldType.NUMBER = \"number\";\nFieldType.DATE = \"date\";\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVVsQyxNQUFNLE9BQU8sSUFBSTtJQUNmLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBUTtRQUN2QixNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTlDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekMsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO2dCQUN0QixXQUFXLEVBQUUscUJBQXFCLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQzthQUMzQyxDQUFDO1lBRUYsSUFDRSxVQUFVLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxNQUFNO2dCQUNwQyxVQUFVLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxPQUFPLEVBQ3JDO2dCQUNBLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDL0M7WUFFRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDO1lBRXZCLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVQLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFFM0IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENB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","export function doesMatchRegex(s, regex) {\n const match = s.match(regex);\n return !!match;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxjQUFjLENBQUMsQ0FBUyxFQUFFLEtBQWE7SUFDckQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDakIsQ0FBQyJ9","import { doesMatchRegex } from './util';\nexport class Constraint {\n static isHardConstraint(constraint) {\n return constraint.type === Constraint.HARD_TYPE;\n }\n static isSoftConstraint(constraint) {\n return constraint.type === Constraint.SOFT_TYPE;\n }\n static getUniqueName(constraint) {\n return `${constraint.type}-${constraint.subtype}-${constraint.name}`;\n }\n static fromPrefAsp(asp) {\n const matches = doesMatchRegex(asp, PREF_ASP_REGEX);\n if (!matches) {\n throw new Error(`ASP (${asp}) does not match constraint regex.`);\n }\n const [fullMatch, description, code, type, subtype, name, view, parameters,] = PREF_ASP_REGEX.exec(asp);\n const definitions = code\n .trim()\n .split('\\n')\n .map(line => {\n const [fullMatch, definition] = PREF_DEFINITION_REGEX.exec(line);\n return definition;\n });\n return {\n subtype,\n name,\n view,\n parameters,\n description,\n definitions,\n type: type,\n };\n }\n static toPrefAsp(c) {\n const description = `% @constraint ${c.description}`;\n const head = `${c.type}(${c.subtype},${c.name},${c.view},${c.parameters})`;\n const code = c.definitions\n .map(def => {\n return `${head} :- ${def}`;\n })\n .join('\\n')\n .trim();\n return `${description}\\n${code}`;\n }\n}\nConstraint.HARD_TYPE = 'hard';\nConstraint.SOFT_TYPE = 'soft';\nconst PREF_ASP_REGEX = /%\\s*@constraint (.*)\\n((?:(hard|soft)\\((\\w+),(\\w+),(\\w+),(\\w+)\\).*\\n?)+)/;\nconst PREF_DEFINITION_REGEX = /:-\\s*(.*)/;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RyYWludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC9jb25zdHJhaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFrQnhDLE1BQU0sT0FBTyxVQUFVO0lBSXJCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUE0QjtRQUNsRCxPQUFPLFVBQVUsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLFNBQVMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFVBQTRCO1FBQ2xELE9BQU8sVUFBVSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsU0FBUyxDQUFDO0lBQ2xELENBQUM7SUFFRCxNQUFNLENBQUMsYUFBYSxDQUFDLFVBQTRCO1FBQy9DLE9BQU8sR0FBRyxVQUFVLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQVc7UUFDNUIsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLEdBQUcsb0NBQW9DLENBQUMsQ0FBQztTQUNsRTtRQUVELE1BQU0sQ0FDSixTQUFTLEVBQ1QsV0FBVyxFQUNYLElBQUksRUFDSixJQUFJLEVBQ0osT0FBTyxFQUNQLElBQUksRUFDSixJQUFJLEVBQ0osVUFBVSxFQUNYLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU3QixNQUFNLFdBQVcsR0FBRyxJQUFJO2FBQ3JCLElBQUksRUFBRTthQUNOLEtBQUssQ0FBQyxJQUFJLENBQUM7YUFDWCxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDVixNQUFNLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqRSxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztRQUVMLE9BQU87WUFDTCxPQUFPO1lBQ1AsSUFBSTtZQUNKLElBQUk7WUFDSixVQUFVO1lBQ1YsV0FBVztZQUNYLFdBQVc7WUFDWCxJQUFJLEVBQUUsSUFBc0I7U0FDN0IsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLENBQW1CO1FBQ2xDLE1BQU0sV0FBVyxHQUFHLGlCQUFpQixDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQztRQUMzRSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVzthQUN2QixHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDVCxPQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxJQUFJLENBQUM7YUFDVixJQUFJLEVBQUUsQ0FBQztRQUVWLE9BQU8sR0FBRyxXQUFXLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDbkMsQ0FBQzs7QUE5RE0sb0JBQVMsR0FBVyxNQUFNLENBQUM7QUFDM0Isb0JBQVMsR0FBVyxNQUFNLENBQUM7QUFrRXBDLE1BQU0sY0FBYyxHQUFHLDBFQUEwRSxDQUFDO0FBQ2xHLE1BQU0scUJBQXFCLEdBQUcsV0FBVyxDQUFDIn0=","import { Constraint, } from './constraint';\nimport { doesMatchRegex } from './util';\nexport class ConstraintDictionary {\n static isSoftConstraintDictionary(dict) {\n if (Object.entries(dict).length === 0) {\n return false;\n }\n const [firstName, firstConstraint] = Object.entries(dict)[0];\n return Constraint.isSoftConstraint(firstConstraint);\n }\n static isHardConstraintDictionary(dict) {\n if (Object.entries(dict).length === 0) {\n return false;\n }\n const [firstName, firstConstraint] = Object.entries(dict)[0];\n return Constraint.isHardConstraint(firstConstraint);\n }\n static fromAsp(prefAsp, weightAsp) {\n const prefMatches = doesMatchRegex(prefAsp, PREF_REGEX);\n let weightDictionary;\n if (!!weightAsp) {\n const weightMatches = doesMatchRegex(weightAsp, WEIGHT_REGEX);\n if (!weightMatches) {\n throw new Error(`Weight ASP: ${weightAsp} does not match weight regex.`);\n }\n const singleWeightAsps = weightAsp.match(WEIGHT_REGEX);\n weightDictionary = singleWeightAsps.reduce((dict, asp) => {\n const [fullMatch, subtype, name, weight] = WEIGHT_REGEX.exec(asp);\n WEIGHT_REGEX.lastIndex = 0;\n const uniqueName = `soft-${subtype}-${name}`;\n dict[uniqueName] = +weight;\n return dict;\n }, {});\n }\n if (!prefMatches) {\n throw new Error(`Pref ASP: ${prefMatches} does not match pref regex.`);\n }\n const singlePrefAsps = prefAsp.match(PREF_REGEX);\n const result = singlePrefAsps.reduce((dict, asp) => {\n const constraint = Constraint.fromPrefAsp(asp);\n const uniqueName = Constraint.getUniqueName(constraint);\n if (!!weightDictionary) {\n constraint.weight = weightDictionary[uniqueName];\n }\n dict[uniqueName] = constraint;\n return dict;\n }, {});\n return result;\n }\n}\nconst PREF_REGEX = /%\\s*@constraint(?:(?:.+)\\n?)+/g;\nconst WEIGHT_REGEX = /soft_weight\\((\\w+),(\\w+),(\\d+)\\).*/g;\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RyYWludC1kaWN0aW9uYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL2NvbnN0cmFpbnQtZGljdGlvbmFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxHQUlYLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFNeEMsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixNQUFNLENBQUMsMEJBQTBCLENBQy9CLElBQWdDO1FBRWhDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3JDLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxNQUFNLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0QsT0FBTyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELE1BQU0sQ0FBQywwQkFBMEIsQ0FDL0IsSUFBZ0M7UUFFaEMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDckMsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE1BQU0sQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RCxPQUFPLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFlLEVBQUUsU0FBa0I7UUFDaEQsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUV4RCxJQUFJLGdCQUFnQixDQUFDO1FBQ3JCLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRTtZQUNmLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLFNBQVMsK0JBQStCLENBQUMsQ0FBQzthQUMxRTtZQUVELE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN2RCxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQ3hDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUNaLE1BQU0sQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNsRSxZQUFZLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztnQkFFM0IsTUFBTSxVQUFVLEdBQUcsUUFBUSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztnQkFFM0IsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDLEVBQ0QsRUFBUyxDQUNWLENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLFdBQVcsNkJBQTZCLENBQUMsQ0FBQztTQUN4RTtRQUVELE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FDbEMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDWixNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFeEQsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3JCLFVBQW1DLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQzVFO1lBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFVBQVUsQ0FBQztZQUM5QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsRUFDRCxFQUFnQyxDQUNqQyxDQUFDO1FBRUYsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGO0FBRUQsTUFBTSxVQUFVLEdBQUcsZ0NBQWdDLENBQUM7QUFDcEQsTUFBTSxZQUFZLEdBQUcscUNBQXFDLENBQUMifQ==","import { doesMatchRegex } from \"./util\";\nexport class Facts {\n static toVegaLiteSpecDictionary(facts) {\n const cleanedFacts = facts.map(fact => {\n const cleaned = fact.replace(/\\\"/g, \"\");\n return cleaned;\n });\n return facts2vl(cleanedFacts);\n }\n static toViews(facts) {\n return facts2views(facts);\n }\n static getHardViolations(facts) {\n return facts.filter(f => doesMatchRegex(f, /hard\\(.*/));\n }\n static getSoftViolations(facts) {\n return facts.filter(f => doesMatchRegex(f, /soft\\(.*/));\n }\n static getViewFacts(facts) {\n return facts.filter(f => doesMatchRegex(f, /view_fact\\(.*/));\n }\n}\nconst VIEW_REGEX_CAPTURE = /view\\((.*)\\)/;\nconst FACT_REGEX = /(\\w+)\\(([\\w\\.\\/]+)(,([\\w\\.]+))?(,([\\w\\.]+))?\\)/;\nfunction facts2vl(facts) {\n const views = facts2views(facts);\n const result = views.reduce((dict, v) => {\n dict[v] = facts2vl_single(facts, v);\n return dict;\n }, {});\n return result;\n}\nfunction facts2views(facts) {\n const views = facts\n .filter(fact => {\n return doesMatchRegex(fact, VIEW_REGEX_CAPTURE);\n })\n .map(fact => {\n const extract = VIEW_REGEX_CAPTURE.exec(fact);\n if (extract) {\n const [_, name] = extract;\n return name;\n }\n throw new Error(`Invalid view statement: ${fact}.`);\n });\n return views;\n}\nfunction facts2vl_single(facts, view) {\n let mark;\n const encodings = {};\n for (const value of facts) {\n const extract = FACT_REGEX.exec(value);\n if (!extract) {\n continue;\n }\n const [_, predicate, viz, __, first, ___, second] = extract;\n if (viz !== view) {\n continue;\n }\n if (predicate === \"view\") {\n continue;\n }\n switch (predicate) {\n case \"mark\":\n mark = first;\n break;\n case \"field\":\n case \"type\":\n case \"channel\":\n case \"scale\":\n case \"bin\":\n case \"aggregate\":\n case \"stack\":\n if (!encodings[first]) {\n encodings[first] = {};\n }\n encodings[first][predicate] = second;\n }\n }\n const encoding = {};\n for (const e of Object.keys(encodings)) {\n const enc = encodings[e];\n const scale = {\n ...(enc.scale === \"log\" ? { type: \"log\" } : {}),\n ...(enc.scale === \"zero\" ? { zero: true } : {})\n };\n const insert = {\n type: enc.type,\n ...(enc.aggregate ? { aggregate: enc.aggregate } : {}),\n ...(enc.field ? { field: enc.field } : {}),\n ...(enc.stack ? { stack: enc.stack } : {}),\n ...(enc.bin ? { bin: JSON.parse(enc.bin) } : {}),\n ...(enc.scale ? { scale } : {})\n };\n if (enc.aggregate) {\n encoding;\n }\n encoding[enc.channel] = insert;\n }\n const spec = {\n mark,\n encoding\n };\n return spec;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvZmFjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQU14QyxNQUFNLE9BQU8sS0FBSztJQUNoQixNQUFNLENBQUMsd0JBQXdCLENBQzdCLEtBQWtCO1FBRWxCLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDcEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDeEMsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFrQjtRQUMvQixPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEtBQWtCO1FBQ3pDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEtBQWtCO1FBQ3pDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFrQjtRQUNwQyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztDQUNG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","import { Facts } from \"./facts\";\nexport class Witness {\n static toVegaLiteSpecDictionary(witness) {\n return Facts.toVegaLiteSpecDictionary(witness.facts);\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0bmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC93aXRuZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQTZDLE1BQU0sU0FBUyxDQUFDO0FBTzNFLE1BQU0sT0FBTyxPQUFPO0lBQ2xCLE1BQU0sQ0FBQyx3QkFBd0IsQ0FDN0IsT0FBc0I7UUFFdEIsT0FBTyxLQUFLLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELENBQUM7Q0FDRiJ9","import { Witness } from \"./witness\";\nexport class Result {\n static toWitnesses(result) {\n return (result.Call || []).reduce((arr, el) => {\n el.Witnesses.forEach((d, i) => {\n const facts = d.Value; // add line terminator period.\n let costs;\n if (result.Models.Costs) {\n costs = result.Models.Costs[i];\n }\n arr.push({\n costs,\n facts\n });\n });\n return arr;\n }, []);\n }\n static getBestVegaLiteSpecDictionary(result) {\n const witnesses = Result.toWitnesses(result);\n return Witness.toVegaLiteSpecDictionary(witnesses[0]);\n }\n static isSat(result) {\n return result.Result === \"OPTIMUM FOUND\" || result.Result === \"SATISFIABLE\";\n }\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdWx0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL3Jlc3VsdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsT0FBTyxFQUFpQixNQUFNLFdBQVcsQ0FBQztBQUluRCxNQUFNLE9BQU8sTUFBTTtJQUNqQixNQUFNLENBQUMsV0FBVyxDQUFDLE1BQW9CO1FBQ3JDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQVUsRUFBRSxFQUFPLEVBQUUsRUFBRTtZQUN4RCxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxDQUFTLEVBQUUsRUFBRTtnQkFDekMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLDhCQUE4QjtnQkFFckQsSUFBSSxLQUFLLENBQUM7Z0JBRVYsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtvQkFDdkIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNoQztnQkFFRCxHQUFHLENBQUMsSUFBSSxDQUFDO29CQUNQLEtBQUs7b0JBQ0wsS0FBSztpQkFDTixDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQUVELE1BQU0sQ0FBQyw2QkFBNkIsQ0FDbEMsTUFBb0I7UUFFcEIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QyxPQUFPLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFvQjtRQUMvQixPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssZUFBZSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssYUFBYSxDQUFDO0lBQzlFLENBQUM7Q0FDRiJ9","import { Facts } from \"./model\";\nimport { ConstraintDictionary } from \"./model/constraint-dictionary\";\nimport { Result } from \"./model/result\";\nconst tmp = require(\"tmp\");\nconst fs = require(\"fs\");\nconst path = require(\"path\");\nconst { spawnSync } = require(\"child_process\");\ntmp.setGracefulCleanup();\nexport const DEFAULT_OPTIONS = {\n strictHard: true,\n generate: true,\n generateExtraEncodings: true,\n optimize: true,\n generateData: false\n};\nexport class Draco {\n static run(program, options, files) {\n let resolvedFiles = files ? files : [];\n resolvedFiles = resolvedFiles.concat(getFilesFromOptions(options));\n const tmpObj = tmp.fileSync({ postfix: \".lp\" });\n if (program) {\n fs.writeFileSync(tmpObj.name, program);\n resolvedFiles = resolvedFiles.concat([tmpObj.name]);\n }\n const opt = [];\n if (options) {\n if (options.models !== undefined) {\n opt.push(`--models=${options.models}`);\n }\n if (options.randomFreq !== undefined) {\n // opt.push(`--sign-def=3`);\n opt.push(`--rand-freq=${options.randomFreq}`);\n }\n if (options.randomSeed !== undefined) {\n opt.push(`--seed=${options.randomSeed}`);\n }\n }\n const out = runClingoSync(resolvedFiles, opt);\n const result = JSON.parse(out.output[1]);\n return result;\n }\n static runDebug(program, options, files) {\n const result = Draco.run(program, { strictHard: false }, files);\n if (!Result.isSat(result)) {\n return [];\n }\n const witness = Result.toWitnesses(result)[0];\n return Facts.getHardViolations(witness.facts);\n }\n static getProgram(data, query) {\n return `${data.asp}\n${query}`;\n }\n static getSoftConstraints() {\n const softDir = path.resolve(__dirname, \"../model/view/soft\");\n const subtypeDirs = fs\n .readdirSync(softDir)\n .filter(f => fs.statSync(path.join(softDir, f)).isDirectory());\n const result = subtypeDirs.reduce((dict, dir) => {\n const prefFile = path.resolve(softDir, dir, \"pref.lp\");\n const prefContents = fs.readFileSync(prefFile, \"utf8\");\n const weightFile = path.resolve(softDir, dir, \"weight.lp\");\n const weightContents = fs.readFileSync(weightFile, \"utf8\");\n const constraints = ConstraintDictionary.fromAsp(prefContents, weightContents);\n return {\n ...dict,\n ...constraints\n };\n }, {});\n return result;\n }\n}\nfunction runClingoSync(files, options) {\n return spawnSync(\"clingo\", [\"--outf=2\", \"--quiet=1,2,2\", ...options, ...files], {\n encoding: \"utf-8\"\n });\n}\nfunction resolvePathToModelProgram(file) {\n return path.resolve(__dirname, \"../model/program\", file);\n}\nfunction resolvePathToModelView(file) {\n return path.resolve(__dirname, \"../model/view\", file);\n}\nfunction getFilesFromOptions(options) {\n const result = [];\n const resolvedOptions = options\n ? Object.assign(Object.assign({}, DEFAULT_OPTIONS), options)\n : DEFAULT_OPTIONS;\n const { generate, generateExtraEncodings, strictHard, optimize, generateData } = resolvedOptions;\n if (generate && generateExtraEncodings && strictHard && optimize) {\n result.push(resolvePathToModelProgram(\"default.lp\"));\n }\n else {\n result.push(resolvePathToModelProgram(\"../data/index.lp\"));\n result.push(resolvePathToModelView(\"program/base.lp\"));\n if (generate) {\n result.push(resolvePathToModelView(\"generate.lp\"));\n }\n if (generateExtraEncodings) {\n result.push(resolvePathToModelView(\"generate_extra_encodings.lp\"));\n }\n if (strictHard) {\n result.push(resolvePathToModelView(\"hard_integrity.lp\"));\n }\n if (optimize) {\n result.push(resolvePathToModelView(\"optimize.lp\"));\n }\n }\n if (generateData) {\n result.push(resolvePathToModelProgram(\"../data/generate.lp\"));\n result.push(resolvePathToModelProgram(\"../data/grammar.lp\"));\n }\n return result;\n}\n//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhY28uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZHJhY28udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssRUFBZSxNQUFNLFNBQVMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsTUFBTSxFQUFnQixNQUFNLGdCQUFnQixDQUFDO0FBRXRELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzQixNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzdCLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDL0MsR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUM7QUFhekIsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzdCLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFFBQVEsRUFBRSxJQUFJO0lBQ2Qsc0JBQXNCLEVBQUUsSUFBSTtJQUM1QixRQUFRLEVBQUUsSUFBSTtJQUNkLFlBQVksRUFBRSxLQUFLO0NBQ3BCLENBQUM7QUFFRixNQUFNLE9BQU8sS0FBSztJQUNoQixNQUFNLENBQUMsR0FBRyxDQUNSLE9BQWdCLEVBQ2hCLE9BQXNCLEVBQ3RCLEtBQWdCO1FBRWhCLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFdkMsYUFBYSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUVuRSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFaEQs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"],"names":["stringValue","Error","log","prototype","isBoolean","isNumber","isDate","pad","dsv","identity","feature","interval","formatYear","day","timeMonday","timeDay","timeYear","timeSunday","timeThursday","parse","ingest","SKIP","ascendingComparator","ascending","ascendingBisect","bisector","gaussian","update","parseDist","extent","quantile","number","numbers","partition","None","get","max","min","epsilon","pi","tau","constant","x","pointX","y","pointY","line","point","curveMonotoneY","curveMonotoneX","curveStepAfter","curveStepBefore","noop","add","context","Empty","compare","pick","attr","bound","draw","path","measure","truncate","hit","arc","area","image","shape","symbol","trail","marks","tempBounds","translate","clip","base","object","emit","intersect","boundContext","boundItem","lookup","Linear","timeMillisecond","timeSecond","timeMinute","timeHour","timeWeek","timeMonth","utcMillisecond","utcSecond","utcWeek","bisectRight","extend","color","t0","t1","rgb","colorRgb","basis","value","zero","one","array","hsl","colorHsl","lab","colorLab","hcl","colorHcl","cubehelix","colorCubehelix","bisect","interpolate","interpolateValue","locale","format","defaultLocale","formatLocale","tickFormat","linear","symlog","pow","sqrt","threshold","quantize","durationSecond","durationMinute","durationHour","durationDay","durationWeek","date","transformer","copy","scale","$.scaleIdentity","$.scaleLinear","$.scaleLog","$.scalePow","$.scaleSqrt","$.scaleSymlog","$.scaleTime","$.scaleUtc","$.scaleSequential","$.scaleSequentialLog","$.scaleSequentialPow","$.scaleSequentialSqrt","$.scaleSequentialSymlog","$.scaleDiverging","$.scaleDivergingLog","$.scaleDivergingPow","$.scaleDivergingSqrt","$.scaleDivergingSymlog","$.scaleQuantile","$.scaleQuantize","$.scaleThreshold","$.scaleOrdinal","scaleBand","scalePoint","key","$.piecewise","getScale","$","continuous","discrete","numberFormat","filter","Symbols","Gradient","symbols","formats","binValues","range","scaleImplicit","sequence","getInterpolate","scheme","getScheme","e10","e5","e2","tickStep","slice","temp","epsilon2","halfPi","degrees","abs","atan2","cos","exp","sin","sign","acos","asin","stream","lambda0","lambda00","phi00","sum","merge","areaSum","areaRingSum","x0","y0","areaStream","areaRingStart","areaRingEnd","areaPointFirst","areaPoint","boundsStream","boundsPoint","X0","Y0","Z0","X1","Y1","Z1","X2","Y2","Z2","x00","y00","centroidStream","centroidPoint","centroidLineStart","centroidLineEnd","centroidRingStart","centroidRingEnd","lengthSum","circle","pathArea","pathMeasure","pathBounds","pathCentroid","resample","conicEqualArea","albers","scaleTranslate","create","projection","geoGraticule","set","fit","defaultX","defaultY","tree_addAll","tree_removeAll","find","Node","defaultSeparation","squarify","dice","Output","Params","offset","events","element","bind","Type","Identifier","children","source","index","peek","constants","Constants","functions","Functions","data","d3_format","timeFormat","d3_timeFormat","utcFormat","d3_utcFormat","timeParse","d3_timeParse","utcParse","d3_utcParse","time","bounds","DataPrefix","IndexPrefix","encode","getField","parseDataflow","Padding","getState","setState","formatValue","defaultTooltip","timer","initialize","transform","Aggregate","Collect","Compare","Expression","Field","Key","Projection","Proxy","Scale","Sieve","Left","Right","Center","Start","End","Skip","parseExpression","tree","voronoi"],"mappings":"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"} \ No newline at end of file diff --git a/build/data.d.ts b/build/data.d.ts deleted file mode 100644 index 4c79c51..0000000 --- a/build/data.d.ts +++ /dev/null @@ -1,30 +0,0 @@ -export interface DataObject { - data: any[]; - numRows: number; - fields: string[]; - schema: any; - asp: string; -} -export declare class Data { - static fromArray(arr: any): DataObject; - static getNumRowsDeclaration(numRows: number): string; - static getFieldDeclaration(fieldName: string, fieldType: FieldTypeType): string; - static getCardinalityDeclaration(fieldName: string, cardinality: number): string; - static getExtentDeclaration(fieldName: string, min: number, max: number): string; -} -export interface SchemaObject { - [field: string]: FieldDescriptorObject; -} -export interface FieldDescriptorObject { - type: FieldTypeType; - cardinality: number; - extent?: [number, number]; -} -export declare class FieldType { - static STRING: "string"; - static BOOLEAN: "boolean"; - static INTEGER: "integer"; - static NUMBER: "number"; - static DATE: "date"; -} -export declare type FieldTypeType = typeof FieldType.STRING | typeof FieldType.BOOLEAN | typeof FieldType.INTEGER | typeof FieldType.NUMBER | typeof FieldType.DATE; diff --git a/build/data.js b/build/data.js deleted file mode 100644 index 9b26bc2..0000000 --- a/build/data.js +++ /dev/null @@ -1,77 +0,0 @@ -import { extent } from "d3-array"; -import { inferTypes } from "vega"; -export class Data { - static fromArray(arr) { - const fields = getFieldsFromArr(arr); - const inferredTypes = inferTypes(arr, fields); - const schema = fields.reduce((schema, f) => { - const descriptor = { - type: inferredTypes[f], - cardinality: getCardinalityFromArr(arr, f) - }; - if (descriptor.type !== FieldType.STRING && - descriptor.type !== FieldType.BOOLEAN) { - descriptor["extent"] = extent(arr, d => d[f]); - } - schema[f] = descriptor; - return schema; - }, {}); - const numRows = arr.length; - let asp = [Data.getNumRowsDeclaration(numRows)]; - asp = fields.reduce((asp, f) => { - asp.push(Data.getFieldDeclaration(f, schema[f].type)); - asp.push(Data.getCardinalityDeclaration(f, schema[f].cardinality)); - // TODO: figure out how to handle non ints - if (schema[f].extent && schema[f].type === FieldType.INTEGER) { - asp.push(Data.getExtentDeclaration(f, schema[f].extent[0], schema[f].extent[1])); - } - return asp; - }, asp); - return { - fields, - schema, - numRows, - asp: asp.join("\n"), - data: arr - }; - } - static getNumRowsDeclaration(numRows) { - return `num_rows(${numRows}).`; - } - static getFieldDeclaration(fieldName, fieldType) { - return `fieldtype(${cleanFieldName(fieldName)},${fieldType}).`; - } - static getCardinalityDeclaration(fieldName, cardinality) { - return `cardinality(${cleanFieldName(fieldName)},${cardinality}).`; - } - static getExtentDeclaration(fieldName, min, max) { - if (!Number.isInteger(min) || !Number.isInteger(max)) { - throw new Error(`Extent is yet supported for floats: ${min} ${max}`); - } - return `extent(${cleanFieldName(fieldName)},${min},${max}).`; - } -} -function cleanFieldName(fieldName) { - return `"${fieldName}"`; -} -function getFieldsFromArr(arr) { - if (!arr) { - return []; - } - return Object.keys(arr[0]); -} -function getCardinalityFromArr(arr, field) { - const unique = arr.reduce((set, d) => { - set.add(d[field]); - return set; - }, new Set()); - return unique.size; -} -export class FieldType { -} -FieldType.STRING = "string"; -FieldType.BOOLEAN = "boolean"; -FieldType.INTEGER = "integer"; -FieldType.NUMBER = "number"; -FieldType.DATE = "date"; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVVsQyxNQUFNLE9BQU8sSUFBSTtJQUNmLE1BQU0sQ0FBQyxTQUFTLENBQUMsR0FBUTtRQUN2QixNQUFNLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNyQyxNQUFNLGFBQWEsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBRTlDLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDekMsTUFBTSxVQUFVLEdBQUc7Z0JBQ2pCLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQyxDQUFDO2dCQUN0QixXQUFXLEVBQUUscUJBQXFCLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQzthQUMzQyxDQUFDO1lBRUYsSUFDRSxVQUFVLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxNQUFNO2dCQUNwQyxVQUFVLENBQUMsSUFBSSxLQUFLLFNBQVMsQ0FBQyxPQUFPLEVBQ3JDO2dCQUNBLFVBQVUsQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7YUFDL0M7WUFFRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDO1lBRXZCLE9BQU8sTUFBTSxDQUFDO1FBQ2hCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVQLE1BQU0sT0FBTyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7UUFFM0IsSUFBSSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUMscUJBQXFCLENB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 \ No newline at end of file diff --git a/build/draco.d.ts b/build/draco.d.ts deleted file mode 100644 index 2f8f07e..0000000 --- a/build/draco.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { DataObject } from "./data"; -import { FactsObject } from "./model"; -import { ConstraintDictionary } from "./model/constraint-dictionary"; -import { ResultObject } from "./model/result"; -export interface DracoOptions { - strictHard?: boolean; - generate?: boolean; - generateExtraEncodings?: boolean; - optimize?: boolean; - generateData?: boolean; - models?: number; - randomFreq?: number; - randomSeed?: number; -} -export declare const DEFAULT_OPTIONS: { - strictHard: boolean; - generate: boolean; - generateExtraEncodings: boolean; - optimize: boolean; - generateData: boolean; -}; -export declare class Draco { - static run(program?: string, options?: DracoOptions, files?: string[]): ResultObject; - static runDebug(program?: string, options?: DracoOptions, files?: string[]): FactsObject; - static getProgram(data: DataObject, query: string): string; - static getSoftConstraints(): ConstraintDictionary; -} diff --git a/build/draco.js b/build/draco.js deleted file mode 100644 index 9c6a18c..0000000 --- a/build/draco.js +++ /dev/null @@ -1,115 +0,0 @@ -import { Facts } from "./model"; -import { ConstraintDictionary } from "./model/constraint-dictionary"; -import { Result } from "./model/result"; -const tmp = require("tmp"); -const fs = require("fs"); -const path = require("path"); -const { spawnSync } = require("child_process"); -tmp.setGracefulCleanup(); -export const DEFAULT_OPTIONS = { - strictHard: true, - generate: true, - generateExtraEncodings: true, - optimize: true, - generateData: false -}; -export class Draco { - static run(program, options, files) { - let resolvedFiles = files ? files : []; - resolvedFiles = resolvedFiles.concat(getFilesFromOptions(options)); - const tmpObj = tmp.fileSync({ postfix: ".lp" }); - if (program) { - fs.writeFileSync(tmpObj.name, program); - resolvedFiles = resolvedFiles.concat([tmpObj.name]); - } - const opt = []; - if (options) { - if (options.models !== undefined) { - opt.push(`--models=${options.models}`); - } - if (options.randomFreq !== undefined) { - // opt.push(`--sign-def=3`); - opt.push(`--rand-freq=${options.randomFreq}`); - } - if (options.randomSeed !== undefined) { - opt.push(`--seed=${options.randomSeed}`); - } - } - const out = runClingoSync(resolvedFiles, opt); - const result = JSON.parse(out.output[1]); - return result; - } - static runDebug(program, options, files) { - const result = Draco.run(program, { strictHard: false }, files); - if (!Result.isSat(result)) { - return []; - } - const witness = Result.toWitnesses(result)[0]; - return Facts.getHardViolations(witness.facts); - } - static getProgram(data, query) { - return `${data.asp} -${query}`; - } - static getSoftConstraints() { - const softDir = path.resolve(__dirname, "../model/view/soft"); - const subtypeDirs = fs - .readdirSync(softDir) - .filter(f => fs.statSync(path.join(softDir, f)).isDirectory()); - const result = subtypeDirs.reduce((dict, dir) => { - const prefFile = path.resolve(softDir, dir, "pref.lp"); - const prefContents = fs.readFileSync(prefFile, "utf8"); - const weightFile = path.resolve(softDir, dir, "weight.lp"); - const weightContents = fs.readFileSync(weightFile, "utf8"); - const constraints = ConstraintDictionary.fromAsp(prefContents, weightContents); - return { - ...dict, - ...constraints - }; - }, {}); - return result; - } -} -function runClingoSync(files, options) { - return spawnSync("clingo", ["--outf=2", "--quiet=1,2,2", ...options, ...files], { - encoding: "utf-8" - }); -} -function resolvePathToModelProgram(file) { - return path.resolve(__dirname, "../model/program", file); -} -function resolvePathToModelView(file) { - return path.resolve(__dirname, "../model/view", file); -} -function getFilesFromOptions(options) { - const result = []; - const resolvedOptions = options - ? Object.assign(Object.assign({}, DEFAULT_OPTIONS), options) - : DEFAULT_OPTIONS; - const { generate, generateExtraEncodings, strictHard, optimize, generateData } = resolvedOptions; - if (generate && generateExtraEncodings && strictHard && optimize) { - result.push(resolvePathToModelProgram("default.lp")); - } - else { - result.push(resolvePathToModelProgram("../data/index.lp")); - result.push(resolvePathToModelView("program/base.lp")); - if (generate) { - result.push(resolvePathToModelView("generate.lp")); - } - if (generateExtraEncodings) { - result.push(resolvePathToModelView("generate_extra_encodings.lp")); - } - if (strictHard) { - result.push(resolvePathToModelView("hard_integrity.lp")); - } - if (optimize) { - result.push(resolvePathToModelView("optimize.lp")); - } - } - if (generateData) { - result.push(resolvePathToModelProgram("../data/generate.lp")); - result.push(resolvePathToModelProgram("../data/grammar.lp")); - } - return result; -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJhY28uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZHJhY28udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssRUFBZSxNQUFNLFNBQVMsQ0FBQztBQUM3QyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNyRSxPQUFPLEVBQUUsTUFBTSxFQUFnQixNQUFNLGdCQUFnQixDQUFDO0FBRXRELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUMzQixNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDekIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQzdCLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDL0MsR0FBRyxDQUFDLGtCQUFrQixFQUFFLENBQUM7QUFhekIsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzdCLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLFFBQVEsRUFBRSxJQUFJO0lBQ2Qsc0JBQXNCLEVBQUUsSUFBSTtJQUM1QixRQUFRLEVBQUUsSUFBSTtJQUNkLFlBQVksRUFBRSxLQUFLO0NBQ3BCLENBQUM7QUFFRixNQUFNLE9BQU8sS0FBSztJQUNoQixNQUFNLENBQUMsR0FBRyxDQUNSLE9BQWdCLEVBQ2hCLE9BQXNCLEVBQ3RCLEtBQWdCO1FBRWhCLElBQUksYUFBYSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFdkMsYUFBYSxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUVuRSxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFaEQs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 \ No newline at end of file diff --git a/build/index.d.ts b/build/index.d.ts deleted file mode 100644 index 7ac3e63..0000000 --- a/build/index.d.ts +++ /dev/null @@ -1,3 +0,0 @@ -export * from "./data"; -export * from "./draco"; -export * from "./model"; diff --git a/build/index.js b/build/index.js deleted file mode 100644 index b0e447f..0000000 --- a/build/index.js +++ /dev/null @@ -1,4 +0,0 @@ -export * from "./data"; -export * from "./draco"; -export * from "./model"; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxTQUFTLENBQUMifQ== \ No newline at end of file diff --git a/build/model/constraint-dictionary.d.ts b/build/model/constraint-dictionary.d.ts deleted file mode 100644 index 207da8c..0000000 --- a/build/model/constraint-dictionary.d.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { ConstraintObject, HardConstraintObject, SoftConstraintObject } from './constraint'; -export declare type ConstraintDictionaryObject = { - [name: string]: ConstraintObject; -}; -export declare type SoftConstraintDictionaryObject = { - [name: string]: SoftConstraintObject; -}; -export declare type HardConstraintDictionaryObject = { - [name: string]: HardConstraintObject; -}; -export declare class ConstraintDictionary { - static isSoftConstraintDictionary(dict: ConstraintDictionaryObject): dict is SoftConstraintDictionaryObject; - static isHardConstraintDictionary(dict: ConstraintDictionaryObject): dict is SoftConstraintDictionaryObject; - static fromAsp(prefAsp: string, weightAsp?: string): ConstraintDictionaryObject; -} diff --git a/build/model/constraint-dictionary.js b/build/model/constraint-dictionary.js deleted file mode 100644 index 218e986..0000000 --- a/build/model/constraint-dictionary.js +++ /dev/null @@ -1,53 +0,0 @@ -import { Constraint, } from './constraint'; -import { doesMatchRegex } from './util'; -export class ConstraintDictionary { - static isSoftConstraintDictionary(dict) { - if (Object.entries(dict).length === 0) { - return false; - } - const [firstName, firstConstraint] = Object.entries(dict)[0]; - return Constraint.isSoftConstraint(firstConstraint); - } - static isHardConstraintDictionary(dict) { - if (Object.entries(dict).length === 0) { - return false; - } - const [firstName, firstConstraint] = Object.entries(dict)[0]; - return Constraint.isHardConstraint(firstConstraint); - } - static fromAsp(prefAsp, weightAsp) { - const prefMatches = doesMatchRegex(prefAsp, PREF_REGEX); - let weightDictionary; - if (!!weightAsp) { - const weightMatches = doesMatchRegex(weightAsp, WEIGHT_REGEX); - if (!weightMatches) { - throw new Error(`Weight ASP: ${weightAsp} does not match weight regex.`); - } - const singleWeightAsps = weightAsp.match(WEIGHT_REGEX); - weightDictionary = singleWeightAsps.reduce((dict, asp) => { - const [fullMatch, subtype, name, weight] = WEIGHT_REGEX.exec(asp); - WEIGHT_REGEX.lastIndex = 0; - const uniqueName = `soft-${subtype}-${name}`; - dict[uniqueName] = +weight; - return dict; - }, {}); - } - if (!prefMatches) { - throw new Error(`Pref ASP: ${prefMatches} does not match pref regex.`); - } - const singlePrefAsps = prefAsp.match(PREF_REGEX); - const result = singlePrefAsps.reduce((dict, asp) => { - const constraint = Constraint.fromPrefAsp(asp); - const uniqueName = Constraint.getUniqueName(constraint); - if (!!weightDictionary) { - constraint.weight = weightDictionary[uniqueName]; - } - dict[uniqueName] = constraint; - return dict; - }, {}); - return result; - } -} -const PREF_REGEX = /%\s*@constraint(?:(?:.+)\n?)+/g; -const WEIGHT_REGEX = /soft_weight\((\w+),(\w+),(\d+)\).*/g; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RyYWludC1kaWN0aW9uYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL2NvbnN0cmFpbnQtZGljdGlvbmFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsVUFBVSxHQUlYLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFNeEMsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixNQUFNLENBQUMsMEJBQTBCLENBQy9CLElBQWdDO1FBRWhDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3JDLE9BQU8sS0FBSyxDQUFDO1NBQ2Q7UUFFRCxNQUFNLENBQUMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDN0QsT0FBTyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDdEQsQ0FBQztJQUVELE1BQU0sQ0FBQywwQkFBMEIsQ0FDL0IsSUFBZ0M7UUFFaEMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7WUFDckMsT0FBTyxLQUFLLENBQUM7U0FDZDtRQUVELE1BQU0sQ0FBQyxTQUFTLEVBQUUsZUFBZSxDQUFDLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3RCxPQUFPLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUN0RCxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxPQUFlLEVBQUUsU0FBa0I7UUFDaEQsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsQ0FBQztRQUV4RCxJQUFJLGdCQUFnQixDQUFDO1FBQ3JCLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRTtZQUNmLE1BQU0sYUFBYSxHQUFHLGNBQWMsQ0FBQyxTQUFTLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLGFBQWEsRUFBRTtnQkFDbEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxlQUFlLFNBQVMsK0JBQStCLENBQUMsQ0FBQzthQUMxRTtZQUVELE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztZQUN2RCxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQ3hDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxFQUFFO2dCQUNaLE1BQU0sQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2dCQUNsRSxZQUFZLENBQUMsU0FBUyxHQUFHLENBQUMsQ0FBQztnQkFFM0IsTUFBTSxVQUFVLEdBQUcsUUFBUSxPQUFPLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQzdDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQztnQkFFM0IsT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDLEVBQ0QsRUFBUyxDQUNWLENBQUM7U0FDSDtRQUVELElBQUksQ0FBQyxXQUFXLEVBQUU7WUFDaEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxhQUFhLFdBQVcsNkJBQTZCLENBQUMsQ0FBQztTQUN4RTtRQUVELE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsTUFBTSxNQUFNLEdBQUcsY0FBYyxDQUFDLE1BQU0sQ0FDbEMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLEVBQUU7WUFDWixNQUFNLFVBQVUsR0FBRyxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQy9DLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDLENBQUM7WUFFeEQsSUFBSSxDQUFDLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQ3JCLFVBQW1DLENBQUMsTUFBTSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxDQUFDO2FBQzVFO1lBRUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFVBQVUsQ0FBQztZQUM5QixPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsRUFDRCxFQUFnQyxDQUNqQyxDQUFDO1FBRUYsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGO0FBRUQsTUFBTSxVQUFVLEdBQUcsZ0NBQWdDLENBQUM7QUFDcEQsTUFBTSxZQUFZLEdBQUcscUNBQXFDLENBQUMifQ== \ No newline at end of file diff --git a/build/model/constraint.d.ts b/build/model/constraint.d.ts deleted file mode 100644 index 8de3a7e..0000000 --- a/build/model/constraint.d.ts +++ /dev/null @@ -1,24 +0,0 @@ -export interface ConstraintObject { - type: ConstraintType; - subtype: string; - name: string; - view: string; - parameters: string; - description: string; - definitions: string[]; -} -export interface HardConstraintObject extends ConstraintObject { -} -export interface SoftConstraintObject extends ConstraintObject { - weight?: number; -} -export declare class Constraint { - static HARD_TYPE: 'hard'; - static SOFT_TYPE: 'soft'; - static isHardConstraint(constraint: ConstraintObject): constraint is HardConstraintObject; - static isSoftConstraint(constraint: ConstraintObject): constraint is SoftConstraintObject; - static getUniqueName(constraint: ConstraintObject): string; - static fromPrefAsp(asp: string): ConstraintObject; - static toPrefAsp(c: ConstraintObject): string; -} -export declare type ConstraintType = typeof Constraint.HARD_TYPE | typeof Constraint.SOFT_TYPE; diff --git a/build/model/constraint.js b/build/model/constraint.js deleted file mode 100644 index 0c11fc8..0000000 --- a/build/model/constraint.js +++ /dev/null @@ -1,51 +0,0 @@ -import { doesMatchRegex } from './util'; -export class Constraint { - static isHardConstraint(constraint) { - return constraint.type === Constraint.HARD_TYPE; - } - static isSoftConstraint(constraint) { - return constraint.type === Constraint.SOFT_TYPE; - } - static getUniqueName(constraint) { - return `${constraint.type}-${constraint.subtype}-${constraint.name}`; - } - static fromPrefAsp(asp) { - const matches = doesMatchRegex(asp, PREF_ASP_REGEX); - if (!matches) { - throw new Error(`ASP (${asp}) does not match constraint regex.`); - } - const [fullMatch, description, code, type, subtype, name, view, parameters,] = PREF_ASP_REGEX.exec(asp); - const definitions = code - .trim() - .split('\n') - .map(line => { - const [fullMatch, definition] = PREF_DEFINITION_REGEX.exec(line); - return definition; - }); - return { - subtype, - name, - view, - parameters, - description, - definitions, - type: type, - }; - } - static toPrefAsp(c) { - const description = `% @constraint ${c.description}`; - const head = `${c.type}(${c.subtype},${c.name},${c.view},${c.parameters})`; - const code = c.definitions - .map(def => { - return `${head} :- ${def}`; - }) - .join('\n') - .trim(); - return `${description}\n${code}`; - } -} -Constraint.HARD_TYPE = 'hard'; -Constraint.SOFT_TYPE = 'soft'; -const PREF_ASP_REGEX = /%\s*@constraint (.*)\n((?:(hard|soft)\((\w+),(\w+),(\w+),(\w+)\).*\n?)+)/; -const PREF_DEFINITION_REGEX = /:-\s*(.*)/; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RyYWludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC9jb25zdHJhaW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxRQUFRLENBQUM7QUFrQnhDLE1BQU0sT0FBTyxVQUFVO0lBSXJCLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxVQUE0QjtRQUNsRCxPQUFPLFVBQVUsQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLFNBQVMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFVBQTRCO1FBQ2xELE9BQU8sVUFBVSxDQUFDLElBQUksS0FBSyxVQUFVLENBQUMsU0FBUyxDQUFDO0lBQ2xELENBQUM7SUFFRCxNQUFNLENBQUMsYUFBYSxDQUFDLFVBQTRCO1FBQy9DLE9BQU8sR0FBRyxVQUFVLENBQUMsSUFBSSxJQUFJLFVBQVUsQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3ZFLENBQUM7SUFFRCxNQUFNLENBQUMsV0FBVyxDQUFDLEdBQVc7UUFDNUIsTUFBTSxPQUFPLEdBQUcsY0FBYyxDQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ1osTUFBTSxJQUFJLEtBQUssQ0FBQyxRQUFRLEdBQUcsb0NBQW9DLENBQUMsQ0FBQztTQUNsRTtRQUVELE1BQU0sQ0FDSixTQUFTLEVBQ1QsV0FBVyxFQUNYLElBQUksRUFDSixJQUFJLEVBQ0osT0FBTyxFQUNQLElBQUksRUFDSixJQUFJLEVBQ0osVUFBVSxFQUNYLEdBQUcsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUU3QixNQUFNLFdBQVcsR0FBRyxJQUFJO2FBQ3JCLElBQUksRUFBRTthQUNOLEtBQUssQ0FBQyxJQUFJLENBQUM7YUFDWCxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDVixNQUFNLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxHQUFHLHFCQUFxQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqRSxPQUFPLFVBQVUsQ0FBQztRQUNwQixDQUFDLENBQUMsQ0FBQztRQUVMLE9BQU87WUFDTCxPQUFPO1lBQ1AsSUFBSTtZQUNKLElBQUk7WUFDSixVQUFVO1lBQ1YsV0FBVztZQUNYLFdBQVc7WUFDWCxJQUFJLEVBQUUsSUFBc0I7U0FDN0IsQ0FBQztJQUNKLENBQUM7SUFFRCxNQUFNLENBQUMsU0FBUyxDQUFDLENBQW1CO1FBQ2xDLE1BQU0sV0FBVyxHQUFHLGlCQUFpQixDQUFDLENBQUMsV0FBVyxFQUFFLENBQUM7UUFDckQsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxVQUFVLEdBQUcsQ0FBQztRQUMzRSxNQUFNLElBQUksR0FBRyxDQUFDLENBQUMsV0FBVzthQUN2QixHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDVCxPQUFPLEdBQUcsSUFBSSxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQzdCLENBQUMsQ0FBQzthQUNELElBQUksQ0FBQyxJQUFJLENBQUM7YUFDVixJQUFJLEVBQUUsQ0FBQztRQUVWLE9BQU8sR0FBRyxXQUFXLEtBQUssSUFBSSxFQUFFLENBQUM7SUFDbkMsQ0FBQzs7QUE5RE0sb0JBQVMsR0FBVyxNQUFNLENBQUM7QUFDM0Isb0JBQVMsR0FBVyxNQUFNLENBQUM7QUFrRXBDLE1BQU0sY0FBYyxHQUFHLDBFQUEwRSxDQUFDO0FBQ2xHLE1BQU0scUJBQXFCLEdBQUcsV0FBVyxDQUFDIn0= \ No newline at end of file diff --git a/build/model/facts.d.ts b/build/model/facts.d.ts deleted file mode 100644 index 631ef55..0000000 --- a/build/model/facts.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { TopLevelUnitSpec } from "vega-lite/src/spec/unit"; -export declare type VegaLiteSpecDictionaryObject = { - [name: string]: TopLevelUnitSpec; -}; -export declare type FactsObject = string[]; -export declare class Facts { - static toVegaLiteSpecDictionary(facts: FactsObject): VegaLiteSpecDictionaryObject; - static toViews(facts: FactsObject): string[]; - static getHardViolations(facts: FactsObject): FactsObject; - static getSoftViolations(facts: FactsObject): FactsObject; - static getViewFacts(facts: FactsObject): FactsObject; -} diff --git a/build/model/facts.js b/build/model/facts.js deleted file mode 100644 index dd66069..0000000 --- a/build/model/facts.js +++ /dev/null @@ -1,106 +0,0 @@ -import { doesMatchRegex } from "./util"; -export class Facts { - static toVegaLiteSpecDictionary(facts) { - const cleanedFacts = facts.map(fact => { - const cleaned = fact.replace(/\"/g, ""); - return cleaned; - }); - return facts2vl(cleanedFacts); - } - static toViews(facts) { - return facts2views(facts); - } - static getHardViolations(facts) { - return facts.filter(f => doesMatchRegex(f, /hard\(.*/)); - } - static getSoftViolations(facts) { - return facts.filter(f => doesMatchRegex(f, /soft\(.*/)); - } - static getViewFacts(facts) { - return facts.filter(f => doesMatchRegex(f, /view_fact\(.*/)); - } -} -const VIEW_REGEX_CAPTURE = /view\((.*)\)/; -const FACT_REGEX = /(\w+)\(([\w\.\/]+)(,([\w\.]+))?(,([\w\.]+))?\)/; -function facts2vl(facts) { - const views = facts2views(facts); - const result = views.reduce((dict, v) => { - dict[v] = facts2vl_single(facts, v); - return dict; - }, {}); - return result; -} -function facts2views(facts) { - const views = facts - .filter(fact => { - return doesMatchRegex(fact, VIEW_REGEX_CAPTURE); - }) - .map(fact => { - const extract = VIEW_REGEX_CAPTURE.exec(fact); - if (extract) { - const [_, name] = extract; - return name; - } - throw new Error(`Invalid view statement: ${fact}.`); - }); - return views; -} -function facts2vl_single(facts, view) { - let mark; - const encodings = {}; - for (const value of facts) { - const extract = FACT_REGEX.exec(value); - if (!extract) { - continue; - } - const [_, predicate, viz, __, first, ___, second] = extract; - if (viz !== view) { - continue; - } - if (predicate === "view") { - continue; - } - switch (predicate) { - case "mark": - mark = first; - break; - case "field": - case "type": - case "channel": - case "scale": - case "bin": - case "aggregate": - case "stack": - if (!encodings[first]) { - encodings[first] = {}; - } - encodings[first][predicate] = second; - } - } - const encoding = {}; - for (const e of Object.keys(encodings)) { - const enc = encodings[e]; - const scale = { - ...(enc.scale === "log" ? { type: "log" } : {}), - ...(enc.scale === "zero" ? { zero: true } : {}) - }; - const insert = { - type: enc.type, - ...(enc.aggregate ? { aggregate: enc.aggregate } : {}), - ...(enc.field ? { field: enc.field } : {}), - ...(enc.stack ? { stack: enc.stack } : {}), - ...(enc.bin ? { bin: JSON.parse(enc.bin) } : {}), - ...(enc.scale ? { scale } : {}) - }; - if (enc.aggregate) { - encoding; - } - encoding[enc.channel] = insert; - } - const spec = { - mark, - encoding - }; - return spec; -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFjdHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvZmFjdHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFFBQVEsQ0FBQztBQU14QyxNQUFNLE9BQU8sS0FBSztJQUNoQixNQUFNLENBQUMsd0JBQXdCLENBQzdCLEtBQWtCO1FBRWxCLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDcEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDeEMsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRUQsTUFBTSxDQUFDLE9BQU8sQ0FBQyxLQUFrQjtRQUMvQixPQUFPLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEtBQWtCO1FBQ3pDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEtBQWtCO1FBQ3pDLE9BQU8sS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQztJQUMxRCxDQUFDO0lBRUQsTUFBTSxDQUFDLFlBQVksQ0FBQyxLQUFrQjtRQUNwQyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxFQUFFLGVBQWUsQ0FBQyxDQUFDLENBQUM7SUFDL0QsQ0FBQztDQUNG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 \ No newline at end of file diff --git a/build/model/index.d.ts b/build/model/index.d.ts deleted file mode 100644 index 099a260..0000000 --- a/build/model/index.d.ts +++ /dev/null @@ -1,5 +0,0 @@ -export * from './constraint'; -export * from './constraint-dictionary'; -export * from './facts'; -export * from './witness'; -export * from './result'; diff --git a/build/model/index.js b/build/model/index.js deleted file mode 100644 index 3249412..0000000 --- a/build/model/index.js +++ /dev/null @@ -1,6 +0,0 @@ -export * from './constraint'; -export * from './constraint-dictionary'; -export * from './facts'; -export * from './witness'; -export * from './result'; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbW9kZWwvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLFVBQVUsQ0FBQyJ9 \ No newline at end of file diff --git a/build/model/result.d.ts b/build/model/result.d.ts deleted file mode 100644 index a0f87cb..0000000 --- a/build/model/result.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { VegaLiteSpecDictionaryObject } from "./facts"; -import { WitnessObject } from "./witness"; -export declare type ResultObject = any; -export declare class Result { - static toWitnesses(result: ResultObject): WitnessObject[]; - static getBestVegaLiteSpecDictionary(result: ResultObject): VegaLiteSpecDictionaryObject; - static isSat(result: ResultObject): boolean; -} diff --git a/build/model/result.js b/build/model/result.js deleted file mode 100644 index a327ce0..0000000 --- a/build/model/result.js +++ /dev/null @@ -1,27 +0,0 @@ -import { Witness } from "./witness"; -export class Result { - static toWitnesses(result) { - return (result.Call || []).reduce((arr, el) => { - el.Witnesses.forEach((d, i) => { - const facts = d.Value; // add line terminator period. - let costs; - if (result.Models.Costs) { - costs = result.Models.Costs[i]; - } - arr.push({ - costs, - facts - }); - }); - return arr; - }, []); - } - static getBestVegaLiteSpecDictionary(result) { - const witnesses = Result.toWitnesses(result); - return Witness.toVegaLiteSpecDictionary(witnesses[0]); - } - static isSat(result) { - return result.Result === "OPTIMUM FOUND" || result.Result === "SATISFIABLE"; - } -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdWx0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21vZGVsL3Jlc3VsdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsT0FBTyxFQUFpQixNQUFNLFdBQVcsQ0FBQztBQUluRCxNQUFNLE9BQU8sTUFBTTtJQUNqQixNQUFNLENBQUMsV0FBVyxDQUFDLE1BQW9CO1FBQ3JDLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQVUsRUFBRSxFQUFPLEVBQUUsRUFBRTtZQUN4RCxFQUFFLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxDQUFTLEVBQUUsRUFBRTtnQkFDekMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLDhCQUE4QjtnQkFFckQsSUFBSSxLQUFLLENBQUM7Z0JBRVYsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRTtvQkFDdkIsS0FBSyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUNoQztnQkFFRCxHQUFHLENBQUMsSUFBSSxDQUFDO29CQUNQLEtBQUs7b0JBQ0wsS0FBSztpQkFDTixDQUFDLENBQUM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ1QsQ0FBQztJQUVELE1BQU0sQ0FBQyw2QkFBNkIsQ0FDbEMsTUFBb0I7UUFFcEIsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QyxPQUFPLE9BQU8sQ0FBQyx3QkFBd0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFvQjtRQUMvQixPQUFPLE1BQU0sQ0FBQyxNQUFNLEtBQUssZUFBZSxJQUFJLE1BQU0sQ0FBQyxNQUFNLEtBQUssYUFBYSxDQUFDO0lBQzlFLENBQUM7Q0FDRiJ9 \ No newline at end of file diff --git a/build/model/util.d.ts b/build/model/util.d.ts deleted file mode 100644 index e7076a5..0000000 --- a/build/model/util.d.ts +++ /dev/null @@ -1 +0,0 @@ -export declare function doesMatchRegex(s: string, regex: RegExp): boolean; diff --git a/build/model/util.js b/build/model/util.js deleted file mode 100644 index b86ca64..0000000 --- a/build/model/util.js +++ /dev/null @@ -1,5 +0,0 @@ -export function doesMatchRegex(s, regex) { - const match = s.match(regex); - return !!match; -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxjQUFjLENBQUMsQ0FBUyxFQUFFLEtBQWE7SUFDckQsTUFBTSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM3QixPQUFPLENBQUMsQ0FBQyxLQUFLLENBQUM7QUFDakIsQ0FBQyJ9 \ No newline at end of file diff --git a/build/model/witness.d.ts b/build/model/witness.d.ts deleted file mode 100644 index 0156e21..0000000 --- a/build/model/witness.d.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { FactsObject, VegaLiteSpecDictionaryObject } from "./facts"; -export interface WitnessObject { - costs?: number[]; - facts: FactsObject; -} -export declare class Witness { - static toVegaLiteSpecDictionary(witness: WitnessObject): VegaLiteSpecDictionaryObject; -} diff --git a/build/model/witness.js b/build/model/witness.js deleted file mode 100644 index 70dedf5..0000000 --- a/build/model/witness.js +++ /dev/null @@ -1,7 +0,0 @@ -import { Facts } from "./facts"; -export class Witness { - static toVegaLiteSpecDictionary(witness) { - return Facts.toVegaLiteSpecDictionary(witness.facts); - } -} -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0bmVzcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9tb2RlbC93aXRuZXNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxLQUFLLEVBQTZDLE1BQU0sU0FBUyxDQUFDO0FBTzNFLE1BQU0sT0FBTyxPQUFPO0lBQ2xCLE1BQU0sQ0FBQyx3QkFBd0IsQ0FDN0IsT0FBc0I7UUFFdEIsT0FBTyxLQUFLLENBQUMsd0JBQXdCLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3ZELENBQUM7Q0FDRiJ9 \ No newline at end of file From 57af58bcbea02868366a58ee21f73dfe69a06ce4 Mon Sep 17 00:00:00 2001 From: Halden Lin Date: Mon, 9 Sep 2019 02:19:14 -0700 Subject: [PATCH 16/25] Modify weights. --- asp/generate.lp | 3 +++ asp/soft.lp | 3 +++ asp/weights.lp | 5 +++-- 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/asp/generate.lp b/asp/generate.lp index 945234b..6b535de 100644 --- a/asp/generate.lp +++ b/asp/generate.lp @@ -11,6 +11,9 @@ obj_id(1..max_extra_encs). :- not encoding(V,ID), encoding(V,ID-1), obj_id(ID), obj_id(ID-1). +% don't add extra field +:- encoding(V,ID), obj_id(ID), field(V,ID,F). + % properties of encodings % channel and type have to be present diff --git a/asp/soft.lp b/asp/soft.lp index f8974a2..cef0497 100644 --- a/asp/soft.lp +++ b/asp/soft.lp @@ -40,6 +40,9 @@ soft(string_non_nominal,V,E) :- type(V,E,quantitative), field(V,E,F), fieldtype( % @constraint Numbers should not be nominal. soft(number_nominal,V,E) :- type(V,E,nominal), field(V,E,F), fieldtype(F,number). +% @constraint Numbers should not be ordinal with high cardinality. +soft(number_high_cardinality_ordinal,V,E) :- type(V,E,ordinal), field(V,E,F), fieldtype(F,number), enc_cardinality(V,E,C), C > 20. + % @constraint Binned quantitative field should not have too low cardinality. soft(bin_cardinality,V,E) :- type(V,E,quantitative), bin(V,E,_), enc_cardinality(V,E,C), C < 15. diff --git a/asp/weights.lp b/asp/weights.lp index eb5235e..ed248dd 100644 --- a/asp/weights.lp +++ b/asp/weights.lp @@ -14,13 +14,14 @@ #const count_twice_weight = 50. #const shape_cardinality_weight = 5. #const string_non_nominal_weight = 4. -#const number_nominal_weight = 10. +#const number_nominal_weight = 20. +#const number_high_cardinality_ordinal_weight = 20. #const bin_cardinality_weight = 5. #const quant_bin_weight = 1. #const agg_dim_weight = 2. #const only_discrete_weight = 30. #const multiple_non_pos_weight = 3. -#const non_positional_pref_weight = 10. +#const non_positional_pref_weight = 0. #const aggregate_group_by_raw_weight = 10. #const x_y_raw_weight = 1. #const log_weight = 1. From 8cf76b9bd4017626b9c127f4a6f6fddd8b8283a3 Mon Sep 17 00:00:00 2001 From: Halden Lin Date: Tue, 10 Sep 2019 18:22:57 -0700 Subject: [PATCH 17/25] Tune weights. --- .gitignore | 1 + asp/weights.lp | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index 6ec38dd..35855cd 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ node_modules package-lock.json test*.lp yarn-error.log +build diff --git a/asp/weights.lp b/asp/weights.lp index ed248dd..609a545 100644 --- a/asp/weights.lp +++ b/asp/weights.lp @@ -14,14 +14,14 @@ #const count_twice_weight = 50. #const shape_cardinality_weight = 5. #const string_non_nominal_weight = 4. -#const number_nominal_weight = 20. -#const number_high_cardinality_ordinal_weight = 20. +#const number_nominal_weight = 30. +#const number_high_cardinality_ordinal_weight = 30. #const bin_cardinality_weight = 5. #const quant_bin_weight = 1. #const agg_dim_weight = 2. #const only_discrete_weight = 30. #const multiple_non_pos_weight = 3. -#const non_positional_pref_weight = 0. +#const non_positional_pref_weight = 20. #const aggregate_group_by_raw_weight = 10. #const x_y_raw_weight = 1. #const log_weight = 1. From b2ea8fd9186a855fef1dadd88bf006ac61cabb49 Mon Sep 17 00:00:00 2001 From: Halden Lin Date: Thu, 12 Sep 2019 13:18:46 -0700 Subject: [PATCH 18/25] Fix compare and define. --- asp/compare.lp | 61 ++++++++++++++++++-------------------- asp/define.lp | 2 +- asp/optimize.lp | 2 +- asp/optimize_draco.lp | 2 +- asp/optimize_graphscape.lp | 2 +- asp/output.lp | 4 +-- asp/weights.lp | 6 ++-- 7 files changed, 38 insertions(+), 41 deletions(-) diff --git a/asp/compare.lp b/asp/compare.lp index 151e119..08bae32 100644 --- a/asp/compare.lp +++ b/asp/compare.lp @@ -1,6 +1,5 @@ %% FILE GENERATED BY graphscapeToAsp.js, DO NOT MODIFY %% comparable(V1,V2) :- visualization(V1), base(V1), visualization(V2), V1 != V2. - % MARK EDITS compare(edit_area_bar,V1,V2,area,bar) :- comparable(V1,V2), mark(V1,area), mark(V2,bar). compare(edit_area_bar,V1,V2,bar,area) :- comparable(V1,V2), mark(V1,bar), mark(V2,area). @@ -35,22 +34,22 @@ compare(edit_text_tick,V1,V2,tick,text) :- comparable(V1,V2), mark(V1,tick), mar % ENCODING EDITS -compare(edit_add_x,V1,V2,E2,F2) :- not compare(edit_add_x_count,V1,V2,E2,F2), comparable(V1,V2), channel(V2,E2,x), field(V2,E2,F2), not channel(V1,_,x), not field(V1,_,F2). -compare(edit_add_y,V1,V2,E2,F2) :- not compare(edit_add_y_count,V1,V2,E2,F2), comparable(V1,V2), channel(V2,E2,y), field(V2,E2,F2), not channel(V1,_,y), not field(V1,_,F2). -compare(edit_add_color,V1,V2,E2,F2) :- not compare(edit_add_color_count,V1,V2,E2,F2), comparable(V1,V2), channel(V2,E2,color), field(V2,E2,F2), not channel(V1,_,color), not field(V1,_,F2). -compare(edit_add_shape,V1,V2,E2,F2) :- not compare(edit_add_shape_count,V1,V2,E2,F2), comparable(V1,V2), channel(V2,E2,shape), field(V2,E2,F2), not channel(V1,_,shape), not field(V1,_,F2). -compare(edit_add_size,V1,V2,E2,F2) :- not compare(edit_add_size_count,V1,V2,E2,F2), comparable(V1,V2), channel(V2,E2,size), field(V2,E2,F2), not channel(V1,_,size), not field(V1,_,F2). -compare(edit_add_row,V1,V2,E2,F2) :- not compare(edit_add_row_count,V1,V2,E2,F2), comparable(V1,V2), channel(V2,E2,row), field(V2,E2,F2), not channel(V1,_,row), not field(V1,_,F2). -compare(edit_add_column,V1,V2,E2,F2) :- not compare(edit_add_column_count,V1,V2,E2,F2), comparable(V1,V2), channel(V2,E2,column), field(V2,E2,F2), not channel(V1,_,column), not field(V1,_,F2). -compare(edit_add_text,V1,V2,E2,F2) :- not compare(edit_add_text_count,V1,V2,E2,F2), comparable(V1,V2), channel(V2,E2,text), field(V2,E2,F2), not channel(V1,_,text), not field(V1,_,F2). -compare(edit_add_x_count,V1,V2,E2,F2) :- comparable(V1,V2), channel(V2,E2,x), field(V2,E2,F2), not channel(V1,_,x), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_add_y_count,V1,V2,E2,F2) :- comparable(V1,V2), channel(V2,E2,y), field(V2,E2,F2), not channel(V1,_,y), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_add_color_count,V1,V2,E2,F2) :- comparable(V1,V2), channel(V2,E2,color), field(V2,E2,F2), not channel(V1,_,color), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_add_shape_count,V1,V2,E2,F2) :- comparable(V1,V2), channel(V2,E2,shape), field(V2,E2,F2), not channel(V1,_,shape), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_add_size_count,V1,V2,E2,F2) :- comparable(V1,V2), channel(V2,E2,size), field(V2,E2,F2), not channel(V1,_,size), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_add_row_count,V1,V2,E2,F2) :- comparable(V1,V2), channel(V2,E2,row), field(V2,E2,F2), not channel(V1,_,row), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_add_column_count,V1,V2,E2,F2) :- comparable(V1,V2), channel(V2,E2,column), field(V2,E2,F2), not channel(V1,_,column), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_add_text_count,V1,V2,E2,F2) :- comparable(V1,V2), channel(V2,E2,text), field(V2,E2,F2), not channel(V1,_,text), not field(V1,_,F2), aggregate(V2,E2,count). +compare(edit_add_x,V1,V2,E2,F2) :- not compare(edit_add_x_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,x), field(V2,E2,F2), not channel(V1,_,x), not field(V1,_,F2). +compare(edit_add_y,V1,V2,E2,F2) :- not compare(edit_add_y_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,y), field(V2,E2,F2), not channel(V1,_,y), not field(V1,_,F2). +compare(edit_add_color,V1,V2,E2,F2) :- not compare(edit_add_color_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,color), field(V2,E2,F2), not channel(V1,_,color), not field(V1,_,F2). +compare(edit_add_shape,V1,V2,E2,F2) :- not compare(edit_add_shape_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,shape), field(V2,E2,F2), not channel(V1,_,shape), not field(V1,_,F2). +compare(edit_add_size,V1,V2,E2,F2) :- not compare(edit_add_size_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,size), field(V2,E2,F2), not channel(V1,_,size), not field(V1,_,F2). +compare(edit_add_row,V1,V2,E2,F2) :- not compare(edit_add_row_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,row), field(V2,E2,F2), not channel(V1,_,row), not field(V1,_,F2). +compare(edit_add_column,V1,V2,E2,F2) :- not compare(edit_add_column_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,column), field(V2,E2,F2), not channel(V1,_,column), not field(V1,_,F2). +compare(edit_add_text,V1,V2,E2,F2) :- not compare(edit_add_text_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,text), field(V2,E2,F2), not channel(V1,_,text), not field(V1,_,F2). +compare(edit_add_x_count,V1,V2,E2,count) :- comparable(V1,V2), channel(V2,E2,x), aggregate(V2,E2,count), not channel(V1,_,x). +compare(edit_add_y_count,V1,V2,E2,count) :- comparable(V1,V2), channel(V2,E2,y), aggregate(V2,E2,count), not channel(V1,_,y). +compare(edit_add_color_count,V1,V2,E2,count) :- comparable(V1,V2), channel(V2,E2,color), aggregate(V2,E2,count), not channel(V1,_,color). +compare(edit_add_shape_count,V1,V2,E2,count) :- comparable(V1,V2), channel(V2,E2,shape), aggregate(V2,E2,count), not channel(V1,_,shape). +compare(edit_add_size_count,V1,V2,E2,count) :- comparable(V1,V2), channel(V2,E2,size), aggregate(V2,E2,count), not channel(V1,_,size). +compare(edit_add_row_count,V1,V2,E2,count) :- comparable(V1,V2), channel(V2,E2,row), aggregate(V2,E2,count), not channel(V1,_,row). +compare(edit_add_column_count,V1,V2,E2,count) :- comparable(V1,V2), channel(V2,E2,column), aggregate(V2,E2,count), not channel(V1,_,column). +compare(edit_add_text_count,V1,V2,E2,count) :- comparable(V1,V2), channel(V2,E2,text), aggregate(V2,E2,count), not channel(V1,_,text). compare(edit_remove_x_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,x), field(V1,E1,F1), not channel(V2,_,x), not field(V2,_,F1), aggregate(V1,E1,count). compare(edit_remove_y_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,y), field(V1,E1,F1), not channel(V2,_,y), not field(V2,_,F1), aggregate(V1,E1,count). compare(edit_remove_color_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,color), field(V1,E1,F1), not channel(V2,_,color), not field(V2,_,F1), aggregate(V1,E1,count). @@ -59,14 +58,14 @@ compare(edit_remove_size_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1, compare(edit_remove_row_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,row), field(V1,E1,F1), not channel(V2,_,row), not field(V2,_,F1), aggregate(V1,E1,count). compare(edit_remove_column_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,column), field(V1,E1,F1), not channel(V2,_,column), not field(V2,_,F1), aggregate(V1,E1,count). compare(edit_remove_text_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,text), field(V1,E1,F1), not channel(V2,_,text), not field(V2,_,F1), aggregate(V1,E1,count). -compare(edit_remove_x,V1,V2,E1,F1) :- not compare(edit_remove_x_count,V1,V2,E1,F1), comparable(V1,V2), channel(V1,E1,x), field(V1,E1,F1), not channel(V2,_,x), not field(V2,_,F1). -compare(edit_remove_y,V1,V2,E1,F1) :- not compare(edit_remove_y_count,V1,V2,E1,F1), comparable(V1,V2), channel(V1,E1,y), field(V1,E1,F1), not channel(V2,_,y), not field(V2,_,F1). -compare(edit_remove_color,V1,V2,E1,F1) :- not compare(edit_remove_color_count,V1,V2,E1,F1), comparable(V1,V2), channel(V1,E1,color), field(V1,E1,F1), not channel(V2,_,color), not field(V2,_,F1). -compare(edit_remove_shape,V1,V2,E1,F1) :- not compare(edit_remove_shape_count,V1,V2,E1,F1), comparable(V1,V2), channel(V1,E1,shape), field(V1,E1,F1), not channel(V2,_,shape), not field(V2,_,F1). -compare(edit_remove_size,V1,V2,E1,F1) :- not compare(edit_remove_size_count,V1,V2,E1,F1), comparable(V1,V2), channel(V1,E1,size), field(V1,E1,F1), not channel(V2,_,size), not field(V2,_,F1). -compare(edit_remove_row,V1,V2,E1,F1) :- not compare(edit_remove_row_count,V1,V2,E1,F1), comparable(V1,V2), channel(V1,E1,row), field(V1,E1,F1), not channel(V2,_,row), not field(V2,_,F1). -compare(edit_remove_column,V1,V2,E1,F1) :- not compare(edit_remove_column_count,V1,V2,E1,F1), comparable(V1,V2), channel(V1,E1,column), field(V1,E1,F1), not channel(V2,_,column), not field(V2,_,F1). -compare(edit_remove_text,V1,V2,E1,F1) :- not compare(edit_remove_text_count,V1,V2,E1,F1), comparable(V1,V2), channel(V1,E1,text), field(V1,E1,F1), not channel(V2,_,text), not field(V2,_,F1). +compare(edit_remove_x,V1,V2,E1,F1) :- not compare(edit_remove_x_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,x), field(V1,E1,F1), not channel(V2,_,x), not field(V2,_,F1). +compare(edit_remove_y,V1,V2,E1,F1) :- not compare(edit_remove_y_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,y), field(V1,E1,F1), not channel(V2,_,y), not field(V2,_,F1). +compare(edit_remove_color,V1,V2,E1,F1) :- not compare(edit_remove_color_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,color), field(V1,E1,F1), not channel(V2,_,color), not field(V2,_,F1). +compare(edit_remove_shape,V1,V2,E1,F1) :- not compare(edit_remove_shape_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,shape), field(V1,E1,F1), not channel(V2,_,shape), not field(V2,_,F1). +compare(edit_remove_size,V1,V2,E1,F1) :- not compare(edit_remove_size_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,size), field(V1,E1,F1), not channel(V2,_,size), not field(V2,_,F1). +compare(edit_remove_row,V1,V2,E1,F1) :- not compare(edit_remove_row_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,row), field(V1,E1,F1), not channel(V2,_,row), not field(V2,_,F1). +compare(edit_remove_column,V1,V2,E1,F1) :- not compare(edit_remove_column_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,column), field(V1,E1,F1), not channel(V2,_,column), not field(V2,_,F1). +compare(edit_remove_text,V1,V2,E1,F1) :- not compare(edit_remove_text_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,text), field(V1,E1,F1), not channel(V2,_,text), not field(V2,_,F1). compare(edit_modify_x,V1,V2,E1,F2) :- not compare(edit_modify_x_add_count,V1,V2,E1,E2), not compare(edit_modify_x_remove_count,V1,V2,E1,E2), comparable(V1,V2), channel(V1,E1,x), channel(V2,E2,x), field(V2,E2,F2), not field(V1,_,F2). compare(edit_modify_y,V1,V2,E1,F2) :- not compare(edit_modify_y_add_count,V1,V2,E1,E2), not compare(edit_modify_y_remove_count,V1,V2,E1,E2), comparable(V1,V2), channel(V1,E1,y), channel(V2,E2,y), field(V2,E2,F2), not field(V1,_,F2). compare(edit_modify_color,V1,V2,E1,F2) :- not compare(edit_modify_color_add_count,V1,V2,E1,E2), not compare(edit_modify_color_remove_count,V1,V2,E1,E2), comparable(V1,V2), channel(V1,E1,color), channel(V2,E2,color), field(V2,E2,F2), not field(V1,_,F2). @@ -156,11 +155,9 @@ compare(edit_scale,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E compare(edit_scale,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), zero(V1,E1), not zero(V2,E2). compare(edit_scale,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), not zero(V1,E1), zero(V2,E2). -compare(edit_bin,V1,V2,E1,E2,B1,none) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), bin(V1,E1,B1), not bin(V2,E2,_). -compare(edit_bin,V1,V2,E1,E2,none,B2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), not bin(V1,E1,_), bin(V2,E2,B2). - -compare(edit_aggregate,V1,V2,E1,E2,A1,A2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), aggregate(V1,E1,A1), aggregate(V2,E2,A2), A1 != A2. -compare(edit_aggregate,V1,V2,E1,E2,A1,none) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), aggregate(V1,E1,A1), not aggregate(V2,E2,_). -compare(edit_aggregate,V1,V2,E1,E2,none,A2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), not aggregate(V1,E1,_), aggregate(V2,E2,A2). +compare(edit_bin,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), bin(V1,E1,_), not bin(V2,E2,_). +compare(edit_bin,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), not bin(V1,E1,_), bin(V2,E2,_). -compare(N,V1,V2,A,B,_placeholder,_placeholder) :- compare(N,V1,V2,A,B). +compare(edit_aggregate,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), aggregate(V1,E1,A1), aggregate(V2,E2,A2), A1 != A2. +compare(edit_aggregate,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), aggregate(V1,E1,_), not aggregate(V2,E2,_). +compare(edit_aggregate,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), not aggregate(V1,E1,_), aggregate(V2,E2,_). diff --git a/asp/define.lp b/asp/define.lp index 2840e28..8504e77 100644 --- a/asp/define.lp +++ b/asp/define.lp @@ -10,7 +10,7 @@ primitive_type(string;number;boolean;datetime). aggregate_op(count;mean;median;min;max;stdev;sum). summative_aggregate_op(count;sum). % Numbers of bins that can be recommended; any natural number is allowed. -binning(10;25;200). +binning(10;25). % Encoding channels. single_channel(x;y;color;size;shape;text;row;column). diff --git a/asp/optimize.lp b/asp/optimize.lp index 8460e2f..9f7b11e 100644 --- a/asp/optimize.lp +++ b/asp/optimize.lp @@ -1,6 +1,6 @@ % Minimize the feature weight -#minimize { WD * 10,F,V,Q: soft_weight(F,WD), soft(F,V,Q); WG,F,V1,V2,A,B,C,D: compare_weight(F,WG), compare(F,V1,V2,A,B,C,D) }. +#minimize { WD * 10,F,V,Q: soft_weight(F,WD), soft(F,V,Q); WG,F,V1,V2,A,B: compare_weight(F,WG), compare(F,V1,V2,A,B) }. % #minimize { W@2,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. % #minimize { W@1,F,V1,V2: compare_weight(F,W), compare(F,V1,V2) }. diff --git a/asp/optimize_draco.lp b/asp/optimize_draco.lp index 40824af..0d14056 100644 --- a/asp/optimize_draco.lp +++ b/asp/optimize_draco.lp @@ -1,2 +1,2 @@ #minimize { W@1,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. -#minimize { W@2,F,V1,V2,A,B,C,D : compare_weight(F,W), compare(F,V1,V2,A,B,C,D) }. +#minimize { W@2,F,V1,V2,A,B : compare_weight(F,W), compare(F,V1,V2,A,B) }. diff --git a/asp/optimize_graphscape.lp b/asp/optimize_graphscape.lp index d0e318e..bf409f9 100644 --- a/asp/optimize_graphscape.lp +++ b/asp/optimize_graphscape.lp @@ -1,2 +1,2 @@ #minimize { W@2,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. -#minimize { W@1,F,V1,V2,A,B,C,D: compare_weight(F,W), compare(F,V1,V2,A,B,C,D) }. +#minimize { W@1,F,V1,V2,A,B: compare_weight(F,W), compare(F,V1,V2,A,B) }. diff --git a/asp/output.lp b/asp/output.lp index 63b1461..faa6e4b 100644 --- a/asp/output.lp +++ b/asp/output.lp @@ -19,7 +19,7 @@ #show zero/2. #show soft/3. -#show compare/7. +#show compare/5. #show soft_weight(N,W) : soft(N,_,_), soft_weight(N,W). -#show compare_weight(N,W) : compare(N,_,_,_,_,_,_), compare_weight(N,W). +#show compare_weight(N,W) : compare(N,_,_,_,_), compare_weight(N,W). diff --git a/asp/weights.lp b/asp/weights.lp index 609a545..d6d7ac6 100644 --- a/asp/weights.lp +++ b/asp/weights.lp @@ -13,9 +13,9 @@ #const same_field_gte3_weight = 16. #const count_twice_weight = 50. #const shape_cardinality_weight = 5. -#const string_non_nominal_weight = 4. -#const number_nominal_weight = 30. -#const number_high_cardinality_ordinal_weight = 30. +#const string_non_nominal_weight = 100. +#const number_nominal_weight = 50. +#const number_high_cardinality_ordinal_weight = 50. #const bin_cardinality_weight = 5. #const quant_bin_weight = 1. #const agg_dim_weight = 2. From 99755ecf2ad9d3560fcab5a6bc14f21737656764 Mon Sep 17 00:00:00 2001 From: Halden Lin Date: Fri, 13 Sep 2019 03:10:19 -0700 Subject: [PATCH 19/25] Fix topk bug. --- asp/_all.lp | 31 +++++++++++++++++------- asp/compare.lp | 48 +++++++++++++++++++------------------- asp/generate.lp | 26 ++++++++++----------- asp/optimize.lp | 2 +- asp/optimize_draco.lp | 4 ++-- asp/optimize_graphscape.lp | 4 ++-- draco/run.py | 7 ++++-- output.json | 36 ++++++++++++++++++++++++++++ 8 files changed, 105 insertions(+), 53 deletions(-) create mode 100644 output.json diff --git a/asp/_all.lp b/asp/_all.lp index 3a029a7..34c43df 100644 --- a/asp/_all.lp +++ b/asp/_all.lp @@ -1,12 +1,25 @@ % Collection of ASP files that can be used to quickly run an experiment. % E.g. clingo asp/_all.lp test.lp -#include "asp/define.lp". -#include "asp/generate.lp". -#include "asp/hard.lp". -#include "asp/soft.lp". -#include "asp/weights.lp". -#include "asp/assign_weights.lp". -#include "asp/optimize.lp". -#include "asp/output.lp". -% #include "asp/topk-lua.lp". +% #include "asp/define.lp". +% #include "asp/generate.lp". +% #include "asp/hard.lp". +% #include "asp/soft.lp". +% #include "asp/weights.lp". +% #include "asp/assign_weights.lp". +% #include "asp/optimize.lp". +% #include "asp/output.lp". +% % #include "asp/topk-lua.lp". + +#include "define.lp". +#include "generate.lp". +#include "hard.lp". +#include "soft.lp". +#include "weights.lp". +#include "assign_weights.lp". +#include "optimize_draco.lp". +#include "output.lp". +#include "compare.lp". +#include "assign_compare_weights.lp". +#include "compare_weights.lp". +#include "topk-py.lp". diff --git a/asp/compare.lp b/asp/compare.lp index 08bae32..07f909f 100644 --- a/asp/compare.lp +++ b/asp/compare.lp @@ -34,14 +34,14 @@ compare(edit_text_tick,V1,V2,tick,text) :- comparable(V1,V2), mark(V1,tick), mar % ENCODING EDITS -compare(edit_add_x,V1,V2,E2,F2) :- not compare(edit_add_x_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,x), field(V2,E2,F2), not channel(V1,_,x), not field(V1,_,F2). -compare(edit_add_y,V1,V2,E2,F2) :- not compare(edit_add_y_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,y), field(V2,E2,F2), not channel(V1,_,y), not field(V1,_,F2). -compare(edit_add_color,V1,V2,E2,F2) :- not compare(edit_add_color_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,color), field(V2,E2,F2), not channel(V1,_,color), not field(V1,_,F2). -compare(edit_add_shape,V1,V2,E2,F2) :- not compare(edit_add_shape_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,shape), field(V2,E2,F2), not channel(V1,_,shape), not field(V1,_,F2). -compare(edit_add_size,V1,V2,E2,F2) :- not compare(edit_add_size_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,size), field(V2,E2,F2), not channel(V1,_,size), not field(V1,_,F2). -compare(edit_add_row,V1,V2,E2,F2) :- not compare(edit_add_row_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,row), field(V2,E2,F2), not channel(V1,_,row), not field(V1,_,F2). -compare(edit_add_column,V1,V2,E2,F2) :- not compare(edit_add_column_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,column), field(V2,E2,F2), not channel(V1,_,column), not field(V1,_,F2). -compare(edit_add_text,V1,V2,E2,F2) :- not compare(edit_add_text_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,text), field(V2,E2,F2), not channel(V1,_,text), not field(V1,_,F2). +compare(edit_add_x,V1,V2,E2,F2) :- not compare(edit_add_x_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,x), field(V2,E2,F2), not channel(V1,_,x). +compare(edit_add_y,V1,V2,E2,F2) :- not compare(edit_add_y_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,y), field(V2,E2,F2), not channel(V1,_,y). +compare(edit_add_color,V1,V2,E2,F2) :- not compare(edit_add_color_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,color), field(V2,E2,F2), not channel(V1,_,color). +compare(edit_add_shape,V1,V2,E2,F2) :- not compare(edit_add_shape_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,shape), field(V2,E2,F2), not channel(V1,_,shape). +compare(edit_add_size,V1,V2,E2,F2) :- not compare(edit_add_size_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,size), field(V2,E2,F2), not channel(V1,_,size). +compare(edit_add_row,V1,V2,E2,F2) :- not compare(edit_add_row_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,row), field(V2,E2,F2), not channel(V1,_,row). +compare(edit_add_column,V1,V2,E2,F2) :- not compare(edit_add_column_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,column), field(V2,E2,F2), not channel(V1,_,column). +compare(edit_add_text,V1,V2,E2,F2) :- not compare(edit_add_text_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,text), field(V2,E2,F2), not channel(V1,_,text). compare(edit_add_x_count,V1,V2,E2,count) :- comparable(V1,V2), channel(V2,E2,x), aggregate(V2,E2,count), not channel(V1,_,x). compare(edit_add_y_count,V1,V2,E2,count) :- comparable(V1,V2), channel(V2,E2,y), aggregate(V2,E2,count), not channel(V1,_,y). compare(edit_add_color_count,V1,V2,E2,count) :- comparable(V1,V2), channel(V2,E2,color), aggregate(V2,E2,count), not channel(V1,_,color). @@ -50,22 +50,22 @@ compare(edit_add_size_count,V1,V2,E2,count) :- comparable(V1,V2), channel(V2,E2, compare(edit_add_row_count,V1,V2,E2,count) :- comparable(V1,V2), channel(V2,E2,row), aggregate(V2,E2,count), not channel(V1,_,row). compare(edit_add_column_count,V1,V2,E2,count) :- comparable(V1,V2), channel(V2,E2,column), aggregate(V2,E2,count), not channel(V1,_,column). compare(edit_add_text_count,V1,V2,E2,count) :- comparable(V1,V2), channel(V2,E2,text), aggregate(V2,E2,count), not channel(V1,_,text). -compare(edit_remove_x_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,x), field(V1,E1,F1), not channel(V2,_,x), not field(V2,_,F1), aggregate(V1,E1,count). -compare(edit_remove_y_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,y), field(V1,E1,F1), not channel(V2,_,y), not field(V2,_,F1), aggregate(V1,E1,count). -compare(edit_remove_color_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,color), field(V1,E1,F1), not channel(V2,_,color), not field(V2,_,F1), aggregate(V1,E1,count). -compare(edit_remove_shape_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,shape), field(V1,E1,F1), not channel(V2,_,shape), not field(V2,_,F1), aggregate(V1,E1,count). -compare(edit_remove_size_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,size), field(V1,E1,F1), not channel(V2,_,size), not field(V2,_,F1), aggregate(V1,E1,count). -compare(edit_remove_row_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,row), field(V1,E1,F1), not channel(V2,_,row), not field(V2,_,F1), aggregate(V1,E1,count). -compare(edit_remove_column_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,column), field(V1,E1,F1), not channel(V2,_,column), not field(V2,_,F1), aggregate(V1,E1,count). -compare(edit_remove_text_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,text), field(V1,E1,F1), not channel(V2,_,text), not field(V2,_,F1), aggregate(V1,E1,count). -compare(edit_remove_x,V1,V2,E1,F1) :- not compare(edit_remove_x_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,x), field(V1,E1,F1), not channel(V2,_,x), not field(V2,_,F1). -compare(edit_remove_y,V1,V2,E1,F1) :- not compare(edit_remove_y_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,y), field(V1,E1,F1), not channel(V2,_,y), not field(V2,_,F1). -compare(edit_remove_color,V1,V2,E1,F1) :- not compare(edit_remove_color_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,color), field(V1,E1,F1), not channel(V2,_,color), not field(V2,_,F1). -compare(edit_remove_shape,V1,V2,E1,F1) :- not compare(edit_remove_shape_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,shape), field(V1,E1,F1), not channel(V2,_,shape), not field(V2,_,F1). -compare(edit_remove_size,V1,V2,E1,F1) :- not compare(edit_remove_size_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,size), field(V1,E1,F1), not channel(V2,_,size), not field(V2,_,F1). -compare(edit_remove_row,V1,V2,E1,F1) :- not compare(edit_remove_row_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,row), field(V1,E1,F1), not channel(V2,_,row), not field(V2,_,F1). -compare(edit_remove_column,V1,V2,E1,F1) :- not compare(edit_remove_column_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,column), field(V1,E1,F1), not channel(V2,_,column), not field(V2,_,F1). -compare(edit_remove_text,V1,V2,E1,F1) :- not compare(edit_remove_text_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,text), field(V1,E1,F1), not channel(V2,_,text), not field(V2,_,F1). +compare(edit_remove_x_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,x), field(V1,E1,F1), not channel(V2,_,x), aggregate(V1,E1,count). +compare(edit_remove_y_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,y), field(V1,E1,F1), not channel(V2,_,y), aggregate(V1,E1,count). +compare(edit_remove_color_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,color), field(V1,E1,F1), not channel(V2,_,color), aggregate(V1,E1,count). +compare(edit_remove_shape_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,shape), field(V1,E1,F1), not channel(V2,_,shape), aggregate(V1,E1,count). +compare(edit_remove_size_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,size), field(V1,E1,F1), not channel(V2,_,size), aggregate(V1,E1,count). +compare(edit_remove_row_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,row), field(V1,E1,F1), not channel(V2,_,row), aggregate(V1,E1,count). +compare(edit_remove_column_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,column), field(V1,E1,F1), not channel(V2,_,column), aggregate(V1,E1,count). +compare(edit_remove_text_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,text), field(V1,E1,F1), not channel(V2,_,text), aggregate(V1,E1,count). +compare(edit_remove_x,V1,V2,E1,F1) :- not compare(edit_remove_x_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,x), field(V1,E1,F1), not channel(V2,_,x). +compare(edit_remove_y,V1,V2,E1,F1) :- not compare(edit_remove_y_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,y), field(V1,E1,F1), not channel(V2,_,y). +compare(edit_remove_color,V1,V2,E1,F1) :- not compare(edit_remove_color_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,color), field(V1,E1,F1), not channel(V2,_,color). +compare(edit_remove_shape,V1,V2,E1,F1) :- not compare(edit_remove_shape_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,shape), field(V1,E1,F1), not channel(V2,_,shape). +compare(edit_remove_size,V1,V2,E1,F1) :- not compare(edit_remove_size_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,size), field(V1,E1,F1), not channel(V2,_,size). +compare(edit_remove_row,V1,V2,E1,F1) :- not compare(edit_remove_row_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,row), field(V1,E1,F1), not channel(V2,_,row). +compare(edit_remove_column,V1,V2,E1,F1) :- not compare(edit_remove_column_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,column), field(V1,E1,F1), not channel(V2,_,column). +compare(edit_remove_text,V1,V2,E1,F1) :- not compare(edit_remove_text_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,text), field(V1,E1,F1), not channel(V2,_,text). compare(edit_modify_x,V1,V2,E1,F2) :- not compare(edit_modify_x_add_count,V1,V2,E1,E2), not compare(edit_modify_x_remove_count,V1,V2,E1,E2), comparable(V1,V2), channel(V1,E1,x), channel(V2,E2,x), field(V2,E2,F2), not field(V1,_,F2). compare(edit_modify_y,V1,V2,E1,F2) :- not compare(edit_modify_y_add_count,V1,V2,E1,E2), not compare(edit_modify_y_remove_count,V1,V2,E1,E2), comparable(V1,V2), channel(V1,E1,y), channel(V2,E2,y), field(V2,E2,F2), not field(V1,_,F2). compare(edit_modify_color,V1,V2,E1,F2) :- not compare(edit_modify_color_add_count,V1,V2,E1,E2), not compare(edit_modify_color_remove_count,V1,V2,E1,E2), comparable(V1,V2), channel(V1,E1,color), channel(V2,E2,color), field(V2,E2,F2), not field(V1,_,F2). diff --git a/asp/generate.lp b/asp/generate.lp index 6b535de..364020c 100644 --- a/asp/generate.lp +++ b/asp/generate.lp @@ -7,33 +7,33 @@ obj_id(1..max_extra_encs). -{ encoding(V,E): obj_id(E) } :- visualization(V). +{ encoding(V,E): obj_id(E) } :- visualization(V), not base(V). -:- not encoding(V,ID), encoding(V,ID-1), obj_id(ID), obj_id(ID-1). +:- not encoding(V,ID), not base(V), encoding(V,ID-1), obj_id(ID), obj_id(ID-1). % don't add extra field -:- encoding(V,ID), obj_id(ID), field(V,ID,F). +:- obj_id(ID), field(_,ID,_). % properties of encodings % channel and type have to be present -{ channel(V,E,C) : channel(C) } = 1 :- encoding(V,E). -{ type(V,E,T): type(T) } = 1 :- encoding(V,E). +{ channel(V,E,C) : channel(C) } = 1 :- encoding(V,E), not base(V). +{ type(V,E,T): type(T) } = 1 :- encoding(V,E), not base(V). % other properties that are not required -0 { field(V,E,F): field(F) } 1 :- encoding(V,E). -0 { aggregate(V,E,A): aggregate_op(A) } 1 :- encoding(V,E). -0 { bin(V,E,B): binning(B) } 1 :- encoding(V,E). -0 { zero(V,E) } 1 :- encoding(V,E). -0 { log(V,E) } 1 :- encoding(V,E). +0 { field(V,E,F): field(F) } 1 :- encoding(V,E), not base(V). +0 { aggregate(V,E,A): aggregate_op(A) } 1 :- encoding(V,E), not base(V). +0 { bin(V,E,B): binning(B) } 1 :- encoding(V,E), not base(V). +0 { zero(V,E) } 1 :- encoding(V,E), not base(V). +0 { log(V,E) } 1 :- encoding(V,E), not base(V). % pick one mark type -{ mark(V,M) : marktype(M) } = 1 :- visualization(V). +{ mark(V,M) : marktype(M) } = 1 :- visualization(V), not base(V). % stacking -0 { stack(V,S): stacking(S) } 1 :- visualization(V). +0 { stack(V,S): stacking(S) } 1 :- visualization(V), not base(V). -:- field(V,E1,F1), field(V,E2,F2), E1 > E2, F1 <= F2. +% :- field(V,E1,F1), field(V,E2,F2), E1 > E2, F1 <= F2. % :- channel(V,E1,C1), channel(V,E2,C2), E1 > E2, C1 <= C2. diff --git a/asp/optimize.lp b/asp/optimize.lp index 9f7b11e..8f92e77 100644 --- a/asp/optimize.lp +++ b/asp/optimize.lp @@ -1,6 +1,6 @@ % Minimize the feature weight -#minimize { WD * 10,F,V,Q: soft_weight(F,WD), soft(F,V,Q); WG,F,V1,V2,A,B: compare_weight(F,WG), compare(F,V1,V2,A,B) }. +#minimize { WD,F,V,Q: soft_weight(F,WD), soft(F,V,Q) }. % #minimize { W@2,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. % #minimize { W@1,F,V1,V2: compare_weight(F,W), compare(F,V1,V2) }. diff --git a/asp/optimize_draco.lp b/asp/optimize_draco.lp index 0d14056..bf409f9 100644 --- a/asp/optimize_draco.lp +++ b/asp/optimize_draco.lp @@ -1,2 +1,2 @@ -#minimize { W@1,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. -#minimize { W@2,F,V1,V2,A,B : compare_weight(F,W), compare(F,V1,V2,A,B) }. +#minimize { W@2,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. +#minimize { W@1,F,V1,V2,A,B: compare_weight(F,W), compare(F,V1,V2,A,B) }. diff --git a/asp/optimize_graphscape.lp b/asp/optimize_graphscape.lp index bf409f9..0ab9e40 100644 --- a/asp/optimize_graphscape.lp +++ b/asp/optimize_graphscape.lp @@ -1,2 +1,2 @@ -#minimize { W@2,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. -#minimize { W@1,F,V1,V2,A,B: compare_weight(F,W), compare(F,V1,V2,A,B) }. +#minimize { W@1,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. +#minimize { W@2,F,V1,V2,A,B: compare_weight(F,W), compare(F,V1,V2,A,B) }. diff --git a/draco/run.py b/draco/run.py index eca3437..0f494bf 100644 --- a/draco/run.py +++ b/draco/run.py @@ -130,7 +130,7 @@ def run_clingo( files = files or DRACO_LP constants = constants or {} - options = ["--outf=2", "--quiet=1,2,2", "--parallel-mode=4", "--seed=20"] + options = ["--outf=2", "--quiet=1,2,2"] if (topk): files.append('topk-py.lp') @@ -154,6 +154,7 @@ def run_clingo( asp_program = b"\n".join(map(load_file, file_names)) + program.encode("utf8") + # print(asp_program.decode("utf8")) if debug: with tempfile.NamedTemporaryFile(mode="w", delete=False) as fd: fd.write(program) @@ -196,7 +197,9 @@ def run( result = json_result["Result"] if result == "UNSATISFIABLE": - logger.info("Constraints are unsatisfiable.") + # logger.info("Constraints are unsatisfiable.") + if topk and json_result["Calls"] > 1: + return run(draco_query, constants, files, silence_warnings, debug, clear_cache, topk, json_result["Calls"]) return None elif result == "OPTIMUM FOUND": if (not topk): diff --git a/output.json b/output.json new file mode 100644 index 0000000..ec2e0f9 --- /dev/null +++ b/output.json @@ -0,0 +1,36 @@ +{ + "Solver": "clingo version 5.3.0", + "Input": [ + "test.lp" + ], + "Call": [ + { + "Witnesses": [ + { + "Value": [ + "base(\"anchor0\")", "visualization(\"view\")", "visualization(\"anchor0\")", "encoding(\"view\",e0)", "encoding(\"anchor0\",e0)", "mark(\"view\",line)", "mark(\"anchor0\",tick)", "zero(\"anchor0\",e0)", "channel(\"anchor0\",e0,x)", "field(\"anchor0\",e0,\"IMDB_Rating\")", "soft(encoding,\"view\",e0)", "soft(encoding,\"anchor0\",e0)", "soft(encoding_field,\"anchor0\",e0)", "soft(type_q,\"anchor0\",e0)", "soft(continuous_x,\"anchor0\",e0)", "type(\"anchor0\",e0,quantitative)", "compare(edit_line_tick,\"anchor0\",\"view\",tick,line)", "soft(c_d_tick,\"anchor0\",_placeholder)", "soft_weight(c_d_tick,0)", "compare_weight(edit_line_tick,3)", "soft_weight(encoding,0)", "soft_weight(encoding_field,6)", "soft_weight(type_q,0)", "soft_weight(continuous_x,0)", "encoding(\"view\",1)", "channel(\"view\",e0,x)", "channel(\"view\",1,y)", "compare(edit_add_y_count,\"anchor0\",\"view\",1,count)", "aggregate(\"view\",1,count)", "field(\"view\",e0,\"IMDB_Rating\")", "zero(\"view\",e0)", "zero(\"view\",1)", "compare_weight(edit_add_y_count,458)", "type(\"view\",e0,quantitative)", "type(\"view\",1,quantitative)", "soft(aggregate_group_by_raw,e0,_placeholder)", "soft(agg_dim,\"view\",_placeholder)", "soft(c_c_line,\"view\",_placeholder)", "soft(aggregate,\"view\",1)", "soft(encoding,\"view\",1)", "soft(encoding_field,\"view\",e0)", "soft(type_q,\"view\",e0)", "soft(type_q,\"view\",1)", "soft(continuous_x,\"view\",e0)", "soft(continuous_y,\"view\",1)", "soft(aggregate_count,\"view\",1)", "soft_weight(aggregate_group_by_raw,10)", "soft_weight(agg_dim,2)", "soft_weight(c_c_line,20)", "soft_weight(aggregate,4)", "soft_weight(continuous_y,0)", "soft_weight(aggregate_count,0)" + ] + } + ] +oops! + } + ], + "Result": "OPTIMUM FOUND", + "Models": { + "Number": 4, + "More": "yes", + "Optimum": "yes", + "Optimal": 1, + "Costs": [ + 461, 48 + ] + }, + "Calls": 1, + "Time": { + "Total": 0.098, + "Solve": 0.000, + "Model": 0.000, + "Unsat": 0.000, + "CPU": 0.097 + } +} From 05284b95ed681f76532f85640f56fcc37ff19b44 Mon Sep 17 00:00:00 2001 From: Halden Lin Date: Sun, 15 Sep 2019 17:56:57 -0700 Subject: [PATCH 20/25] Fixes. --- asp/_all.lp | 1 - asp/compare.lp | 16 +- asp/compare_hard.lp | 2 + asp/generate.lp | 2 +- asp/optimize_draco.lp | 6 +- asp/optimize_graphscape.lp | 6 +- asp/soft.lp | 1 - asp/weights.lp | 10 +- draco/run.py | 5 +- output.json | 829 ++++++++++++++++++++++++++++++++++++- 10 files changed, 833 insertions(+), 45 deletions(-) create mode 100644 asp/compare_hard.lp diff --git a/asp/_all.lp b/asp/_all.lp index 34c43df..b2d54c4 100644 --- a/asp/_all.lp +++ b/asp/_all.lp @@ -22,4 +22,3 @@ #include "compare.lp". #include "assign_compare_weights.lp". #include "compare_weights.lp". -#include "topk-py.lp". diff --git a/asp/compare.lp b/asp/compare.lp index 07f909f..1a51346 100644 --- a/asp/compare.lp +++ b/asp/compare.lp @@ -66,14 +66,14 @@ compare(edit_remove_size,V1,V2,E1,F1) :- not compare(edit_remove_size_count,V1,V compare(edit_remove_row,V1,V2,E1,F1) :- not compare(edit_remove_row_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,row), field(V1,E1,F1), not channel(V2,_,row). compare(edit_remove_column,V1,V2,E1,F1) :- not compare(edit_remove_column_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,column), field(V1,E1,F1), not channel(V2,_,column). compare(edit_remove_text,V1,V2,E1,F1) :- not compare(edit_remove_text_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,text), field(V1,E1,F1), not channel(V2,_,text). -compare(edit_modify_x,V1,V2,E1,F2) :- not compare(edit_modify_x_add_count,V1,V2,E1,E2), not compare(edit_modify_x_remove_count,V1,V2,E1,E2), comparable(V1,V2), channel(V1,E1,x), channel(V2,E2,x), field(V2,E2,F2), not field(V1,_,F2). -compare(edit_modify_y,V1,V2,E1,F2) :- not compare(edit_modify_y_add_count,V1,V2,E1,E2), not compare(edit_modify_y_remove_count,V1,V2,E1,E2), comparable(V1,V2), channel(V1,E1,y), channel(V2,E2,y), field(V2,E2,F2), not field(V1,_,F2). -compare(edit_modify_color,V1,V2,E1,F2) :- not compare(edit_modify_color_add_count,V1,V2,E1,E2), not compare(edit_modify_color_remove_count,V1,V2,E1,E2), comparable(V1,V2), channel(V1,E1,color), channel(V2,E2,color), field(V2,E2,F2), not field(V1,_,F2). -compare(edit_modify_shape,V1,V2,E1,F2) :- not compare(edit_modify_shape_add_count,V1,V2,E1,E2), not compare(edit_modify_shape_remove_count,V1,V2,E1,E2), comparable(V1,V2), channel(V1,E1,shape), channel(V2,E2,shape), field(V2,E2,F2), not field(V1,_,F2). -compare(edit_modify_size,V1,V2,E1,F2) :- not compare(edit_modify_size_add_count,V1,V2,E1,E2), not compare(edit_modify_size_remove_count,V1,V2,E1,E2), comparable(V1,V2), channel(V1,E1,size), channel(V2,E2,size), field(V2,E2,F2), not field(V1,_,F2). -compare(edit_modify_row,V1,V2,E1,F2) :- not compare(edit_modify_row_add_count,V1,V2,E1,E2), not compare(edit_modify_row_remove_count,V1,V2,E1,E2), comparable(V1,V2), channel(V1,E1,row), channel(V2,E2,row), field(V2,E2,F2), not field(V1,_,F2). -compare(edit_modify_column,V1,V2,E1,F2) :- not compare(edit_modify_column_add_count,V1,V2,E1,E2), not compare(edit_modify_column_remove_count,V1,V2,E1,E2), comparable(V1,V2), channel(V1,E1,column), channel(V2,E2,column), field(V2,E2,F2), not field(V1,_,F2). -compare(edit_modify_text,V1,V2,E1,F2) :- not compare(edit_modify_text_add_count,V1,V2,E1,E2), not compare(edit_modify_text_remove_count,V1,V2,E1,E2), comparable(V1,V2), channel(V1,E1,text), channel(V2,E2,text), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_x,V1,V2,E1,F2) :- not compare(edit_modify_x_add_count,V1,V2,E1,F2), not compare(edit_modify_x_remove_count,V1,V2,E1,F2), comparable(V1,V2), channel(V1,E1,x), channel(V2,E2,x), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_y,V1,V2,E1,F2) :- not compare(edit_modify_y_add_count,V1,V2,E1,F2), not compare(edit_modify_y_remove_count,V1,V2,E1,F2), comparable(V1,V2), channel(V1,E1,y), channel(V2,E2,y), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_color,V1,V2,E1,F2) :- not compare(edit_modify_color_add_count,V1,V2,E1,F2), not compare(edit_modify_color_remove_count,V1,V2,E1,F2), comparable(V1,V2), channel(V1,E1,color), channel(V2,E2,color), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_shape,V1,V2,E1,F2) :- not compare(edit_modify_shape_add_count,V1,V2,E1,F2), not compare(edit_modify_shape_remove_count,V1,V2,E1,F2), comparable(V1,V2), channel(V1,E1,shape), channel(V2,E2,shape), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_size,V1,V2,E1,F2) :- not compare(edit_modify_size_add_count,V1,V2,E1,F2), not compare(edit_modify_size_remove_count,V1,V2,E1,F2), comparable(V1,V2), channel(V1,E1,size), channel(V2,E2,size), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_row,V1,V2,E1,F2) :- not compare(edit_modify_row_add_count,V1,V2,E1,F2), not compare(edit_modify_row_remove_count,V1,V2,E1,F2), comparable(V1,V2), channel(V1,E1,row), channel(V2,E2,row), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_column,V1,V2,E1,F2) :- not compare(edit_modify_column_add_count,V1,V2,E1,F2), not compare(edit_modify_column_remove_count,V1,V2,E1,F2), comparable(V1,V2), channel(V1,E1,column), channel(V2,E2,column), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_text,V1,V2,E1,F2) :- not compare(edit_modify_text_add_count,V1,V2,E1,F2), not compare(edit_modify_text_remove_count,V1,V2,E1,F2), comparable(V1,V2), channel(V1,E1,text), channel(V2,E2,text), field(V2,E2,F2), not field(V1,_,F2). compare(edit_modify_x_add_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,x), channel(V2,E2,x), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). compare(edit_modify_y_add_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,y), channel(V2,E2,y), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). compare(edit_modify_color_add_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,color), channel(V2,E2,color), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). diff --git a/asp/compare_hard.lp b/asp/compare_hard.lp new file mode 100644 index 0000000..d63e154 --- /dev/null +++ b/asp/compare_hard.lp @@ -0,0 +1,2 @@ +% don't have different when anchoring. +:- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), type(V1,E1,T1), type(V2,E2,T2), T1 != T2. diff --git a/asp/generate.lp b/asp/generate.lp index 364020c..055f214 100644 --- a/asp/generate.lp +++ b/asp/generate.lp @@ -35,5 +35,5 @@ obj_id(1..max_extra_encs). 0 { stack(V,S): stacking(S) } 1 :- visualization(V), not base(V). -% :- field(V,E1,F1), field(V,E2,F2), E1 > E2, F1 <= F2. +:- field(V,E1,F1), field(V,E2,F2), E1 > E2, F1 <= F2. % :- channel(V,E1,C1), channel(V,E2,C2), E1 > E2, C1 <= C2. diff --git a/asp/optimize_draco.lp b/asp/optimize_draco.lp index bf409f9..fde90cc 100644 --- a/asp/optimize_draco.lp +++ b/asp/optimize_draco.lp @@ -1,2 +1,4 @@ -#minimize { W@2,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. -#minimize { W@1,F,V1,V2,A,B: compare_weight(F,W), compare(F,V1,V2,A,B) }. +% #minimize { W@2,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. +% #minimize { W@1,F,V1,V2,A,B: compare_weight(F,W), compare(F,V1,V2,A,B) }. + +#minimize { W,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. diff --git a/asp/optimize_graphscape.lp b/asp/optimize_graphscape.lp index 0ab9e40..a207f29 100644 --- a/asp/optimize_graphscape.lp +++ b/asp/optimize_graphscape.lp @@ -1,2 +1,4 @@ -#minimize { W@1,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. -#minimize { W@2,F,V1,V2,A,B: compare_weight(F,W), compare(F,V1,V2,A,B) }. +% #minimize { W@1,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. +% #minimize { W@2,F,V1,V2,A,B: compare_weight(F,W), compare(F,V1,V2,A,B) }. + +#minimize { W,F,V1,V2,A,B: compare_weight(F,W), compare(F,V1,V2,A,B) }. diff --git a/asp/soft.lp b/asp/soft.lp index cef0497..322d882 100644 --- a/asp/soft.lp +++ b/asp/soft.lp @@ -477,4 +477,3 @@ soft(summary_discrete_row,E) :- task(V,summary), channel(V,E,row), discrete(V,E) % @constraint Discrete column for summary tasks. soft(summary_discrete_column,E) :- task(V,summary), channel(V,E,column), discrete(V,E), enc_interesting(V,E). -:~ field(V,E1,"Horsepower"), channel(V,E1,y), field(V,E2,"Miles_per_Gallon"), channel(V,E2,x). [1] diff --git a/asp/weights.lp b/asp/weights.lp index d6d7ac6..3e58bf4 100644 --- a/asp/weights.lp +++ b/asp/weights.lp @@ -22,7 +22,7 @@ #const only_discrete_weight = 30. #const multiple_non_pos_weight = 3. #const non_positional_pref_weight = 20. -#const aggregate_group_by_raw_weight = 10. +#const aggregate_group_by_raw_weight = 20. #const x_y_raw_weight = 1. #const log_weight = 1. #const zero_weight = 1. @@ -97,10 +97,10 @@ #const nominal_x_weight = 3. #const nominal_y_weight = 0. -#const nominal_color_weight = 10. -#const nominal_shape_weight = 11. -#const nominal_text_weight = 12. -#const nominal_row_weight = 7. +#const nominal_color_weight = 6. +#const nominal_shape_weight = 10. +#const nominal_text_weight = 15. +#const nominal_row_weight = 8. #const nominal_column_weight = 9. #const nominal_detail_weight = 30. diff --git a/draco/run.py b/draco/run.py index 0f494bf..69dc189 100644 --- a/draco/run.py +++ b/draco/run.py @@ -29,6 +29,7 @@ "output.lp", "compare.lp", "assign_compare_weights.lp", + "compare_hard.lp", "compare_weights.lp" ] DRACO_LP_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "../asp") @@ -130,7 +131,7 @@ def run_clingo( files = files or DRACO_LP constants = constants or {} - options = ["--outf=2", "--quiet=1,2,2"] + options = ["--outf=2", "--quiet=1,2,2", "--parallel-mode=4"] if (topk): files.append('topk-py.lp') @@ -199,7 +200,7 @@ def run( if result == "UNSATISFIABLE": # logger.info("Constraints are unsatisfiable.") if topk and json_result["Calls"] > 1: - return run(draco_query, constants, files, silence_warnings, debug, clear_cache, topk, json_result["Calls"]) + return run(draco_query, constants, files, silence_warnings, debug, clear_cache, topk, json_result["Calls"] - 1) return None elif result == "OPTIMUM FOUND": if (not topk): diff --git a/output.json b/output.json index ec2e0f9..11e8dee 100644 --- a/output.json +++ b/output.json @@ -1,36 +1,819 @@ { "Solver": "clingo version 5.3.0", - "Input": [ - "test.lp" - ], + "Input": ["stdin"], "Call": [ { "Witnesses": [ { "Value": [ - "base(\"anchor0\")", "visualization(\"view\")", "visualization(\"anchor0\")", "encoding(\"view\",e0)", "encoding(\"anchor0\",e0)", "mark(\"view\",line)", "mark(\"anchor0\",tick)", "zero(\"anchor0\",e0)", "channel(\"anchor0\",e0,x)", "field(\"anchor0\",e0,\"IMDB_Rating\")", "soft(encoding,\"view\",e0)", "soft(encoding,\"anchor0\",e0)", "soft(encoding_field,\"anchor0\",e0)", "soft(type_q,\"anchor0\",e0)", "soft(continuous_x,\"anchor0\",e0)", "type(\"anchor0\",e0,quantitative)", "compare(edit_line_tick,\"anchor0\",\"view\",tick,line)", "soft(c_d_tick,\"anchor0\",_placeholder)", "soft_weight(c_d_tick,0)", "compare_weight(edit_line_tick,3)", "soft_weight(encoding,0)", "soft_weight(encoding_field,6)", "soft_weight(type_q,0)", "soft_weight(continuous_x,0)", "encoding(\"view\",1)", "channel(\"view\",e0,x)", "channel(\"view\",1,y)", "compare(edit_add_y_count,\"anchor0\",\"view\",1,count)", "aggregate(\"view\",1,count)", "field(\"view\",e0,\"IMDB_Rating\")", "zero(\"view\",e0)", "zero(\"view\",1)", "compare_weight(edit_add_y_count,458)", "type(\"view\",e0,quantitative)", "type(\"view\",1,quantitative)", "soft(aggregate_group_by_raw,e0,_placeholder)", "soft(agg_dim,\"view\",_placeholder)", "soft(c_c_line,\"view\",_placeholder)", "soft(aggregate,\"view\",1)", "soft(encoding,\"view\",1)", "soft(encoding_field,\"view\",e0)", "soft(type_q,\"view\",e0)", "soft(type_q,\"view\",1)", "soft(continuous_x,\"view\",e0)", "soft(continuous_y,\"view\",1)", "soft(aggregate_count,\"view\",1)", "soft_weight(aggregate_group_by_raw,10)", "soft_weight(agg_dim,2)", "soft_weight(c_c_line,20)", "soft_weight(aggregate,4)", "soft_weight(continuous_y,0)", "soft_weight(aggregate_count,0)" + "base(\"anchor0\")", + "visualization(\"view\")", + "visualization(\"anchor0\")", + "encoding(\"view\",e0)", + "encoding(\"anchor0\",e0)", + "mark(\"view\",bar)", + "mark(\"anchor0\",bar)", + "zero(\"anchor0\",e0)", + "aggregate(\"anchor0\",e0,mean)", + "channel(\"anchor0\",e0,x)", + "field(\"anchor0\",e0,\"IMDB_Rating\")", + "soft(agg_dim,\"anchor0\",_placeholder)", + "soft(c_d_no_overlap_bar,\"anchor0\",_placeholder)", + "soft(aggregate,\"anchor0\",e0)", + "soft(encoding,\"view\",e0)", + "soft(encoding,\"anchor0\",e0)", + "soft(encoding_field,\"anchor0\",e0)", + "soft(type_q,\"anchor0\",e0)", + "soft(continuous_x,\"anchor0\",e0)", + "soft(aggregate_mean,\"anchor0\",e0)", + "type(\"anchor0\",e0,quantitative)", + "soft_weight(agg_dim,2)", + "soft_weight(c_d_no_overlap_bar,0)", + "soft_weight(aggregate,4)", + "soft_weight(encoding,0)", + "soft_weight(encoding_field,6)", + "soft_weight(type_q,0)", + "soft_weight(continuous_x,0)", + "soft_weight(aggregate_mean,1)", + "channel(\"view\",e0,x)", + "field(\"view\",e0,\"IMDB_Rating\")", + "zero(\"view\",e0)", + "aggregate(\"view\",e0,mean)", + "type(\"view\",e0,quantitative)", + "soft(agg_dim,\"view\",_placeholder)", + "soft(c_d_no_overlap_bar,\"view\",_placeholder)", + "soft(aggregate,\"view\",e0)", + "soft(encoding_field,\"view\",e0)", + "soft(type_q,\"view\",e0)", + "soft(continuous_x,\"view\",e0)", + "soft(aggregate_mean,\"view\",e0)" + ] + } + ] + }, + { + "Witnesses": [ + { + "Value": [ + "base(\"anchor0\")", + "visualization(\"view\")", + "visualization(\"anchor0\")", + "encoding(\"view\",e0)", + "encoding(\"anchor0\",e0)", + "mark(\"view\",bar)", + "mark(\"anchor0\",bar)", + "zero(\"anchor0\",e0)", + "aggregate(\"anchor0\",e0,mean)", + "channel(\"anchor0\",e0,x)", + "field(\"anchor0\",e0,\"IMDB_Rating\")", + "soft(agg_dim,\"anchor0\",_placeholder)", + "soft(c_d_no_overlap_bar,\"anchor0\",_placeholder)", + "soft(aggregate,\"anchor0\",e0)", + "soft(encoding,\"view\",e0)", + "soft(encoding,\"anchor0\",e0)", + "soft(encoding_field,\"anchor0\",e0)", + "soft(type_q,\"anchor0\",e0)", + "soft(continuous_x,\"anchor0\",e0)", + "soft(aggregate_mean,\"anchor0\",e0)", + "type(\"anchor0\",e0,quantitative)", + "soft_weight(agg_dim,2)", + "soft_weight(c_d_no_overlap_bar,0)", + "soft_weight(aggregate,4)", + "soft_weight(encoding,0)", + "soft_weight(encoding_field,6)", + "soft_weight(type_q,0)", + "soft_weight(continuous_x,0)", + "soft_weight(aggregate_mean,1)", + "channel(\"view\",e0,x)", + "field(\"view\",e0,\"IMDB_Rating\")", + "compare(edit_scale,\"anchor0\",\"view\",e0,e0)", + "aggregate(\"view\",e0,mean)", + "compare_weight(edit_scale,60)", + "type(\"view\",e0,quantitative)", + "soft(agg_dim,\"view\",_placeholder)", + "soft(zero_positional,\"view\",_placeholder)", + "soft(c_d_no_overlap_bar,\"view\",_placeholder)", + "soft(aggregate,\"view\",e0)", + "soft(encoding_field,\"view\",e0)", + "soft(zero,\"view\",e0)", + "soft(type_q,\"view\",e0)", + "soft(continuous_x,\"view\",e0)", + "soft(aggregate_mean,\"view\",e0)", + "soft_weight(zero_positional,1)", + "soft_weight(zero,1)" + ] + } + ] + }, + { + "Witnesses": [ + { + "Value": [ + "base(\"anchor0\")", + "visualization(\"view\")", + "visualization(\"anchor0\")", + "encoding(\"view\",e0)", + "encoding(\"anchor0\",e0)", + "mark(\"view\",bar)", + "mark(\"anchor0\",bar)", + "zero(\"anchor0\",e0)", + "aggregate(\"anchor0\",e0,mean)", + "channel(\"anchor0\",e0,x)", + "field(\"anchor0\",e0,\"IMDB_Rating\")", + "soft(agg_dim,\"anchor0\",_placeholder)", + "soft(c_d_no_overlap_bar,\"anchor0\",_placeholder)", + "soft(aggregate,\"anchor0\",e0)", + "soft(encoding,\"view\",e0)", + "soft(encoding,\"anchor0\",e0)", + "soft(encoding_field,\"anchor0\",e0)", + "soft(type_q,\"anchor0\",e0)", + "soft(continuous_x,\"anchor0\",e0)", + "soft(aggregate_mean,\"anchor0\",e0)", + "type(\"anchor0\",e0,quantitative)", + "soft_weight(agg_dim,2)", + "soft_weight(c_d_no_overlap_bar,0)", + "soft_weight(aggregate,4)", + "soft_weight(encoding,0)", + "soft_weight(encoding_field,6)", + "soft_weight(type_q,0)", + "soft_weight(continuous_x,0)", + "soft_weight(aggregate_mean,1)", + "encoding(\"view\",1)", + "channel(\"view\",e0,x)", + "aggregate(\"view\",1,count)", + "field(\"view\",e0,\"IMDB_Rating\")", + "channel(\"view\",1,color)", + "compare(edit_add_color_count,\"anchor0\",\"view\",1,count)", + "zero(\"view\",e0)", + "zero(\"view\",1)", + "aggregate(\"view\",e0,mean)", + "compare_weight(edit_add_color_count,454)", + "type(\"view\",e0,quantitative)", + "type(\"view\",1,quantitative)", + "soft(non_positional_pref,\"view\",_placeholder)", + "soft(agg_dim,\"view\",_placeholder)", + "soft(c_d_no_overlap_bar,\"view\",_placeholder)", + "soft(aggregate,\"view\",e0)", + "soft(aggregate,\"view\",1)", + "soft(encoding,\"view\",1)", + "soft(encoding_field,\"view\",e0)", + "soft(type_q,\"view\",e0)", + "soft(type_q,\"view\",1)", + "soft(continuous_x,\"view\",e0)", + "soft(continuous_color,\"view\",1)", + "soft(aggregate_count,\"view\",1)", + "soft(aggregate_mean,\"view\",e0)", + "soft_weight(non_positional_pref,20)", + "soft_weight(continuous_color,10)", + "soft_weight(aggregate_count,0)" + ] + } + ] + }, + { + "Witnesses": [ + { + "Value": [ + "base(\"anchor0\")", + "visualization(\"view\")", + "visualization(\"anchor0\")", + "encoding(\"view\",e0)", + "encoding(\"anchor0\",e0)", + "mark(\"view\",bar)", + "mark(\"anchor0\",bar)", + "zero(\"anchor0\",e0)", + "aggregate(\"anchor0\",e0,mean)", + "channel(\"anchor0\",e0,x)", + "field(\"anchor0\",e0,\"IMDB_Rating\")", + "soft(agg_dim,\"anchor0\",_placeholder)", + "soft(c_d_no_overlap_bar,\"anchor0\",_placeholder)", + "soft(aggregate,\"anchor0\",e0)", + "soft(encoding,\"view\",e0)", + "soft(encoding,\"anchor0\",e0)", + "soft(encoding_field,\"anchor0\",e0)", + "soft(type_q,\"anchor0\",e0)", + "soft(continuous_x,\"anchor0\",e0)", + "soft(aggregate_mean,\"anchor0\",e0)", + "type(\"anchor0\",e0,quantitative)", + "soft_weight(agg_dim,2)", + "soft_weight(c_d_no_overlap_bar,0)", + "soft_weight(aggregate,4)", + "soft_weight(encoding,0)", + "soft_weight(encoding_field,6)", + "soft_weight(type_q,0)", + "soft_weight(continuous_x,0)", + "soft_weight(aggregate_mean,1)", + "encoding(\"view\",1)", + "channel(\"view\",e0,x)", + "aggregate(\"view\",1,count)", + "field(\"view\",e0,\"IMDB_Rating\")", + "channel(\"view\",1,color)", + "compare(edit_add_color_count,\"anchor0\",\"view\",1,count)", + "compare(edit_scale,\"anchor0\",\"view\",e0,e0)", + "zero(\"view\",1)", + "aggregate(\"view\",e0,mean)", + "compare_weight(edit_add_color_count,454)", + "compare_weight(edit_scale,60)", + "type(\"view\",e0,quantitative)", + "type(\"view\",1,quantitative)", + "soft(non_positional_pref,\"view\",_placeholder)", + "soft(agg_dim,\"view\",_placeholder)", + "soft(zero_positional,\"view\",_placeholder)", + "soft(c_d_no_overlap_bar,\"view\",_placeholder)", + "soft(aggregate,\"view\",e0)", + "soft(aggregate,\"view\",1)", + "soft(encoding,\"view\",1)", + "soft(encoding_field,\"view\",e0)", + "soft(zero,\"view\",e0)", + "soft(type_q,\"view\",e0)", + "soft(type_q,\"view\",1)", + "soft(continuous_x,\"view\",e0)", + "soft(continuous_color,\"view\",1)", + "soft(aggregate_count,\"view\",1)", + "soft(aggregate_mean,\"view\",e0)", + "soft_weight(non_positional_pref,20)", + "soft_weight(zero_positional,1)", + "soft_weight(zero,1)", + "soft_weight(continuous_color,10)", + "soft_weight(aggregate_count,0)" + ] + } + ] + }, + { + "Witnesses": [ + { + "Value": [ + "base(\"anchor0\")", + "visualization(\"view\")", + "visualization(\"anchor0\")", + "encoding(\"view\",e0)", + "encoding(\"anchor0\",e0)", + "mark(\"view\",bar)", + "mark(\"anchor0\",bar)", + "zero(\"anchor0\",e0)", + "aggregate(\"anchor0\",e0,mean)", + "channel(\"anchor0\",e0,x)", + "field(\"anchor0\",e0,\"IMDB_Rating\")", + "soft(agg_dim,\"anchor0\",_placeholder)", + "soft(c_d_no_overlap_bar,\"anchor0\",_placeholder)", + "soft(aggregate,\"anchor0\",e0)", + "soft(encoding,\"view\",e0)", + "soft(encoding,\"anchor0\",e0)", + "soft(encoding_field,\"anchor0\",e0)", + "soft(type_q,\"anchor0\",e0)", + "soft(continuous_x,\"anchor0\",e0)", + "soft(aggregate_mean,\"anchor0\",e0)", + "type(\"anchor0\",e0,quantitative)", + "soft_weight(agg_dim,2)", + "soft_weight(c_d_no_overlap_bar,0)", + "soft_weight(aggregate,4)", + "soft_weight(encoding,0)", + "soft_weight(encoding_field,6)", + "soft_weight(type_q,0)", + "soft_weight(continuous_x,0)", + "soft_weight(aggregate_mean,1)", + "encoding(\"view\",1)", + "channel(\"view\",1,x)", + "aggregate(\"view\",1,count)", + "field(\"view\",e0,\"IMDB_Rating\")", + "channel(\"view\",e0,color)", + "compare(edit_add_color,\"anchor0\",\"view\",e0,\"IMDB_Rating\")", + "compare(edit_move_x_color,\"anchor0\",\"view\",e0,e0)", + "zero(\"view\",e0)", + "zero(\"view\",1)", + "aggregate(\"view\",e0,mean)", + "compare_weight(edit_add_color,455)", + "compare_weight(edit_move_x_color,446)", + "type(\"view\",e0,quantitative)", + "type(\"view\",1,quantitative)", + "soft(non_positional_pref,\"view\",_placeholder)", + "soft(agg_dim,\"view\",_placeholder)", + "soft(c_d_no_overlap_bar,\"view\",_placeholder)", + "soft(aggregate,\"view\",e0)", + "soft(aggregate,\"view\",1)", + "soft(encoding,\"view\",1)", + "soft(encoding_field,\"view\",e0)", + "soft(type_q,\"view\",e0)", + "soft(type_q,\"view\",1)", + "soft(continuous_x,\"view\",1)", + "soft(continuous_color,\"view\",e0)", + "soft(aggregate_count,\"view\",1)", + "soft(aggregate_mean,\"view\",e0)", + "soft_weight(non_positional_pref,20)", + "soft_weight(continuous_color,10)", + "soft_weight(aggregate_count,0)" + ] + } + ] + }, + { + "Witnesses": [ + { + "Value": [ + "base(\"anchor0\")", + "visualization(\"view\")", + "visualization(\"anchor0\")", + "encoding(\"view\",e0)", + "encoding(\"anchor0\",e0)", + "mark(\"view\",bar)", + "mark(\"anchor0\",bar)", + "zero(\"anchor0\",e0)", + "aggregate(\"anchor0\",e0,mean)", + "channel(\"anchor0\",e0,x)", + "field(\"anchor0\",e0,\"IMDB_Rating\")", + "soft(agg_dim,\"anchor0\",_placeholder)", + "soft(c_d_no_overlap_bar,\"anchor0\",_placeholder)", + "soft(aggregate,\"anchor0\",e0)", + "soft(encoding,\"view\",e0)", + "soft(encoding,\"anchor0\",e0)", + "soft(encoding_field,\"anchor0\",e0)", + "soft(type_q,\"anchor0\",e0)", + "soft(continuous_x,\"anchor0\",e0)", + "soft(aggregate_mean,\"anchor0\",e0)", + "type(\"anchor0\",e0,quantitative)", + "soft_weight(agg_dim,2)", + "soft_weight(c_d_no_overlap_bar,0)", + "soft_weight(aggregate,4)", + "soft_weight(encoding,0)", + "soft_weight(encoding_field,6)", + "soft_weight(type_q,0)", + "soft_weight(continuous_x,0)", + "soft_weight(aggregate_mean,1)", + "encoding(\"view\",1)", + "channel(\"view\",1,x)", + "aggregate(\"view\",1,count)", + "field(\"view\",e0,\"IMDB_Rating\")", + "channel(\"view\",e0,color)", + "compare(edit_add_color,\"anchor0\",\"view\",e0,\"IMDB_Rating\")", + "compare(edit_move_x_color,\"anchor0\",\"view\",e0,e0)", + "compare(edit_scale,\"anchor0\",\"view\",e0,e0)", + "zero(\"view\",1)", + "aggregate(\"view\",e0,mean)", + "compare_weight(edit_add_color,455)", + "compare_weight(edit_move_x_color,446)", + "compare_weight(edit_scale,60)", + "type(\"view\",e0,quantitative)", + "type(\"view\",1,quantitative)", + "soft(non_positional_pref,\"view\",_placeholder)", + "soft(agg_dim,\"view\",_placeholder)", + "soft(c_d_no_overlap_bar,\"view\",_placeholder)", + "soft(aggregate,\"view\",e0)", + "soft(aggregate,\"view\",1)", + "soft(encoding,\"view\",1)", + "soft(encoding_field,\"view\",e0)", + "soft(zero,\"view\",e0)", + "soft(type_q,\"view\",e0)", + "soft(type_q,\"view\",1)", + "soft(continuous_x,\"view\",1)", + "soft(continuous_color,\"view\",e0)", + "soft(aggregate_count,\"view\",1)", + "soft(aggregate_mean,\"view\",e0)", + "soft_weight(non_positional_pref,20)", + "soft_weight(zero,1)", + "soft_weight(continuous_color,10)", + "soft_weight(aggregate_count,0)" + ] + } + ] + }, + { + "Witnesses": [ + { + "Value": [ + "base(\"anchor0\")", + "visualization(\"view\")", + "visualization(\"anchor0\")", + "encoding(\"view\",e0)", + "encoding(\"anchor0\",e0)", + "mark(\"view\",bar)", + "mark(\"anchor0\",bar)", + "zero(\"anchor0\",e0)", + "aggregate(\"anchor0\",e0,mean)", + "channel(\"anchor0\",e0,x)", + "field(\"anchor0\",e0,\"IMDB_Rating\")", + "soft(agg_dim,\"anchor0\",_placeholder)", + "soft(c_d_no_overlap_bar,\"anchor0\",_placeholder)", + "soft(aggregate,\"anchor0\",e0)", + "soft(encoding,\"view\",e0)", + "soft(encoding,\"anchor0\",e0)", + "soft(encoding_field,\"anchor0\",e0)", + "soft(type_q,\"anchor0\",e0)", + "soft(continuous_x,\"anchor0\",e0)", + "soft(aggregate_mean,\"anchor0\",e0)", + "type(\"anchor0\",e0,quantitative)", + "soft_weight(agg_dim,2)", + "soft_weight(c_d_no_overlap_bar,0)", + "soft_weight(aggregate,4)", + "soft_weight(encoding,0)", + "soft_weight(encoding_field,6)", + "soft_weight(type_q,0)", + "soft_weight(continuous_x,0)", + "soft_weight(aggregate_mean,1)", + "channel(\"view\",e0,y)", + "compare(edit_add_y,\"anchor0\",\"view\",e0,\"IMDB_Rating\")", + "field(\"view\",e0,\"IMDB_Rating\")", + "compare(edit_remove_x,\"anchor0\",\"view\",e0,\"IMDB_Rating\")", + "compare(edit_move_x_y,\"anchor0\",\"view\",e0,e0)", + "zero(\"view\",e0)", + "aggregate(\"view\",e0,mean)", + "compare_weight(edit_add_y,459)", + "compare_weight(edit_remove_x,459)", + "compare_weight(edit_move_x_y,444)", + "type(\"view\",e0,quantitative)", + "soft(agg_dim,\"view\",_placeholder)", + "soft(only_x,\"view\",_placeholder)", + "soft(c_d_no_overlap_bar,\"view\",_placeholder)", + "soft(aggregate,\"view\",e0)", + "soft(encoding_field,\"view\",e0)", + "soft(type_q,\"view\",e0)", + "soft(continuous_y,\"view\",e0)", + "soft(aggregate_mean,\"view\",e0)", + "soft_weight(only_x,1)", + "soft_weight(continuous_y,0)" + ] + } + ] + }, + { + "Witnesses": [ + { + "Value": [ + "base(\"anchor0\")", + "visualization(\"view\")", + "visualization(\"anchor0\")", + "encoding(\"view\",e0)", + "encoding(\"anchor0\",e0)", + "mark(\"view\",bar)", + "mark(\"anchor0\",bar)", + "zero(\"anchor0\",e0)", + "aggregate(\"anchor0\",e0,mean)", + "channel(\"anchor0\",e0,x)", + "field(\"anchor0\",e0,\"IMDB_Rating\")", + "soft(agg_dim,\"anchor0\",_placeholder)", + "soft(c_d_no_overlap_bar,\"anchor0\",_placeholder)", + "soft(aggregate,\"anchor0\",e0)", + "soft(encoding,\"view\",e0)", + "soft(encoding,\"anchor0\",e0)", + "soft(encoding_field,\"anchor0\",e0)", + "soft(type_q,\"anchor0\",e0)", + "soft(continuous_x,\"anchor0\",e0)", + "soft(aggregate_mean,\"anchor0\",e0)", + "type(\"anchor0\",e0,quantitative)", + "soft_weight(agg_dim,2)", + "soft_weight(c_d_no_overlap_bar,0)", + "soft_weight(aggregate,4)", + "soft_weight(encoding,0)", + "soft_weight(encoding_field,6)", + "soft_weight(type_q,0)", + "soft_weight(continuous_x,0)", + "soft_weight(aggregate_mean,1)", + "channel(\"view\",e0,y)", + "compare(edit_add_y,\"anchor0\",\"view\",e0,\"IMDB_Rating\")", + "field(\"view\",e0,\"IMDB_Rating\")", + "compare(edit_remove_x,\"anchor0\",\"view\",e0,\"IMDB_Rating\")", + "compare(edit_move_x_y,\"anchor0\",\"view\",e0,e0)", + "compare(edit_scale,\"anchor0\",\"view\",e0,e0)", + "aggregate(\"view\",e0,mean)", + "compare_weight(edit_add_y,459)", + "compare_weight(edit_remove_x,459)", + "compare_weight(edit_move_x_y,444)", + "compare_weight(edit_scale,60)", + "type(\"view\",e0,quantitative)", + "soft(agg_dim,\"view\",_placeholder)", + "soft(zero_positional,\"view\",_placeholder)", + "soft(only_x,\"view\",_placeholder)", + "soft(c_d_no_overlap_bar,\"view\",_placeholder)", + "soft(aggregate,\"view\",e0)", + "soft(encoding_field,\"view\",e0)", + "soft(zero,\"view\",e0)", + "soft(type_q,\"view\",e0)", + "soft(continuous_y,\"view\",e0)", + "soft(aggregate_mean,\"view\",e0)", + "soft_weight(zero_positional,1)", + "soft_weight(only_x,1)", + "soft_weight(zero,1)", + "soft_weight(continuous_y,0)" + ] + } + ] + }, + { + "Witnesses": [ + { + "Value": [ + "base(\"anchor0\")", + "visualization(\"view\")", + "visualization(\"anchor0\")", + "encoding(\"view\",e0)", + "encoding(\"anchor0\",e0)", + "mark(\"view\",bar)", + "mark(\"anchor0\",bar)", + "zero(\"anchor0\",e0)", + "aggregate(\"anchor0\",e0,mean)", + "channel(\"anchor0\",e0,x)", + "field(\"anchor0\",e0,\"IMDB_Rating\")", + "soft(agg_dim,\"anchor0\",_placeholder)", + "soft(c_d_no_overlap_bar,\"anchor0\",_placeholder)", + "soft(aggregate,\"anchor0\",e0)", + "soft(encoding,\"view\",e0)", + "soft(encoding,\"anchor0\",e0)", + "soft(encoding_field,\"anchor0\",e0)", + "soft(type_q,\"anchor0\",e0)", + "soft(continuous_x,\"anchor0\",e0)", + "soft(aggregate_mean,\"anchor0\",e0)", + "type(\"anchor0\",e0,quantitative)", + "soft_weight(agg_dim,2)", + "soft_weight(c_d_no_overlap_bar,0)", + "soft_weight(aggregate,4)", + "soft_weight(encoding,0)", + "soft_weight(encoding_field,6)", + "soft_weight(type_q,0)", + "soft_weight(continuous_x,0)", + "soft_weight(aggregate_mean,1)", + "encoding(\"view\",1)", + "channel(\"view\",e0,y)", + "aggregate(\"view\",1,count)", + "compare(edit_add_y,\"anchor0\",\"view\",e0,\"IMDB_Rating\")", + "field(\"view\",e0,\"IMDB_Rating\")", + "channel(\"view\",1,color)", + "compare(edit_add_color_count,\"anchor0\",\"view\",1,count)", + "compare(edit_remove_x,\"anchor0\",\"view\",e0,\"IMDB_Rating\")", + "compare(edit_move_x_y,\"anchor0\",\"view\",e0,e0)", + "zero(\"view\",e0)", + "zero(\"view\",1)", + "aggregate(\"view\",e0,mean)", + "compare_weight(edit_add_y,459)", + "compare_weight(edit_add_color_count,454)", + "compare_weight(edit_remove_x,459)", + "compare_weight(edit_move_x_y,444)", + "type(\"view\",e0,quantitative)", + "type(\"view\",1,quantitative)", + "soft(non_positional_pref,\"view\",_placeholder)", + "soft(agg_dim,\"view\",_placeholder)", + "soft(only_x,\"view\",_placeholder)", + "soft(c_d_no_overlap_bar,\"view\",_placeholder)", + "soft(aggregate,\"view\",e0)", + "soft(aggregate,\"view\",1)", + "soft(encoding,\"view\",1)", + "soft(encoding_field,\"view\",e0)", + "soft(type_q,\"view\",e0)", + "soft(type_q,\"view\",1)", + "soft(continuous_y,\"view\",e0)", + "soft(continuous_color,\"view\",1)", + "soft(aggregate_count,\"view\",1)", + "soft(aggregate_mean,\"view\",e0)", + "soft_weight(non_positional_pref,20)", + "soft_weight(only_x,1)", + "soft_weight(continuous_y,0)", + "soft_weight(continuous_color,10)", + "soft_weight(aggregate_count,0)" + ] + } + ] + }, + { + "Witnesses": [ + { + "Value": [ + "base(\"anchor0\")", + "visualization(\"view\")", + "visualization(\"anchor0\")", + "encoding(\"view\",e0)", + "encoding(\"anchor0\",e0)", + "mark(\"view\",bar)", + "mark(\"anchor0\",bar)", + "zero(\"anchor0\",e0)", + "aggregate(\"anchor0\",e0,mean)", + "channel(\"anchor0\",e0,x)", + "field(\"anchor0\",e0,\"IMDB_Rating\")", + "soft(agg_dim,\"anchor0\",_placeholder)", + "soft(c_d_no_overlap_bar,\"anchor0\",_placeholder)", + "soft(aggregate,\"anchor0\",e0)", + "soft(encoding,\"view\",e0)", + "soft(encoding,\"anchor0\",e0)", + "soft(encoding_field,\"anchor0\",e0)", + "soft(type_q,\"anchor0\",e0)", + "soft(continuous_x,\"anchor0\",e0)", + "soft(aggregate_mean,\"anchor0\",e0)", + "type(\"anchor0\",e0,quantitative)", + "soft_weight(agg_dim,2)", + "soft_weight(c_d_no_overlap_bar,0)", + "soft_weight(aggregate,4)", + "soft_weight(encoding,0)", + "soft_weight(encoding_field,6)", + "soft_weight(type_q,0)", + "soft_weight(continuous_x,0)", + "soft_weight(aggregate_mean,1)", + "encoding(\"view\",1)", + "channel(\"view\",1,y)", + "compare(edit_add_y_count,\"anchor0\",\"view\",1,count)", + "aggregate(\"view\",1,count)", + "field(\"view\",e0,\"IMDB_Rating\")", + "channel(\"view\",e0,color)", + "compare(edit_add_color,\"anchor0\",\"view\",e0,\"IMDB_Rating\")", + "compare(edit_remove_x,\"anchor0\",\"view\",e0,\"IMDB_Rating\")", + "compare(edit_move_x_color,\"anchor0\",\"view\",e0,e0)", + "zero(\"view\",e0)", + "zero(\"view\",1)", + "aggregate(\"view\",e0,mean)", + "compare_weight(edit_add_y_count,458)", + "compare_weight(edit_add_color,455)", + "compare_weight(edit_remove_x,459)", + "compare_weight(edit_move_x_color,446)", + "type(\"view\",e0,quantitative)", + "type(\"view\",1,quantitative)", + "soft(non_positional_pref,\"view\",_placeholder)", + "soft(agg_dim,\"view\",_placeholder)", + "soft(only_x,\"view\",_placeholder)", + "soft(c_d_no_overlap_bar,\"view\",_placeholder)", + "soft(aggregate,\"view\",e0)", + "soft(aggregate,\"view\",1)", + "soft(encoding,\"view\",1)", + "soft(encoding_field,\"view\",e0)", + "soft(type_q,\"view\",e0)", + "soft(type_q,\"view\",1)", + "soft(continuous_y,\"view\",1)", + "soft(continuous_color,\"view\",e0)", + "soft(aggregate_count,\"view\",1)", + "soft(aggregate_mean,\"view\",e0)", + "soft_weight(non_positional_pref,20)", + "soft_weight(only_x,1)", + "soft_weight(continuous_y,0)", + "soft_weight(continuous_color,10)", + "soft_weight(aggregate_count,0)" + ] + } + ] + }, + { + "Witnesses": [ + { + "Value": [ + "base(\"anchor0\")", + "visualization(\"view\")", + "visualization(\"anchor0\")", + "encoding(\"view\",e0)", + "encoding(\"anchor0\",e0)", + "mark(\"view\",bar)", + "mark(\"anchor0\",bar)", + "zero(\"anchor0\",e0)", + "aggregate(\"anchor0\",e0,mean)", + "channel(\"anchor0\",e0,x)", + "field(\"anchor0\",e0,\"IMDB_Rating\")", + "soft(agg_dim,\"anchor0\",_placeholder)", + "soft(c_d_no_overlap_bar,\"anchor0\",_placeholder)", + "soft(aggregate,\"anchor0\",e0)", + "soft(encoding,\"view\",e0)", + "soft(encoding,\"anchor0\",e0)", + "soft(encoding_field,\"anchor0\",e0)", + "soft(type_q,\"anchor0\",e0)", + "soft(continuous_x,\"anchor0\",e0)", + "soft(aggregate_mean,\"anchor0\",e0)", + "type(\"anchor0\",e0,quantitative)", + "soft_weight(agg_dim,2)", + "soft_weight(c_d_no_overlap_bar,0)", + "soft_weight(aggregate,4)", + "soft_weight(encoding,0)", + "soft_weight(encoding_field,6)", + "soft_weight(type_q,0)", + "soft_weight(continuous_x,0)", + "soft_weight(aggregate_mean,1)", + "encoding(\"view\",1)", + "channel(\"view\",e0,y)", + "aggregate(\"view\",1,count)", + "compare(edit_add_y,\"anchor0\",\"view\",e0,\"IMDB_Rating\")", + "field(\"view\",e0,\"IMDB_Rating\")", + "channel(\"view\",1,color)", + "compare(edit_add_color_count,\"anchor0\",\"view\",1,count)", + "compare(edit_remove_x,\"anchor0\",\"view\",e0,\"IMDB_Rating\")", + "compare(edit_move_x_y,\"anchor0\",\"view\",e0,e0)", + "compare(edit_scale,\"anchor0\",\"view\",e0,e0)", + "zero(\"view\",1)", + "aggregate(\"view\",e0,mean)", + "compare_weight(edit_add_y,459)", + "compare_weight(edit_add_color_count,454)", + "compare_weight(edit_remove_x,459)", + "compare_weight(edit_move_x_y,444)", + "compare_weight(edit_scale,60)", + "type(\"view\",e0,quantitative)", + "type(\"view\",1,quantitative)", + "soft(non_positional_pref,\"view\",_placeholder)", + "soft(agg_dim,\"view\",_placeholder)", + "soft(zero_positional,\"view\",_placeholder)", + "soft(only_x,\"view\",_placeholder)", + "soft(c_d_no_overlap_bar,\"view\",_placeholder)", + "soft(aggregate,\"view\",e0)", + "soft(aggregate,\"view\",1)", + "soft(encoding,\"view\",1)", + "soft(encoding_field,\"view\",e0)", + "soft(zero,\"view\",e0)", + "soft(type_q,\"view\",e0)", + "soft(type_q,\"view\",1)", + "soft(continuous_y,\"view\",e0)", + "soft(continuous_color,\"view\",1)", + "soft(aggregate_count,\"view\",1)", + "soft(aggregate_mean,\"view\",e0)", + "soft_weight(non_positional_pref,20)", + "soft_weight(zero_positional,1)", + "soft_weight(only_x,1)", + "soft_weight(zero,1)", + "soft_weight(continuous_y,0)", + "soft_weight(continuous_color,10)", + "soft_weight(aggregate_count,0)" + ] + } + ] + }, + { + "Witnesses": [ + { + "Value": [ + "base(\"anchor0\")", + "visualization(\"view\")", + "visualization(\"anchor0\")", + "encoding(\"view\",e0)", + "encoding(\"anchor0\",e0)", + "mark(\"view\",bar)", + "mark(\"anchor0\",bar)", + "zero(\"anchor0\",e0)", + "aggregate(\"anchor0\",e0,mean)", + "channel(\"anchor0\",e0,x)", + "field(\"anchor0\",e0,\"IMDB_Rating\")", + "soft(agg_dim,\"anchor0\",_placeholder)", + "soft(c_d_no_overlap_bar,\"anchor0\",_placeholder)", + "soft(aggregate,\"anchor0\",e0)", + "soft(encoding,\"view\",e0)", + "soft(encoding,\"anchor0\",e0)", + "soft(encoding_field,\"anchor0\",e0)", + "soft(type_q,\"anchor0\",e0)", + "soft(continuous_x,\"anchor0\",e0)", + "soft(aggregate_mean,\"anchor0\",e0)", + "type(\"anchor0\",e0,quantitative)", + "soft_weight(agg_dim,2)", + "soft_weight(c_d_no_overlap_bar,0)", + "soft_weight(aggregate,4)", + "soft_weight(encoding,0)", + "soft_weight(encoding_field,6)", + "soft_weight(type_q,0)", + "soft_weight(continuous_x,0)", + "soft_weight(aggregate_mean,1)", + "encoding(\"view\",1)", + "channel(\"view\",1,y)", + "compare(edit_add_y_count,\"anchor0\",\"view\",1,count)", + "aggregate(\"view\",1,count)", + "field(\"view\",e0,\"IMDB_Rating\")", + "channel(\"view\",e0,color)", + "compare(edit_add_color,\"anchor0\",\"view\",e0,\"IMDB_Rating\")", + "compare(edit_remove_x,\"anchor0\",\"view\",e0,\"IMDB_Rating\")", + "compare(edit_move_x_color,\"anchor0\",\"view\",e0,e0)", + "compare(edit_scale,\"anchor0\",\"view\",e0,e0)", + "zero(\"view\",1)", + "aggregate(\"view\",e0,mean)", + "compare_weight(edit_add_y_count,458)", + "compare_weight(edit_add_color,455)", + "compare_weight(edit_remove_x,459)", + "compare_weight(edit_move_x_color,446)", + "compare_weight(edit_scale,60)", + "type(\"view\",e0,quantitative)", + "type(\"view\",1,quantitative)", + "soft(non_positional_pref,\"view\",_placeholder)", + "soft(agg_dim,\"view\",_placeholder)", + "soft(only_x,\"view\",_placeholder)", + "soft(c_d_no_overlap_bar,\"view\",_placeholder)", + "soft(aggregate,\"view\",e0)", + "soft(aggregate,\"view\",1)", + "soft(encoding,\"view\",1)", + "soft(encoding_field,\"view\",e0)", + "soft(zero,\"view\",e0)", + "soft(type_q,\"view\",e0)", + "soft(type_q,\"view\",1)", + "soft(continuous_y,\"view\",1)", + "soft(continuous_color,\"view\",e0)", + "soft(aggregate_count,\"view\",1)", + "soft(aggregate_mean,\"view\",e0)", + "soft_weight(non_positional_pref,20)", + "soft_weight(only_x,1)", + "soft_weight(zero,1)", + "soft_weight(continuous_y,0)", + "soft_weight(continuous_color,10)", + "soft_weight(aggregate_count,0)" ] } ] -oops! - } + }, + {} ], - "Result": "OPTIMUM FOUND", - "Models": { - "Number": 4, - "More": "yes", - "Optimum": "yes", - "Optimal": 1, - "Costs": [ - 461, 48 - ] - }, - "Calls": 1, + "Result": "UNSATISFIABLE", + "Models": { "Number": 44, "More": "no" }, + "Calls": 13, "Time": { - "Total": 0.098, - "Solve": 0.000, - "Model": 0.000, - "Unsat": 0.000, - "CPU": 0.097 - } + "Total": 0.112, + "Solve": 0.006, + "Model": 0.002, + "Unsat": 0.002, + "CPU": 0.119 + }, + "Threads": 4, + "Winner": 0 } From 86315a8cc1ddebd3bd2cfaa4ed4a2a7b4dcf6b80 Mon Sep 17 00:00:00 2001 From: Halden Lin Date: Mon, 16 Sep 2019 00:30:19 -0700 Subject: [PATCH 21/25] Fix stack output bug. --- asp/output.lp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/asp/output.lp b/asp/output.lp index faa6e4b..f4fda15 100644 --- a/asp/output.lp +++ b/asp/output.lp @@ -13,7 +13,7 @@ #show field/3. #show aggregate/3. #show bin/3. -#show stack/3. +#show stack/2. #show log/2. #show zero/2. From 4fccf267dcc586dccc8f5bdbdac0d5c82b5169df Mon Sep 17 00:00:00 2001 From: Halden Lin Date: Wed, 18 Sep 2019 10:45:17 -0700 Subject: [PATCH 22/25] Fix bugs. --- asp/compare.lp | 234 +++++------ asp/generate.lp | 1 - asp/optimize_draco.lp | 6 +- asp/optimize_graphscape.lp | 6 +- asp/weights.lp | 2 +- draco/run.py | 4 +- output.json | 825 ++----------------------------------- output2.json | 74 ++++ 8 files changed, 240 insertions(+), 912 deletions(-) create mode 100644 output2.json diff --git a/asp/compare.lp b/asp/compare.lp index 1a51346..26d7934 100644 --- a/asp/compare.lp +++ b/asp/compare.lp @@ -34,120 +34,120 @@ compare(edit_text_tick,V1,V2,tick,text) :- comparable(V1,V2), mark(V1,tick), mar % ENCODING EDITS -compare(edit_add_x,V1,V2,E2,F2) :- not compare(edit_add_x_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,x), field(V2,E2,F2), not channel(V1,_,x). -compare(edit_add_y,V1,V2,E2,F2) :- not compare(edit_add_y_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,y), field(V2,E2,F2), not channel(V1,_,y). -compare(edit_add_color,V1,V2,E2,F2) :- not compare(edit_add_color_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,color), field(V2,E2,F2), not channel(V1,_,color). -compare(edit_add_shape,V1,V2,E2,F2) :- not compare(edit_add_shape_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,shape), field(V2,E2,F2), not channel(V1,_,shape). -compare(edit_add_size,V1,V2,E2,F2) :- not compare(edit_add_size_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,size), field(V2,E2,F2), not channel(V1,_,size). -compare(edit_add_row,V1,V2,E2,F2) :- not compare(edit_add_row_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,row), field(V2,E2,F2), not channel(V1,_,row). -compare(edit_add_column,V1,V2,E2,F2) :- not compare(edit_add_column_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,column), field(V2,E2,F2), not channel(V1,_,column). -compare(edit_add_text,V1,V2,E2,F2) :- not compare(edit_add_text_count,V1,V2,E2,count), comparable(V1,V2), channel(V2,E2,text), field(V2,E2,F2), not channel(V1,_,text). -compare(edit_add_x_count,V1,V2,E2,count) :- comparable(V1,V2), channel(V2,E2,x), aggregate(V2,E2,count), not channel(V1,_,x). -compare(edit_add_y_count,V1,V2,E2,count) :- comparable(V1,V2), channel(V2,E2,y), aggregate(V2,E2,count), not channel(V1,_,y). -compare(edit_add_color_count,V1,V2,E2,count) :- comparable(V1,V2), channel(V2,E2,color), aggregate(V2,E2,count), not channel(V1,_,color). -compare(edit_add_shape_count,V1,V2,E2,count) :- comparable(V1,V2), channel(V2,E2,shape), aggregate(V2,E2,count), not channel(V1,_,shape). -compare(edit_add_size_count,V1,V2,E2,count) :- comparable(V1,V2), channel(V2,E2,size), aggregate(V2,E2,count), not channel(V1,_,size). -compare(edit_add_row_count,V1,V2,E2,count) :- comparable(V1,V2), channel(V2,E2,row), aggregate(V2,E2,count), not channel(V1,_,row). -compare(edit_add_column_count,V1,V2,E2,count) :- comparable(V1,V2), channel(V2,E2,column), aggregate(V2,E2,count), not channel(V1,_,column). -compare(edit_add_text_count,V1,V2,E2,count) :- comparable(V1,V2), channel(V2,E2,text), aggregate(V2,E2,count), not channel(V1,_,text). -compare(edit_remove_x_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,x), field(V1,E1,F1), not channel(V2,_,x), aggregate(V1,E1,count). -compare(edit_remove_y_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,y), field(V1,E1,F1), not channel(V2,_,y), aggregate(V1,E1,count). -compare(edit_remove_color_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,color), field(V1,E1,F1), not channel(V2,_,color), aggregate(V1,E1,count). -compare(edit_remove_shape_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,shape), field(V1,E1,F1), not channel(V2,_,shape), aggregate(V1,E1,count). -compare(edit_remove_size_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,size), field(V1,E1,F1), not channel(V2,_,size), aggregate(V1,E1,count). -compare(edit_remove_row_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,row), field(V1,E1,F1), not channel(V2,_,row), aggregate(V1,E1,count). -compare(edit_remove_column_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,column), field(V1,E1,F1), not channel(V2,_,column), aggregate(V1,E1,count). -compare(edit_remove_text_count,V1,V2,E1,F1) :- comparable(V1,V2), channel(V1,E1,text), field(V1,E1,F1), not channel(V2,_,text), aggregate(V1,E1,count). -compare(edit_remove_x,V1,V2,E1,F1) :- not compare(edit_remove_x_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,x), field(V1,E1,F1), not channel(V2,_,x). -compare(edit_remove_y,V1,V2,E1,F1) :- not compare(edit_remove_y_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,y), field(V1,E1,F1), not channel(V2,_,y). -compare(edit_remove_color,V1,V2,E1,F1) :- not compare(edit_remove_color_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,color), field(V1,E1,F1), not channel(V2,_,color). -compare(edit_remove_shape,V1,V2,E1,F1) :- not compare(edit_remove_shape_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,shape), field(V1,E1,F1), not channel(V2,_,shape). -compare(edit_remove_size,V1,V2,E1,F1) :- not compare(edit_remove_size_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,size), field(V1,E1,F1), not channel(V2,_,size). -compare(edit_remove_row,V1,V2,E1,F1) :- not compare(edit_remove_row_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,row), field(V1,E1,F1), not channel(V2,_,row). -compare(edit_remove_column,V1,V2,E1,F1) :- not compare(edit_remove_column_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,column), field(V1,E1,F1), not channel(V2,_,column). -compare(edit_remove_text,V1,V2,E1,F1) :- not compare(edit_remove_text_count,V1,V2,E1,count), comparable(V1,V2), channel(V1,E1,text), field(V1,E1,F1), not channel(V2,_,text). -compare(edit_modify_x,V1,V2,E1,F2) :- not compare(edit_modify_x_add_count,V1,V2,E1,F2), not compare(edit_modify_x_remove_count,V1,V2,E1,F2), comparable(V1,V2), channel(V1,E1,x), channel(V2,E2,x), field(V2,E2,F2), not field(V1,_,F2). -compare(edit_modify_y,V1,V2,E1,F2) :- not compare(edit_modify_y_add_count,V1,V2,E1,F2), not compare(edit_modify_y_remove_count,V1,V2,E1,F2), comparable(V1,V2), channel(V1,E1,y), channel(V2,E2,y), field(V2,E2,F2), not field(V1,_,F2). -compare(edit_modify_color,V1,V2,E1,F2) :- not compare(edit_modify_color_add_count,V1,V2,E1,F2), not compare(edit_modify_color_remove_count,V1,V2,E1,F2), comparable(V1,V2), channel(V1,E1,color), channel(V2,E2,color), field(V2,E2,F2), not field(V1,_,F2). -compare(edit_modify_shape,V1,V2,E1,F2) :- not compare(edit_modify_shape_add_count,V1,V2,E1,F2), not compare(edit_modify_shape_remove_count,V1,V2,E1,F2), comparable(V1,V2), channel(V1,E1,shape), channel(V2,E2,shape), field(V2,E2,F2), not field(V1,_,F2). -compare(edit_modify_size,V1,V2,E1,F2) :- not compare(edit_modify_size_add_count,V1,V2,E1,F2), not compare(edit_modify_size_remove_count,V1,V2,E1,F2), comparable(V1,V2), channel(V1,E1,size), channel(V2,E2,size), field(V2,E2,F2), not field(V1,_,F2). -compare(edit_modify_row,V1,V2,E1,F2) :- not compare(edit_modify_row_add_count,V1,V2,E1,F2), not compare(edit_modify_row_remove_count,V1,V2,E1,F2), comparable(V1,V2), channel(V1,E1,row), channel(V2,E2,row), field(V2,E2,F2), not field(V1,_,F2). -compare(edit_modify_column,V1,V2,E1,F2) :- not compare(edit_modify_column_add_count,V1,V2,E1,F2), not compare(edit_modify_column_remove_count,V1,V2,E1,F2), comparable(V1,V2), channel(V1,E1,column), channel(V2,E2,column), field(V2,E2,F2), not field(V1,_,F2). -compare(edit_modify_text,V1,V2,E1,F2) :- not compare(edit_modify_text_add_count,V1,V2,E1,F2), not compare(edit_modify_text_remove_count,V1,V2,E1,F2), comparable(V1,V2), channel(V1,E1,text), channel(V2,E2,text), field(V2,E2,F2), not field(V1,_,F2). -compare(edit_modify_x_add_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,x), channel(V2,E2,x), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_modify_y_add_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,y), channel(V2,E2,y), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_modify_color_add_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,color), channel(V2,E2,color), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_modify_shape_add_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,shape), channel(V2,E2,shape), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_modify_size_add_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,size), channel(V2,E2,size), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_modify_row_add_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,row), channel(V2,E2,row), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_modify_column_add_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,column), channel(V2,E2,column), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_modify_text_add_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,text), channel(V2,E2,text), field(V2,E2,F2), not field(V1,_,F2), aggregate(V2,E2,count). -compare(edit_modify_x_remove_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,x), channel(V2,E2,x), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). -compare(edit_modify_y_remove_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,y), channel(V2,E2,y), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). -compare(edit_modify_color_remove_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,color), channel(V2,E2,color), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). -compare(edit_modify_shape_remove_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,shape), channel(V2,E2,shape), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). -compare(edit_modify_size_remove_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,size), channel(V2,E2,size), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). -compare(edit_modify_row_remove_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,row), channel(V2,E2,row), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). -compare(edit_modify_column_remove_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,column), channel(V2,E2,column), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). -compare(edit_modify_text_remove_count,V1,V2,E1,F2) :- comparable(V1,V2), channel(V1,E1,text), channel(V2,E2,text), field(V2,E2,F2), not field(V1,_,F2), aggregate(V1,E1,count). -compare(edit_move_x_row,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,row). -compare(edit_move_x_column,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,column). -compare(edit_move_x_size,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,size). -compare(edit_move_x_shape,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,shape). -compare(edit_move_x_color,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,color). -compare(edit_move_x_y,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,y). -compare(edit_move_x_text,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,text). -compare(edit_move_y_row,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,row). -compare(edit_move_y_column,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,column). -compare(edit_move_y_size,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,size). -compare(edit_move_y_shape,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,shape). -compare(edit_move_y_color,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,color). -compare(edit_move_y_x,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,x). -compare(edit_move_y_text,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,text). -compare(edit_move_color_row,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,row). -compare(edit_move_color_column,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,column). -compare(edit_move_color_size,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,size). -compare(edit_move_color_shape,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,shape). -compare(edit_move_color_y,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,y). -compare(edit_move_color_x,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,x). -compare(edit_move_color_text,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,text). -compare(edit_move_shape_row,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,row). -compare(edit_move_shape_column,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,column). -compare(edit_move_shape_size,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,size). -compare(edit_move_shape_color,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,color). -compare(edit_move_shape_y,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,y). -compare(edit_move_shape_x,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,x). -compare(edit_move_shape_text,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,text). -compare(edit_move_size_row,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,row). -compare(edit_move_size_column,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,column). -compare(edit_move_size_shape,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,shape). -compare(edit_move_size_color,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,color). -compare(edit_move_size_y,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,y). -compare(edit_move_size_x,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,x). -compare(edit_move_size_text,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,text). -compare(edit_move_text_row,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,row). -compare(edit_move_text_column,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,column). -compare(edit_move_text_shape,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,shape). -compare(edit_move_text_color,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,color). -compare(edit_move_text_y,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,y). -compare(edit_move_text_x,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,x). -compare(edit_move_text_size,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,size). -compare(edit_move_column_row,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,row). -compare(edit_move_column_size,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,size). -compare(edit_move_column_shape,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,shape). -compare(edit_move_column_color,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,color). -compare(edit_move_column_y,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,y). -compare(edit_move_column_x,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,x). -compare(edit_move_column_text,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,text). -compare(edit_move_row_column,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,column). -compare(edit_move_row_size,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,size). -compare(edit_move_row_shape,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,shape). -compare(edit_move_row_color,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,color). -compare(edit_move_row_y,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,y). -compare(edit_move_row_x,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,x). -compare(edit_move_row_text,V1,V2,E1A,E2A) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,text). -compare(edit_swap_x_y,V1,V2,E1A,E2A) :- comparable(V1,V2), channel(V1,E1A,x), channel(V1,E1B,y), channel(V2,E2A,x), channel(V2,E2B,y), field(V1,E1A,FA), field(V2,E2B,FA), field(V1,E1B,FB), field(V2,E2A,FB), E2A > E2B, E1A > E1B. -compare(edit_swap_row_column,V1,V2,E1A,E2A) :- comparable(V1,V2), channel(V1,E1A,row), channel(V1,E1B,column), channel(V2,E2A,row), channel(V2,E2B,column), field(V1,E1A,FA), field(V2,E2B,FA), field(V1,E1B,FB), field(V2,E2A,FB), E2A > E2B, E1A > E1B. +compare(edit_add_x,V1,V2,E2,F2,add,none,x) :- not compare(edit_add_x_count,V1,V2,E2,count,add,none,x), not compare(_,V1,V2,_,E2,move,_,x), comparable(V1,V2), channel(V2,E2,x), field(V2,E2,F2), not channel(V1,_,x). +compare(edit_add_y,V1,V2,E2,F2,add,none,y) :- not compare(edit_add_y_count,V1,V2,E2,count,add,none,y), not compare(_,V1,V2,_,E2,move,_,y), comparable(V1,V2), channel(V2,E2,y), field(V2,E2,F2), not channel(V1,_,y). +compare(edit_add_color,V1,V2,E2,F2,add,none,color) :- not compare(edit_add_color_count,V1,V2,E2,count,add,none,color), not compare(_,V1,V2,_,E2,move,_,color), comparable(V1,V2), channel(V2,E2,color), field(V2,E2,F2), not channel(V1,_,color). +compare(edit_add_shape,V1,V2,E2,F2,add,none,shape) :- not compare(edit_add_shape_count,V1,V2,E2,count,add,none,shape), not compare(_,V1,V2,_,E2,move,_,shape), comparable(V1,V2), channel(V2,E2,shape), field(V2,E2,F2), not channel(V1,_,shape). +compare(edit_add_size,V1,V2,E2,F2,add,none,size) :- not compare(edit_add_size_count,V1,V2,E2,count,add,none,size), not compare(_,V1,V2,_,E2,move,_,size), comparable(V1,V2), channel(V2,E2,size), field(V2,E2,F2), not channel(V1,_,size). +compare(edit_add_row,V1,V2,E2,F2,add,none,row) :- not compare(edit_add_row_count,V1,V2,E2,count,add,none,row), not compare(_,V1,V2,_,E2,move,_,row), comparable(V1,V2), channel(V2,E2,row), field(V2,E2,F2), not channel(V1,_,row). +compare(edit_add_column,V1,V2,E2,F2,add,none,column) :- not compare(edit_add_column_count,V1,V2,E2,count,add,none,column), not compare(_,V1,V2,_,E2,move,_,column), comparable(V1,V2), channel(V2,E2,column), field(V2,E2,F2), not channel(V1,_,column). +compare(edit_add_text,V1,V2,E2,F2,add,none,text) :- not compare(edit_add_text_count,V1,V2,E2,count,add,none,text), not compare(_,V1,V2,_,E2,move,_,text), comparable(V1,V2), channel(V2,E2,text), field(V2,E2,F2), not channel(V1,_,text). +compare(edit_add_x_count,V1,V2,E2,count,add,none,x) :- not compare(_,V1,V2,_,E2,move,_,x), comparable(V1,V2), channel(V2,E2,x), aggregate(V2,E2,count), not channel(V1,_,x). +compare(edit_add_y_count,V1,V2,E2,count,add,none,y) :- not compare(_,V1,V2,_,E2,move,_,y), comparable(V1,V2), channel(V2,E2,y), aggregate(V2,E2,count), not channel(V1,_,y). +compare(edit_add_color_count,V1,V2,E2,count,add,none,color) :- not compare(_,V1,V2,_,E2,move,_,color), comparable(V1,V2), channel(V2,E2,color), aggregate(V2,E2,count), not channel(V1,_,color). +compare(edit_add_shape_count,V1,V2,E2,count,add,none,shape) :- not compare(_,V1,V2,_,E2,move,_,shape), comparable(V1,V2), channel(V2,E2,shape), aggregate(V2,E2,count), not channel(V1,_,shape). +compare(edit_add_size_count,V1,V2,E2,count,add,none,size) :- not compare(_,V1,V2,_,E2,move,_,size), comparable(V1,V2), channel(V2,E2,size), aggregate(V2,E2,count), not channel(V1,_,size). +compare(edit_add_row_count,V1,V2,E2,count,add,none,row) :- not compare(_,V1,V2,_,E2,move,_,row), comparable(V1,V2), channel(V2,E2,row), aggregate(V2,E2,count), not channel(V1,_,row). +compare(edit_add_column_count,V1,V2,E2,count,add,none,column) :- not compare(_,V1,V2,_,E2,move,_,column), comparable(V1,V2), channel(V2,E2,column), aggregate(V2,E2,count), not channel(V1,_,column). +compare(edit_add_text_count,V1,V2,E2,count,add,none,text) :- not compare(_,V1,V2,_,E2,move,_,text), comparable(V1,V2), channel(V2,E2,text), aggregate(V2,E2,count), not channel(V1,_,text). +compare(edit_remove_x_count,V1,V2,E2,count,remove,x,none) :- not compare(_,V1,V2,E1,_,move,x,_), comparable(V1,V2), channel(V1,E1,x), aggregate(V2,E2,count), not channel(V2,_,x). +compare(edit_remove_y_count,V1,V2,E2,count,remove,y,none) :- not compare(_,V1,V2,E1,_,move,y,_), comparable(V1,V2), channel(V1,E1,y), aggregate(V2,E2,count), not channel(V2,_,y). +compare(edit_remove_color_count,V1,V2,E2,count,remove,color,none) :- not compare(_,V1,V2,E1,_,move,color,_), comparable(V1,V2), channel(V1,E1,color), aggregate(V2,E2,count), not channel(V2,_,color). +compare(edit_remove_shape_count,V1,V2,E2,count,remove,shape,none) :- not compare(_,V1,V2,E1,_,move,shape,_), comparable(V1,V2), channel(V1,E1,shape), aggregate(V2,E2,count), not channel(V2,_,shape). +compare(edit_remove_size_count,V1,V2,E2,count,remove,size,none) :- not compare(_,V1,V2,E1,_,move,size,_), comparable(V1,V2), channel(V1,E1,size), aggregate(V2,E2,count), not channel(V2,_,size). +compare(edit_remove_row_count,V1,V2,E2,count,remove,row,none) :- not compare(_,V1,V2,E1,_,move,row,_), comparable(V1,V2), channel(V1,E1,row), aggregate(V2,E2,count), not channel(V2,_,row). +compare(edit_remove_column_count,V1,V2,E2,count,remove,column,none) :- not compare(_,V1,V2,E1,_,move,column,_), comparable(V1,V2), channel(V1,E1,column), aggregate(V2,E2,count), not channel(V2,_,column). +compare(edit_remove_text_count,V1,V2,E2,count,remove,text,none) :- not compare(_,V1,V2,E1,_,move,text,_), comparable(V1,V2), channel(V1,E1,text), aggregate(V2,E2,count), not channel(V2,_,text). +compare(edit_remove_x,V1,V2,E1,F1,remove,x,none) :- not compare(edit_remove_x_count,V1,V2,E1,count,remove,x,none), not compare(_,V1,V2,E1,_,move,x,_), comparable(V1,V2), channel(V1,E1,x), field(V1,E1,F1), not channel(V2,_,x). +compare(edit_remove_y,V1,V2,E1,F1,remove,y,none) :- not compare(edit_remove_y_count,V1,V2,E1,count,remove,y,none), not compare(_,V1,V2,E1,_,move,y,_), comparable(V1,V2), channel(V1,E1,y), field(V1,E1,F1), not channel(V2,_,y). +compare(edit_remove_color,V1,V2,E1,F1,remove,color,none) :- not compare(edit_remove_color_count,V1,V2,E1,count,remove,color,none), not compare(_,V1,V2,E1,_,move,color,_), comparable(V1,V2), channel(V1,E1,color), field(V1,E1,F1), not channel(V2,_,color). +compare(edit_remove_shape,V1,V2,E1,F1,remove,shape,none) :- not compare(edit_remove_shape_count,V1,V2,E1,count,remove,shape,none), not compare(_,V1,V2,E1,_,move,shape,_), comparable(V1,V2), channel(V1,E1,shape), field(V1,E1,F1), not channel(V2,_,shape). +compare(edit_remove_size,V1,V2,E1,F1,remove,size,none) :- not compare(edit_remove_size_count,V1,V2,E1,count,remove,size,none), not compare(_,V1,V2,E1,_,move,size,_), comparable(V1,V2), channel(V1,E1,size), field(V1,E1,F1), not channel(V2,_,size). +compare(edit_remove_row,V1,V2,E1,F1,remove,row,none) :- not compare(edit_remove_row_count,V1,V2,E1,count,remove,row,none), not compare(_,V1,V2,E1,_,move,row,_), comparable(V1,V2), channel(V1,E1,row), field(V1,E1,F1), not channel(V2,_,row). +compare(edit_remove_column,V1,V2,E1,F1,remove,column,none) :- not compare(edit_remove_column_count,V1,V2,E1,count,remove,column,none), not compare(_,V1,V2,E1,_,move,column,_), comparable(V1,V2), channel(V1,E1,column), field(V1,E1,F1), not channel(V2,_,column). +compare(edit_remove_text,V1,V2,E1,F1,remove,text,none) :- not compare(edit_remove_text_count,V1,V2,E1,count,remove,text,none), not compare(_,V1,V2,E1,_,move,text,_), comparable(V1,V2), channel(V1,E1,text), field(V1,E1,F1), not channel(V2,_,text). +compare(edit_modify_x,V1,V2,E1,F2,modify,x,none) :- not compare(edit_modify_x_add_count,V1,V2,E1,count,modify,x,none), not compare(edit_modify_x_remove_count,V1,V2,E1,count,modify,x,none), comparable(V1,V2), channel(V1,E1,x), channel(V2,E2,x), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_y,V1,V2,E1,F2,modify,y,none) :- not compare(edit_modify_y_add_count,V1,V2,E1,count,modify,y,none), not compare(edit_modify_y_remove_count,V1,V2,E1,count,modify,y,none), comparable(V1,V2), channel(V1,E1,y), channel(V2,E2,y), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_color,V1,V2,E1,F2,modify,color,none) :- not compare(edit_modify_color_add_count,V1,V2,E1,count,modify,color,none), not compare(edit_modify_color_remove_count,V1,V2,E1,count,modify,color,none), comparable(V1,V2), channel(V1,E1,color), channel(V2,E2,color), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_shape,V1,V2,E1,F2,modify,shape,none) :- not compare(edit_modify_shape_add_count,V1,V2,E1,count,modify,shape,none), not compare(edit_modify_shape_remove_count,V1,V2,E1,count,modify,shape,none), comparable(V1,V2), channel(V1,E1,shape), channel(V2,E2,shape), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_size,V1,V2,E1,F2,modify,size,none) :- not compare(edit_modify_size_add_count,V1,V2,E1,count,modify,size,none), not compare(edit_modify_size_remove_count,V1,V2,E1,count,modify,size,none), comparable(V1,V2), channel(V1,E1,size), channel(V2,E2,size), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_row,V1,V2,E1,F2,modify,row,none) :- not compare(edit_modify_row_add_count,V1,V2,E1,count,modify,row,none), not compare(edit_modify_row_remove_count,V1,V2,E1,count,modify,row,none), comparable(V1,V2), channel(V1,E1,row), channel(V2,E2,row), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_column,V1,V2,E1,F2,modify,column,none) :- not compare(edit_modify_column_add_count,V1,V2,E1,count,modify,column,none), not compare(edit_modify_column_remove_count,V1,V2,E1,count,modify,column,none), comparable(V1,V2), channel(V1,E1,column), channel(V2,E2,column), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_text,V1,V2,E1,F2,modify,text,none) :- not compare(edit_modify_text_add_count,V1,V2,E1,count,modify,text,none), not compare(edit_modify_text_remove_count,V1,V2,E1,count,modify,text,none), comparable(V1,V2), channel(V1,E1,text), channel(V2,E2,text), field(V2,E2,F2), not field(V1,_,F2). +compare(edit_modify_x_add_count,V1,V2,E1,count,modify,x,none) :- comparable(V1,V2), channel(V1,E1,x), channel(V2,E2,x), not aggregate(V1,E1,count), aggregate(V2,E2,count). +compare(edit_modify_y_add_count,V1,V2,E1,count,modify,y,none) :- comparable(V1,V2), channel(V1,E1,y), channel(V2,E2,y), not aggregate(V1,E1,count), aggregate(V2,E2,count). +compare(edit_modify_color_add_count,V1,V2,E1,count,modify,color,none) :- comparable(V1,V2), channel(V1,E1,color), channel(V2,E2,color), not aggregate(V1,E1,count), aggregate(V2,E2,count). +compare(edit_modify_shape_add_count,V1,V2,E1,count,modify,shape,none) :- comparable(V1,V2), channel(V1,E1,shape), channel(V2,E2,shape), not aggregate(V1,E1,count), aggregate(V2,E2,count). +compare(edit_modify_size_add_count,V1,V2,E1,count,modify,size,none) :- comparable(V1,V2), channel(V1,E1,size), channel(V2,E2,size), not aggregate(V1,E1,count), aggregate(V2,E2,count). +compare(edit_modify_row_add_count,V1,V2,E1,count,modify,row,none) :- comparable(V1,V2), channel(V1,E1,row), channel(V2,E2,row), not aggregate(V1,E1,count), aggregate(V2,E2,count). +compare(edit_modify_column_add_count,V1,V2,E1,count,modify,column,none) :- comparable(V1,V2), channel(V1,E1,column), channel(V2,E2,column), not aggregate(V1,E1,count), aggregate(V2,E2,count). +compare(edit_modify_text_add_count,V1,V2,E1,count,modify,text,none) :- comparable(V1,V2), channel(V1,E1,text), channel(V2,E2,text), not aggregate(V1,E1,count), aggregate(V2,E2,count). +compare(edit_modify_x_remove_count,V1,V2,E1,count,modify,x,none) :- comparable(V1,V2), channel(V1,E1,x), channel(V2,E2,x), aggregate(V1,E1,count), not aggregate(V2,E2,count). +compare(edit_modify_y_remove_count,V1,V2,E1,count,modify,y,none) :- comparable(V1,V2), channel(V1,E1,y), channel(V2,E2,y), aggregate(V1,E1,count), not aggregate(V2,E2,count). +compare(edit_modify_color_remove_count,V1,V2,E1,count,modify,color,none) :- comparable(V1,V2), channel(V1,E1,color), channel(V2,E2,color), aggregate(V1,E1,count), not aggregate(V2,E2,count). +compare(edit_modify_shape_remove_count,V1,V2,E1,count,modify,shape,none) :- comparable(V1,V2), channel(V1,E1,shape), channel(V2,E2,shape), aggregate(V1,E1,count), not aggregate(V2,E2,count). +compare(edit_modify_size_remove_count,V1,V2,E1,count,modify,size,none) :- comparable(V1,V2), channel(V1,E1,size), channel(V2,E2,size), aggregate(V1,E1,count), not aggregate(V2,E2,count). +compare(edit_modify_row_remove_count,V1,V2,E1,count,modify,row,none) :- comparable(V1,V2), channel(V1,E1,row), channel(V2,E2,row), aggregate(V1,E1,count), not aggregate(V2,E2,count). +compare(edit_modify_column_remove_count,V1,V2,E1,count,modify,column,none) :- comparable(V1,V2), channel(V1,E1,column), channel(V2,E2,column), aggregate(V1,E1,count), not aggregate(V2,E2,count). +compare(edit_modify_text_remove_count,V1,V2,E1,count,modify,text,none) :- comparable(V1,V2), channel(V1,E1,text), channel(V2,E2,text), aggregate(V1,E1,count), not aggregate(V2,E2,count). +compare(edit_move_x_row,V1,V2,E1A,E2A,move,x,row) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,row). +compare(edit_move_x_column,V1,V2,E1A,E2A,move,x,column) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,column). +compare(edit_move_x_size,V1,V2,E1A,E2A,move,x,size) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,size). +compare(edit_move_x_shape,V1,V2,E1A,E2A,move,x,shape) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,shape). +compare(edit_move_x_color,V1,V2,E1A,E2A,move,x,color) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,color). +compare(edit_move_x_y,V1,V2,E1A,E2A,move,x,y) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,y). +compare(edit_move_x_text,V1,V2,E1A,E2A,move,x,text) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,x), channel(V2,E2A,text). +compare(edit_move_y_row,V1,V2,E1A,E2A,move,y,row) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,row). +compare(edit_move_y_column,V1,V2,E1A,E2A,move,y,column) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,column). +compare(edit_move_y_size,V1,V2,E1A,E2A,move,y,size) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,size). +compare(edit_move_y_shape,V1,V2,E1A,E2A,move,y,shape) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,shape). +compare(edit_move_y_color,V1,V2,E1A,E2A,move,y,color) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,color). +compare(edit_move_y_x,V1,V2,E1A,E2A,move,y,x) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,x). +compare(edit_move_y_text,V1,V2,E1A,E2A,move,y,text) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,y), channel(V2,E2A,text). +compare(edit_move_color_row,V1,V2,E1A,E2A,move,color,row) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,row). +compare(edit_move_color_column,V1,V2,E1A,E2A,move,color,column) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,column). +compare(edit_move_color_size,V1,V2,E1A,E2A,move,color,size) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,size). +compare(edit_move_color_shape,V1,V2,E1A,E2A,move,color,shape) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,shape). +compare(edit_move_color_y,V1,V2,E1A,E2A,move,color,y) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,y). +compare(edit_move_color_x,V1,V2,E1A,E2A,move,color,x) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,x). +compare(edit_move_color_text,V1,V2,E1A,E2A,move,color,text) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,color), channel(V2,E2A,text). +compare(edit_move_shape_row,V1,V2,E1A,E2A,move,shape,row) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,row). +compare(edit_move_shape_column,V1,V2,E1A,E2A,move,shape,column) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,column). +compare(edit_move_shape_size,V1,V2,E1A,E2A,move,shape,size) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,size). +compare(edit_move_shape_color,V1,V2,E1A,E2A,move,shape,color) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,color). +compare(edit_move_shape_y,V1,V2,E1A,E2A,move,shape,y) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,y). +compare(edit_move_shape_x,V1,V2,E1A,E2A,move,shape,x) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,x). +compare(edit_move_shape_text,V1,V2,E1A,E2A,move,shape,text) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,shape), channel(V2,E2A,text). +compare(edit_move_size_row,V1,V2,E1A,E2A,move,size,row) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,row). +compare(edit_move_size_column,V1,V2,E1A,E2A,move,size,column) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,column). +compare(edit_move_size_shape,V1,V2,E1A,E2A,move,size,shape) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,shape). +compare(edit_move_size_color,V1,V2,E1A,E2A,move,size,color) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,color). +compare(edit_move_size_y,V1,V2,E1A,E2A,move,size,y) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,y). +compare(edit_move_size_x,V1,V2,E1A,E2A,move,size,x) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,x). +compare(edit_move_size_text,V1,V2,E1A,E2A,move,size,text) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,size), channel(V2,E2A,text). +compare(edit_move_text_row,V1,V2,E1A,E2A,move,text,row) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,row). +compare(edit_move_text_column,V1,V2,E1A,E2A,move,text,column) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,column). +compare(edit_move_text_shape,V1,V2,E1A,E2A,move,text,shape) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,shape). +compare(edit_move_text_color,V1,V2,E1A,E2A,move,text,color) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,color). +compare(edit_move_text_y,V1,V2,E1A,E2A,move,text,y) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,y). +compare(edit_move_text_x,V1,V2,E1A,E2A,move,text,x) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,x). +compare(edit_move_text_size,V1,V2,E1A,E2A,move,text,size) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,text), channel(V2,E2A,size). +compare(edit_move_column_row,V1,V2,E1A,E2A,move,column,row) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,row). +compare(edit_move_column_size,V1,V2,E1A,E2A,move,column,size) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,size). +compare(edit_move_column_shape,V1,V2,E1A,E2A,move,column,shape) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,shape). +compare(edit_move_column_color,V1,V2,E1A,E2A,move,column,color) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,color). +compare(edit_move_column_y,V1,V2,E1A,E2A,move,column,y) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,y). +compare(edit_move_column_x,V1,V2,E1A,E2A,move,column,x) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,x). +compare(edit_move_column_text,V1,V2,E1A,E2A,move,column,text) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,column), channel(V2,E2A,text). +compare(edit_move_row_column,V1,V2,E1A,E2A,move,row,column) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,column). +compare(edit_move_row_size,V1,V2,E1A,E2A,move,row,size) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,size). +compare(edit_move_row_shape,V1,V2,E1A,E2A,move,row,shape) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,shape). +compare(edit_move_row_color,V1,V2,E1A,E2A,move,row,color) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,color). +compare(edit_move_row_y,V1,V2,E1A,E2A,move,row,y) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,y). +compare(edit_move_row_x,V1,V2,E1A,E2A,move,row,x) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,x). +compare(edit_move_row_text,V1,V2,E1A,E2A,move,row,text) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,text). +compare(edit_swap_x_y,V1,V2,E1A,E2A,swap,x,y) :- comparable(V1,V2), channel(V1,E1A,x), channel(V1,E1B,y), channel(V2,E2A,x), channel(V2,E2B,y), field(V1,E1A,FA), field(V2,E2B,FA), field(V1,E1B,FB), field(V2,E2A,FB), E2A > E2B, E1A > E1B. +compare(edit_swap_row_column,V1,V2,E1A,E2A,swap,row,column) :- comparable(V1,V2), channel(V1,E1A,row), channel(V1,E1B,column), channel(V2,E2A,row), channel(V2,E2B,column), field(V1,E1A,FA), field(V2,E2B,FA), field(V1,E1B,FB), field(V2,E2A,FB), E2A > E2B, E1A > E1B. compare(edit_scale,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), log(V1,E1), not log(V2,E2). @@ -159,5 +159,7 @@ compare(edit_bin,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2, compare(edit_bin,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), not bin(V1,E1,_), bin(V2,E2,_). compare(edit_aggregate,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), aggregate(V1,E1,A1), aggregate(V2,E2,A2), A1 != A2. -compare(edit_aggregate,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), aggregate(V1,E1,_), not aggregate(V2,E2,_). -compare(edit_aggregate,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), not aggregate(V1,E1,_), aggregate(V2,E2,_). +compare(edit_aggregate,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), aggregate(V1,E1,_), not aggregate(V2,E2,_), not compare(_,V1,V2,E2,count,_,_,_). +compare(edit_aggregate,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), not aggregate(V1,E1,_), aggregate(V2,E2,_), not compare(_,V1,V2,E2,count,_,_,_). + +compare(NAME,V1,V2,A,B) :- compare(NAME,V1,V2,A,B,_,_,_). diff --git a/asp/generate.lp b/asp/generate.lp index 055f214..9108efe 100644 --- a/asp/generate.lp +++ b/asp/generate.lp @@ -36,4 +36,3 @@ obj_id(1..max_extra_encs). 0 { stack(V,S): stacking(S) } 1 :- visualization(V), not base(V). :- field(V,E1,F1), field(V,E2,F2), E1 > E2, F1 <= F2. -% :- channel(V,E1,C1), channel(V,E2,C2), E1 > E2, C1 <= C2. diff --git a/asp/optimize_draco.lp b/asp/optimize_draco.lp index fde90cc..edaf657 100644 --- a/asp/optimize_draco.lp +++ b/asp/optimize_draco.lp @@ -1,4 +1,4 @@ -% #minimize { W@2,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. -% #minimize { W@1,F,V1,V2,A,B: compare_weight(F,W), compare(F,V1,V2,A,B) }. +#minimize { W@2,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. +#minimize { W@1,F,V1,V2,A,B: compare_weight(F,W), compare(F,V1,V2,A,B) }. -#minimize { W,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. +% #minimize { W,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. diff --git a/asp/optimize_graphscape.lp b/asp/optimize_graphscape.lp index a207f29..0ab9e40 100644 --- a/asp/optimize_graphscape.lp +++ b/asp/optimize_graphscape.lp @@ -1,4 +1,2 @@ -% #minimize { W@1,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. -% #minimize { W@2,F,V1,V2,A,B: compare_weight(F,W), compare(F,V1,V2,A,B) }. - -#minimize { W,F,V1,V2,A,B: compare_weight(F,W), compare(F,V1,V2,A,B) }. +#minimize { W@1,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. +#minimize { W@2,F,V1,V2,A,B: compare_weight(F,W), compare(F,V1,V2,A,B) }. diff --git a/asp/weights.lp b/asp/weights.lp index 3e58bf4..41a0836 100644 --- a/asp/weights.lp +++ b/asp/weights.lp @@ -21,7 +21,7 @@ #const agg_dim_weight = 2. #const only_discrete_weight = 30. #const multiple_non_pos_weight = 3. -#const non_positional_pref_weight = 20. +#const non_positional_pref_weight = 40. #const aggregate_group_by_raw_weight = 20. #const x_y_raw_weight = 1. #const log_weight = 1. diff --git a/draco/run.py b/draco/run.py index 69dc189..67785c5 100644 --- a/draco/run.py +++ b/draco/run.py @@ -129,9 +129,10 @@ def run_clingo( """ # default args files = files or DRACO_LP + files = files.copy() constants = constants or {} - options = ["--outf=2", "--quiet=1,2,2", "--parallel-mode=4"] + options = ["--outf=2", "--quiet=1,2,2", "--seed=0"] if (topk): files.append('topk-py.lp') @@ -155,7 +156,6 @@ def run_clingo( asp_program = b"\n".join(map(load_file, file_names)) + program.encode("utf8") - # print(asp_program.decode("utf8")) if debug: with tempfile.NamedTemporaryFile(mode="w", delete=False) as fd: fd.write(program) diff --git a/output.json b/output.json index 11e8dee..b1495d6 100644 --- a/output.json +++ b/output.json @@ -1,819 +1,74 @@ { "Solver": "clingo version 5.3.0", - "Input": ["stdin"], + "Input": ["test2.lp"], "Call": [ { "Witnesses": [ { "Value": [ - "base(\"anchor0\")", "visualization(\"view\")", - "visualization(\"anchor0\")", "encoding(\"view\",e0)", - "encoding(\"anchor0\",e0)", - "mark(\"view\",bar)", - "mark(\"anchor0\",bar)", - "zero(\"anchor0\",e0)", - "aggregate(\"anchor0\",e0,mean)", - "channel(\"anchor0\",e0,x)", - "field(\"anchor0\",e0,\"IMDB_Rating\")", - "soft(agg_dim,\"anchor0\",_placeholder)", - "soft(c_d_no_overlap_bar,\"anchor0\",_placeholder)", - "soft(aggregate,\"anchor0\",e0)", - "soft(encoding,\"view\",e0)", - "soft(encoding,\"anchor0\",e0)", - "soft(encoding_field,\"anchor0\",e0)", - "soft(type_q,\"anchor0\",e0)", - "soft(continuous_x,\"anchor0\",e0)", - "soft(aggregate_mean,\"anchor0\",e0)", - "type(\"anchor0\",e0,quantitative)", - "soft_weight(agg_dim,2)", - "soft_weight(c_d_no_overlap_bar,0)", - "soft_weight(aggregate,4)", - "soft_weight(encoding,0)", - "soft_weight(encoding_field,6)", - "soft_weight(type_q,0)", - "soft_weight(continuous_x,0)", - "soft_weight(aggregate_mean,1)", - "channel(\"view\",e0,x)", - "field(\"view\",e0,\"IMDB_Rating\")", - "zero(\"view\",e0)", - "aggregate(\"view\",e0,mean)", - "type(\"view\",e0,quantitative)", - "soft(agg_dim,\"view\",_placeholder)", - "soft(c_d_no_overlap_bar,\"view\",_placeholder)", - "soft(aggregate,\"view\",e0)", - "soft(encoding_field,\"view\",e0)", - "soft(type_q,\"view\",e0)", - "soft(continuous_x,\"view\",e0)", - "soft(aggregate_mean,\"view\",e0)" - ] - } - ] - }, - { - "Witnesses": [ - { - "Value": [ - "base(\"anchor0\")", - "visualization(\"view\")", - "visualization(\"anchor0\")", - "encoding(\"view\",e0)", - "encoding(\"anchor0\",e0)", - "mark(\"view\",bar)", - "mark(\"anchor0\",bar)", - "zero(\"anchor0\",e0)", - "aggregate(\"anchor0\",e0,mean)", - "channel(\"anchor0\",e0,x)", - "field(\"anchor0\",e0,\"IMDB_Rating\")", - "soft(agg_dim,\"anchor0\",_placeholder)", - "soft(c_d_no_overlap_bar,\"anchor0\",_placeholder)", - "soft(aggregate,\"anchor0\",e0)", - "soft(encoding,\"view\",e0)", - "soft(encoding,\"anchor0\",e0)", - "soft(encoding_field,\"anchor0\",e0)", - "soft(type_q,\"anchor0\",e0)", - "soft(continuous_x,\"anchor0\",e0)", - "soft(aggregate_mean,\"anchor0\",e0)", - "type(\"anchor0\",e0,quantitative)", - "soft_weight(agg_dim,2)", - "soft_weight(c_d_no_overlap_bar,0)", - "soft_weight(aggregate,4)", - "soft_weight(encoding,0)", - "soft_weight(encoding_field,6)", - "soft_weight(type_q,0)", - "soft_weight(continuous_x,0)", - "soft_weight(aggregate_mean,1)", - "channel(\"view\",e0,x)", - "field(\"view\",e0,\"IMDB_Rating\")", - "compare(edit_scale,\"anchor0\",\"view\",e0,e0)", - "aggregate(\"view\",e0,mean)", - "compare_weight(edit_scale,60)", - "type(\"view\",e0,quantitative)", - "soft(agg_dim,\"view\",_placeholder)", - "soft(zero_positional,\"view\",_placeholder)", - "soft(c_d_no_overlap_bar,\"view\",_placeholder)", - "soft(aggregate,\"view\",e0)", - "soft(encoding_field,\"view\",e0)", - "soft(zero,\"view\",e0)", - "soft(type_q,\"view\",e0)", - "soft(continuous_x,\"view\",e0)", - "soft(aggregate_mean,\"view\",e0)", - "soft_weight(zero_positional,1)", - "soft_weight(zero,1)" - ] - } - ] - }, - { - "Witnesses": [ - { - "Value": [ - "base(\"anchor0\")", - "visualization(\"view\")", - "visualization(\"anchor0\")", - "encoding(\"view\",e0)", - "encoding(\"anchor0\",e0)", - "mark(\"view\",bar)", - "mark(\"anchor0\",bar)", - "zero(\"anchor0\",e0)", - "aggregate(\"anchor0\",e0,mean)", - "channel(\"anchor0\",e0,x)", - "field(\"anchor0\",e0,\"IMDB_Rating\")", - "soft(agg_dim,\"anchor0\",_placeholder)", - "soft(c_d_no_overlap_bar,\"anchor0\",_placeholder)", - "soft(aggregate,\"anchor0\",e0)", - "soft(encoding,\"view\",e0)", - "soft(encoding,\"anchor0\",e0)", - "soft(encoding_field,\"anchor0\",e0)", - "soft(type_q,\"anchor0\",e0)", - "soft(continuous_x,\"anchor0\",e0)", - "soft(aggregate_mean,\"anchor0\",e0)", - "type(\"anchor0\",e0,quantitative)", - "soft_weight(agg_dim,2)", - "soft_weight(c_d_no_overlap_bar,0)", - "soft_weight(aggregate,4)", - "soft_weight(encoding,0)", - "soft_weight(encoding_field,6)", - "soft_weight(type_q,0)", - "soft_weight(continuous_x,0)", - "soft_weight(aggregate_mean,1)", + "encoding(\"view\",e1)", "encoding(\"view\",1)", - "channel(\"view\",e0,x)", - "aggregate(\"view\",1,count)", - "field(\"view\",e0,\"IMDB_Rating\")", - "channel(\"view\",1,color)", - "compare(edit_add_color_count,\"anchor0\",\"view\",1,count)", - "zero(\"view\",e0)", - "zero(\"view\",1)", - "aggregate(\"view\",e0,mean)", - "compare_weight(edit_add_color_count,454)", - "type(\"view\",e0,quantitative)", - "type(\"view\",1,quantitative)", - "soft(non_positional_pref,\"view\",_placeholder)", - "soft(agg_dim,\"view\",_placeholder)", - "soft(c_d_no_overlap_bar,\"view\",_placeholder)", - "soft(aggregate,\"view\",e0)", - "soft(aggregate,\"view\",1)", - "soft(encoding,\"view\",1)", - "soft(encoding_field,\"view\",e0)", - "soft(type_q,\"view\",e0)", - "soft(type_q,\"view\",1)", - "soft(continuous_x,\"view\",e0)", - "soft(continuous_color,\"view\",1)", - "soft(aggregate_count,\"view\",1)", - "soft(aggregate_mean,\"view\",e0)", - "soft_weight(non_positional_pref,20)", - "soft_weight(continuous_color,10)", - "soft_weight(aggregate_count,0)" - ] - } - ] - }, - { - "Witnesses": [ - { - "Value": [ - "base(\"anchor0\")", - "visualization(\"view\")", - "visualization(\"anchor0\")", - "encoding(\"view\",e0)", - "encoding(\"anchor0\",e0)", "mark(\"view\",bar)", - "mark(\"anchor0\",bar)", - "zero(\"anchor0\",e0)", - "aggregate(\"anchor0\",e0,mean)", - "channel(\"anchor0\",e0,x)", - "field(\"anchor0\",e0,\"IMDB_Rating\")", - "soft(agg_dim,\"anchor0\",_placeholder)", - "soft(c_d_no_overlap_bar,\"anchor0\",_placeholder)", - "soft(aggregate,\"anchor0\",e0)", - "soft(encoding,\"view\",e0)", - "soft(encoding,\"anchor0\",e0)", - "soft(encoding_field,\"anchor0\",e0)", - "soft(type_q,\"anchor0\",e0)", - "soft(continuous_x,\"anchor0\",e0)", - "soft(aggregate_mean,\"anchor0\",e0)", - "type(\"anchor0\",e0,quantitative)", - "soft_weight(agg_dim,2)", - "soft_weight(c_d_no_overlap_bar,0)", - "soft_weight(aggregate,4)", - "soft_weight(encoding,0)", - "soft_weight(encoding_field,6)", - "soft_weight(type_q,0)", - "soft_weight(continuous_x,0)", - "soft_weight(aggregate_mean,1)", - "encoding(\"view\",1)", - "channel(\"view\",e0,x)", - "aggregate(\"view\",1,count)", - "field(\"view\",e0,\"IMDB_Rating\")", - "channel(\"view\",1,color)", - "compare(edit_add_color_count,\"anchor0\",\"view\",1,count)", - "compare(edit_scale,\"anchor0\",\"view\",e0,e0)", "zero(\"view\",1)", - "aggregate(\"view\",e0,mean)", - "compare_weight(edit_add_color_count,454)", - "compare_weight(edit_scale,60)", - "type(\"view\",e0,quantitative)", - "type(\"view\",1,quantitative)", - "soft(non_positional_pref,\"view\",_placeholder)", - "soft(agg_dim,\"view\",_placeholder)", - "soft(zero_positional,\"view\",_placeholder)", - "soft(c_d_no_overlap_bar,\"view\",_placeholder)", - "soft(aggregate,\"view\",e0)", - "soft(aggregate,\"view\",1)", - "soft(encoding,\"view\",1)", - "soft(encoding_field,\"view\",e0)", - "soft(zero,\"view\",e0)", - "soft(type_q,\"view\",e0)", - "soft(type_q,\"view\",1)", - "soft(continuous_x,\"view\",e0)", - "soft(continuous_color,\"view\",1)", - "soft(aggregate_count,\"view\",1)", - "soft(aggregate_mean,\"view\",e0)", - "soft_weight(non_positional_pref,20)", - "soft_weight(zero_positional,1)", - "soft_weight(zero,1)", - "soft_weight(continuous_color,10)", - "soft_weight(aggregate_count,0)" - ] - } - ] - }, - { - "Witnesses": [ - { - "Value": [ - "base(\"anchor0\")", - "visualization(\"view\")", - "visualization(\"anchor0\")", - "encoding(\"view\",e0)", - "encoding(\"anchor0\",e0)", - "mark(\"view\",bar)", - "mark(\"anchor0\",bar)", - "zero(\"anchor0\",e0)", - "aggregate(\"anchor0\",e0,mean)", - "channel(\"anchor0\",e0,x)", - "field(\"anchor0\",e0,\"IMDB_Rating\")", - "soft(agg_dim,\"anchor0\",_placeholder)", - "soft(c_d_no_overlap_bar,\"anchor0\",_placeholder)", - "soft(aggregate,\"anchor0\",e0)", - "soft(encoding,\"view\",e0)", - "soft(encoding,\"anchor0\",e0)", - "soft(encoding_field,\"anchor0\",e0)", - "soft(type_q,\"anchor0\",e0)", - "soft(continuous_x,\"anchor0\",e0)", - "soft(aggregate_mean,\"anchor0\",e0)", - "type(\"anchor0\",e0,quantitative)", - "soft_weight(agg_dim,2)", - "soft_weight(c_d_no_overlap_bar,0)", - "soft_weight(aggregate,4)", - "soft_weight(encoding,0)", - "soft_weight(encoding_field,6)", - "soft_weight(type_q,0)", - "soft_weight(continuous_x,0)", - "soft_weight(aggregate_mean,1)", - "encoding(\"view\",1)", - "channel(\"view\",1,x)", "aggregate(\"view\",1,count)", - "field(\"view\",e0,\"IMDB_Rating\")", - "channel(\"view\",e0,color)", - "compare(edit_add_color,\"anchor0\",\"view\",e0,\"IMDB_Rating\")", - "compare(edit_move_x_color,\"anchor0\",\"view\",e0,e0)", - "zero(\"view\",e0)", - "zero(\"view\",1)", - "aggregate(\"view\",e0,mean)", - "compare_weight(edit_add_color,455)", - "compare_weight(edit_move_x_color,446)", - "type(\"view\",e0,quantitative)", - "type(\"view\",1,quantitative)", - "soft(non_positional_pref,\"view\",_placeholder)", - "soft(agg_dim,\"view\",_placeholder)", - "soft(c_d_no_overlap_bar,\"view\",_placeholder)", - "soft(aggregate,\"view\",e0)", - "soft(aggregate,\"view\",1)", - "soft(encoding,\"view\",1)", - "soft(encoding_field,\"view\",e0)", - "soft(type_q,\"view\",e0)", - "soft(type_q,\"view\",1)", - "soft(continuous_x,\"view\",1)", - "soft(continuous_color,\"view\",e0)", - "soft(aggregate_count,\"view\",1)", - "soft(aggregate_mean,\"view\",e0)", - "soft_weight(non_positional_pref,20)", - "soft_weight(continuous_color,10)", - "soft_weight(aggregate_count,0)" - ] - } - ] - }, - { - "Witnesses": [ - { - "Value": [ - "base(\"anchor0\")", - "visualization(\"view\")", - "visualization(\"anchor0\")", - "encoding(\"view\",e0)", - "encoding(\"anchor0\",e0)", - "mark(\"view\",bar)", - "mark(\"anchor0\",bar)", - "zero(\"anchor0\",e0)", - "aggregate(\"anchor0\",e0,mean)", - "channel(\"anchor0\",e0,x)", - "field(\"anchor0\",e0,\"IMDB_Rating\")", - "soft(agg_dim,\"anchor0\",_placeholder)", - "soft(c_d_no_overlap_bar,\"anchor0\",_placeholder)", - "soft(aggregate,\"anchor0\",e0)", - "soft(encoding,\"view\",e0)", - "soft(encoding,\"anchor0\",e0)", - "soft(encoding_field,\"anchor0\",e0)", - "soft(type_q,\"anchor0\",e0)", - "soft(continuous_x,\"anchor0\",e0)", - "soft(aggregate_mean,\"anchor0\",e0)", - "type(\"anchor0\",e0,quantitative)", - "soft_weight(agg_dim,2)", - "soft_weight(c_d_no_overlap_bar,0)", - "soft_weight(aggregate,4)", - "soft_weight(encoding,0)", - "soft_weight(encoding_field,6)", - "soft_weight(type_q,0)", - "soft_weight(continuous_x,0)", - "soft_weight(aggregate_mean,1)", - "encoding(\"view\",1)", "channel(\"view\",1,x)", - "aggregate(\"view\",1,count)", - "field(\"view\",e0,\"IMDB_Rating\")", + "channel(\"view\",e1,y)", "channel(\"view\",e0,color)", - "compare(edit_add_color,\"anchor0\",\"view\",e0,\"IMDB_Rating\")", - "compare(edit_move_x_color,\"anchor0\",\"view\",e0,e0)", - "compare(edit_scale,\"anchor0\",\"view\",e0,e0)", - "zero(\"view\",1)", - "aggregate(\"view\",e0,mean)", - "compare_weight(edit_add_color,455)", - "compare_weight(edit_move_x_color,446)", - "compare_weight(edit_scale,60)", - "type(\"view\",e0,quantitative)", - "type(\"view\",1,quantitative)", - "soft(non_positional_pref,\"view\",_placeholder)", - "soft(agg_dim,\"view\",_placeholder)", - "soft(c_d_no_overlap_bar,\"view\",_placeholder)", - "soft(aggregate,\"view\",e0)", + "field(\"view\",e0,\"MPAA_Rating\")", + "field(\"view\",e1,\"Major_Genre\")", "soft(aggregate,\"view\",1)", - "soft(encoding,\"view\",1)", - "soft(encoding_field,\"view\",e0)", - "soft(zero,\"view\",e0)", - "soft(type_q,\"view\",e0)", - "soft(type_q,\"view\",1)", - "soft(continuous_x,\"view\",1)", - "soft(continuous_color,\"view\",e0)", - "soft(aggregate_count,\"view\",1)", - "soft(aggregate_mean,\"view\",e0)", - "soft_weight(non_positional_pref,20)", - "soft_weight(zero,1)", - "soft_weight(continuous_color,10)", - "soft_weight(aggregate_count,0)" - ] - } - ] - }, - { - "Witnesses": [ - { - "Value": [ - "base(\"anchor0\")", - "visualization(\"view\")", - "visualization(\"anchor0\")", - "encoding(\"view\",e0)", - "encoding(\"anchor0\",e0)", - "mark(\"view\",bar)", - "mark(\"anchor0\",bar)", - "zero(\"anchor0\",e0)", - "aggregate(\"anchor0\",e0,mean)", - "channel(\"anchor0\",e0,x)", - "field(\"anchor0\",e0,\"IMDB_Rating\")", - "soft(agg_dim,\"anchor0\",_placeholder)", - "soft(c_d_no_overlap_bar,\"anchor0\",_placeholder)", - "soft(aggregate,\"anchor0\",e0)", "soft(encoding,\"view\",e0)", - "soft(encoding,\"anchor0\",e0)", - "soft(encoding_field,\"anchor0\",e0)", - "soft(type_q,\"anchor0\",e0)", - "soft(continuous_x,\"anchor0\",e0)", - "soft(aggregate_mean,\"anchor0\",e0)", - "type(\"anchor0\",e0,quantitative)", - "soft_weight(agg_dim,2)", - "soft_weight(c_d_no_overlap_bar,0)", - "soft_weight(aggregate,4)", - "soft_weight(encoding,0)", - "soft_weight(encoding_field,6)", - "soft_weight(type_q,0)", - "soft_weight(continuous_x,0)", - "soft_weight(aggregate_mean,1)", - "channel(\"view\",e0,y)", - "compare(edit_add_y,\"anchor0\",\"view\",e0,\"IMDB_Rating\")", - "field(\"view\",e0,\"IMDB_Rating\")", - "compare(edit_remove_x,\"anchor0\",\"view\",e0,\"IMDB_Rating\")", - "compare(edit_move_x_y,\"anchor0\",\"view\",e0,e0)", - "zero(\"view\",e0)", - "aggregate(\"view\",e0,mean)", - "compare_weight(edit_add_y,459)", - "compare_weight(edit_remove_x,459)", - "compare_weight(edit_move_x_y,444)", - "type(\"view\",e0,quantitative)", - "soft(agg_dim,\"view\",_placeholder)", - "soft(only_x,\"view\",_placeholder)", - "soft(c_d_no_overlap_bar,\"view\",_placeholder)", - "soft(aggregate,\"view\",e0)", - "soft(encoding_field,\"view\",e0)", - "soft(type_q,\"view\",e0)", - "soft(continuous_y,\"view\",e0)", - "soft(aggregate_mean,\"view\",e0)", - "soft_weight(only_x,1)", - "soft_weight(continuous_y,0)" - ] - } - ] - }, - { - "Witnesses": [ - { - "Value": [ - "base(\"anchor0\")", - "visualization(\"view\")", - "visualization(\"anchor0\")", - "encoding(\"view\",e0)", - "encoding(\"anchor0\",e0)", - "mark(\"view\",bar)", - "mark(\"anchor0\",bar)", - "zero(\"anchor0\",e0)", - "aggregate(\"anchor0\",e0,mean)", - "channel(\"anchor0\",e0,x)", - "field(\"anchor0\",e0,\"IMDB_Rating\")", - "soft(agg_dim,\"anchor0\",_placeholder)", - "soft(c_d_no_overlap_bar,\"anchor0\",_placeholder)", - "soft(aggregate,\"anchor0\",e0)", - "soft(encoding,\"view\",e0)", - "soft(encoding,\"anchor0\",e0)", - "soft(encoding_field,\"anchor0\",e0)", - "soft(type_q,\"anchor0\",e0)", - "soft(continuous_x,\"anchor0\",e0)", - "soft(aggregate_mean,\"anchor0\",e0)", - "type(\"anchor0\",e0,quantitative)", - "soft_weight(agg_dim,2)", - "soft_weight(c_d_no_overlap_bar,0)", - "soft_weight(aggregate,4)", - "soft_weight(encoding,0)", - "soft_weight(encoding_field,6)", - "soft_weight(type_q,0)", - "soft_weight(continuous_x,0)", - "soft_weight(aggregate_mean,1)", - "channel(\"view\",e0,y)", - "compare(edit_add_y,\"anchor0\",\"view\",e0,\"IMDB_Rating\")", - "field(\"view\",e0,\"IMDB_Rating\")", - "compare(edit_remove_x,\"anchor0\",\"view\",e0,\"IMDB_Rating\")", - "compare(edit_move_x_y,\"anchor0\",\"view\",e0,e0)", - "compare(edit_scale,\"anchor0\",\"view\",e0,e0)", - "aggregate(\"view\",e0,mean)", - "compare_weight(edit_add_y,459)", - "compare_weight(edit_remove_x,459)", - "compare_weight(edit_move_x_y,444)", - "compare_weight(edit_scale,60)", - "type(\"view\",e0,quantitative)", - "soft(agg_dim,\"view\",_placeholder)", - "soft(zero_positional,\"view\",_placeholder)", - "soft(only_x,\"view\",_placeholder)", - "soft(c_d_no_overlap_bar,\"view\",_placeholder)", - "soft(aggregate,\"view\",e0)", - "soft(encoding_field,\"view\",e0)", - "soft(zero,\"view\",e0)", - "soft(type_q,\"view\",e0)", - "soft(continuous_y,\"view\",e0)", - "soft(aggregate_mean,\"view\",e0)", - "soft_weight(zero_positional,1)", - "soft_weight(only_x,1)", - "soft_weight(zero,1)", - "soft_weight(continuous_y,0)" - ] - } - ] - }, - { - "Witnesses": [ - { - "Value": [ - "base(\"anchor0\")", - "visualization(\"view\")", - "visualization(\"anchor0\")", - "encoding(\"view\",e0)", - "encoding(\"anchor0\",e0)", - "mark(\"view\",bar)", - "mark(\"anchor0\",bar)", - "zero(\"anchor0\",e0)", - "aggregate(\"anchor0\",e0,mean)", - "channel(\"anchor0\",e0,x)", - "field(\"anchor0\",e0,\"IMDB_Rating\")", - "soft(agg_dim,\"anchor0\",_placeholder)", - "soft(c_d_no_overlap_bar,\"anchor0\",_placeholder)", - "soft(aggregate,\"anchor0\",e0)", - "soft(encoding,\"view\",e0)", - "soft(encoding,\"anchor0\",e0)", - "soft(encoding_field,\"anchor0\",e0)", - "soft(type_q,\"anchor0\",e0)", - "soft(continuous_x,\"anchor0\",e0)", - "soft(aggregate_mean,\"anchor0\",e0)", - "type(\"anchor0\",e0,quantitative)", - "soft_weight(agg_dim,2)", - "soft_weight(c_d_no_overlap_bar,0)", - "soft_weight(aggregate,4)", - "soft_weight(encoding,0)", - "soft_weight(encoding_field,6)", - "soft_weight(type_q,0)", - "soft_weight(continuous_x,0)", - "soft_weight(aggregate_mean,1)", - "encoding(\"view\",1)", - "channel(\"view\",e0,y)", - "aggregate(\"view\",1,count)", - "compare(edit_add_y,\"anchor0\",\"view\",e0,\"IMDB_Rating\")", - "field(\"view\",e0,\"IMDB_Rating\")", - "channel(\"view\",1,color)", - "compare(edit_add_color_count,\"anchor0\",\"view\",1,count)", - "compare(edit_remove_x,\"anchor0\",\"view\",e0,\"IMDB_Rating\")", - "compare(edit_move_x_y,\"anchor0\",\"view\",e0,e0)", - "zero(\"view\",e0)", - "zero(\"view\",1)", - "aggregate(\"view\",e0,mean)", - "compare_weight(edit_add_y,459)", - "compare_weight(edit_add_color_count,454)", - "compare_weight(edit_remove_x,459)", - "compare_weight(edit_move_x_y,444)", - "type(\"view\",e0,quantitative)", - "type(\"view\",1,quantitative)", - "soft(non_positional_pref,\"view\",_placeholder)", - "soft(agg_dim,\"view\",_placeholder)", - "soft(only_x,\"view\",_placeholder)", - "soft(c_d_no_overlap_bar,\"view\",_placeholder)", - "soft(aggregate,\"view\",e0)", - "soft(aggregate,\"view\",1)", + "soft(encoding,\"view\",e1)", "soft(encoding,\"view\",1)", "soft(encoding_field,\"view\",e0)", - "soft(type_q,\"view\",e0)", + "soft(encoding_field,\"view\",e1)", + "soft(high_cardinality_nominal,\"view\",e1)", "soft(type_q,\"view\",1)", - "soft(continuous_y,\"view\",e0)", - "soft(continuous_color,\"view\",1)", + "soft(type_n,\"view\",e0)", + "soft(type_n,\"view\",e1)", + "soft(nominal_y,\"view\",e1)", + "soft(nominal_color,\"view\",e0)", "soft(aggregate_count,\"view\",1)", - "soft(aggregate_mean,\"view\",e0)", - "soft_weight(non_positional_pref,20)", - "soft_weight(only_x,1)", - "soft_weight(continuous_y,0)", - "soft_weight(continuous_color,10)", - "soft_weight(aggregate_count,0)" - ] - } - ] - }, - { - "Witnesses": [ - { - "Value": [ - "base(\"anchor0\")", - "visualization(\"view\")", - "visualization(\"anchor0\")", - "encoding(\"view\",e0)", - "encoding(\"anchor0\",e0)", - "mark(\"view\",bar)", - "mark(\"anchor0\",bar)", - "zero(\"anchor0\",e0)", - "aggregate(\"anchor0\",e0,mean)", - "channel(\"anchor0\",e0,x)", - "field(\"anchor0\",e0,\"IMDB_Rating\")", - "soft(agg_dim,\"anchor0\",_placeholder)", - "soft(c_d_no_overlap_bar,\"anchor0\",_placeholder)", - "soft(aggregate,\"anchor0\",e0)", - "soft(encoding,\"view\",e0)", - "soft(encoding,\"anchor0\",e0)", - "soft(encoding_field,\"anchor0\",e0)", - "soft(type_q,\"anchor0\",e0)", - "soft(continuous_x,\"anchor0\",e0)", - "soft(aggregate_mean,\"anchor0\",e0)", - "type(\"anchor0\",e0,quantitative)", - "soft_weight(agg_dim,2)", - "soft_weight(c_d_no_overlap_bar,0)", - "soft_weight(aggregate,4)", - "soft_weight(encoding,0)", - "soft_weight(encoding_field,6)", - "soft_weight(type_q,0)", - "soft_weight(continuous_x,0)", - "soft_weight(aggregate_mean,1)", - "encoding(\"view\",1)", - "channel(\"view\",1,y)", - "compare(edit_add_y_count,\"anchor0\",\"view\",1,count)", - "aggregate(\"view\",1,count)", - "field(\"view\",e0,\"IMDB_Rating\")", - "channel(\"view\",e0,color)", - "compare(edit_add_color,\"anchor0\",\"view\",e0,\"IMDB_Rating\")", - "compare(edit_remove_x,\"anchor0\",\"view\",e0,\"IMDB_Rating\")", - "compare(edit_move_x_color,\"anchor0\",\"view\",e0,e0)", - "zero(\"view\",e0)", - "zero(\"view\",1)", - "aggregate(\"view\",e0,mean)", - "compare_weight(edit_add_y_count,458)", - "compare_weight(edit_add_color,455)", - "compare_weight(edit_remove_x,459)", - "compare_weight(edit_move_x_color,446)", - "type(\"view\",e0,quantitative)", + "stack(\"view\",1,zero)", + "type(\"view\",e0,nominal)", + "type(\"view\",e1,nominal)", "type(\"view\",1,quantitative)", - "soft(non_positional_pref,\"view\",_placeholder)", - "soft(agg_dim,\"view\",_placeholder)", - "soft(only_x,\"view\",_placeholder)", - "soft(c_d_no_overlap_bar,\"view\",_placeholder)", - "soft(aggregate,\"view\",e0)", - "soft(aggregate,\"view\",1)", - "soft(encoding,\"view\",1)", - "soft(encoding_field,\"view\",e0)", - "soft(type_q,\"view\",e0)", - "soft(type_q,\"view\",1)", - "soft(continuous_y,\"view\",1)", - "soft(continuous_color,\"view\",e0)", - "soft(aggregate_count,\"view\",1)", - "soft(aggregate_mean,\"view\",e0)", - "soft_weight(non_positional_pref,20)", - "soft_weight(only_x,1)", - "soft_weight(continuous_y,0)", - "soft_weight(continuous_color,10)", - "soft_weight(aggregate_count,0)" - ] - } - ] - }, - { - "Witnesses": [ - { - "Value": [ - "base(\"anchor0\")", - "visualization(\"view\")", - "visualization(\"anchor0\")", - "encoding(\"view\",e0)", - "encoding(\"anchor0\",e0)", - "mark(\"view\",bar)", - "mark(\"anchor0\",bar)", - "zero(\"anchor0\",e0)", - "aggregate(\"anchor0\",e0,mean)", - "channel(\"anchor0\",e0,x)", - "field(\"anchor0\",e0,\"IMDB_Rating\")", - "soft(agg_dim,\"anchor0\",_placeholder)", - "soft(c_d_no_overlap_bar,\"anchor0\",_placeholder)", - "soft(aggregate,\"anchor0\",e0)", - "soft(encoding,\"view\",e0)", - "soft(encoding,\"anchor0\",e0)", - "soft(encoding_field,\"anchor0\",e0)", - "soft(type_q,\"anchor0\",e0)", - "soft(continuous_x,\"anchor0\",e0)", - "soft(aggregate_mean,\"anchor0\",e0)", - "type(\"anchor0\",e0,quantitative)", - "soft_weight(agg_dim,2)", - "soft_weight(c_d_no_overlap_bar,0)", - "soft_weight(aggregate,4)", - "soft_weight(encoding,0)", - "soft_weight(encoding_field,6)", - "soft_weight(type_q,0)", + "soft(continuous_x,\"view\",1)", "soft_weight(continuous_x,0)", - "soft_weight(aggregate_mean,1)", - "encoding(\"view\",1)", - "channel(\"view\",e0,y)", - "aggregate(\"view\",1,count)", - "compare(edit_add_y,\"anchor0\",\"view\",e0,\"IMDB_Rating\")", - "field(\"view\",e0,\"IMDB_Rating\")", - "channel(\"view\",1,color)", - "compare(edit_add_color_count,\"anchor0\",\"view\",1,count)", - "compare(edit_remove_x,\"anchor0\",\"view\",e0,\"IMDB_Rating\")", - "compare(edit_move_x_y,\"anchor0\",\"view\",e0,e0)", - "compare(edit_scale,\"anchor0\",\"view\",e0,e0)", - "zero(\"view\",1)", - "aggregate(\"view\",e0,mean)", - "compare_weight(edit_add_y,459)", - "compare_weight(edit_add_color_count,454)", - "compare_weight(edit_remove_x,459)", - "compare_weight(edit_move_x_y,444)", - "compare_weight(edit_scale,60)", - "type(\"view\",e0,quantitative)", - "type(\"view\",1,quantitative)", - "soft(non_positional_pref,\"view\",_placeholder)", - "soft(agg_dim,\"view\",_placeholder)", - "soft(zero_positional,\"view\",_placeholder)", - "soft(only_x,\"view\",_placeholder)", - "soft(c_d_no_overlap_bar,\"view\",_placeholder)", - "soft(aggregate,\"view\",e0)", - "soft(aggregate,\"view\",1)", - "soft(encoding,\"view\",1)", - "soft(encoding_field,\"view\",e0)", - "soft(zero,\"view\",e0)", - "soft(type_q,\"view\",e0)", - "soft(type_q,\"view\",1)", - "soft(continuous_y,\"view\",e0)", - "soft(continuous_color,\"view\",1)", - "soft(aggregate_count,\"view\",1)", - "soft(aggregate_mean,\"view\",e0)", - "soft_weight(non_positional_pref,20)", - "soft_weight(zero_positional,1)", - "soft_weight(only_x,1)", - "soft_weight(zero,1)", - "soft_weight(continuous_y,0)", - "soft_weight(continuous_color,10)", - "soft_weight(aggregate_count,0)" - ] - } - ] - }, - { - "Witnesses": [ - { - "Value": [ - "base(\"anchor0\")", - "visualization(\"view\")", - "visualization(\"anchor0\")", - "encoding(\"view\",e0)", - "encoding(\"anchor0\",e0)", - "mark(\"view\",bar)", - "mark(\"anchor0\",bar)", - "zero(\"anchor0\",e0)", - "aggregate(\"anchor0\",e0,mean)", - "channel(\"anchor0\",e0,x)", - "field(\"anchor0\",e0,\"IMDB_Rating\")", - "soft(agg_dim,\"anchor0\",_placeholder)", - "soft(c_d_no_overlap_bar,\"anchor0\",_placeholder)", - "soft(aggregate,\"anchor0\",e0)", - "soft(encoding,\"view\",e0)", - "soft(encoding,\"anchor0\",e0)", - "soft(encoding_field,\"anchor0\",e0)", - "soft(type_q,\"anchor0\",e0)", - "soft(continuous_x,\"anchor0\",e0)", - "soft(aggregate_mean,\"anchor0\",e0)", - "type(\"anchor0\",e0,quantitative)", - "soft_weight(agg_dim,2)", - "soft_weight(c_d_no_overlap_bar,0)", "soft_weight(aggregate,4)", "soft_weight(encoding,0)", "soft_weight(encoding_field,6)", + "soft_weight(high_cardinality_nominal,10)", "soft_weight(type_q,0)", - "soft_weight(continuous_x,0)", - "soft_weight(aggregate_mean,1)", - "encoding(\"view\",1)", - "channel(\"view\",1,y)", - "compare(edit_add_y_count,\"anchor0\",\"view\",1,count)", - "aggregate(\"view\",1,count)", - "field(\"view\",e0,\"IMDB_Rating\")", - "channel(\"view\",e0,color)", - "compare(edit_add_color,\"anchor0\",\"view\",e0,\"IMDB_Rating\")", - "compare(edit_remove_x,\"anchor0\",\"view\",e0,\"IMDB_Rating\")", - "compare(edit_move_x_color,\"anchor0\",\"view\",e0,e0)", - "compare(edit_scale,\"anchor0\",\"view\",e0,e0)", - "zero(\"view\",1)", - "aggregate(\"view\",e0,mean)", - "compare_weight(edit_add_y_count,458)", - "compare_weight(edit_add_color,455)", - "compare_weight(edit_remove_x,459)", - "compare_weight(edit_move_x_color,446)", - "compare_weight(edit_scale,60)", - "type(\"view\",e0,quantitative)", - "type(\"view\",1,quantitative)", - "soft(non_positional_pref,\"view\",_placeholder)", - "soft(agg_dim,\"view\",_placeholder)", - "soft(only_x,\"view\",_placeholder)", + "soft_weight(type_n,2)", + "soft_weight(nominal_y,0)", + "soft_weight(nominal_color,6)", + "soft_weight(aggregate_count,0)", "soft(c_d_no_overlap_bar,\"view\",_placeholder)", - "soft(aggregate,\"view\",e0)", - "soft(aggregate,\"view\",1)", - "soft(encoding,\"view\",1)", - "soft(encoding_field,\"view\",e0)", - "soft(zero,\"view\",e0)", - "soft(type_q,\"view\",e0)", - "soft(type_q,\"view\",1)", - "soft(continuous_y,\"view\",1)", - "soft(continuous_color,\"view\",e0)", - "soft(aggregate_count,\"view\",1)", - "soft(aggregate_mean,\"view\",e0)", - "soft_weight(non_positional_pref,20)", - "soft_weight(only_x,1)", - "soft_weight(zero,1)", - "soft_weight(continuous_y,0)", - "soft_weight(continuous_color,10)", - "soft_weight(aggregate_count,0)" + "soft(stack_zero,\"view\",_placeholder)", + "soft_weight(c_d_no_overlap_bar,0)", + "soft_weight(stack_zero,0)" ] } ] - }, - {} + } ], - "Result": "UNSATISFIABLE", - "Models": { "Number": 44, "More": "no" }, - "Calls": 13, - "Time": { - "Total": 0.112, - "Solve": 0.006, - "Model": 0.002, - "Unsat": 0.002, - "CPU": 0.119 + "Result": "OPTIMUM FOUND", + "Models": { + "Number": 2, + "More": "no", + "Optimum": "yes", + "Optimal": 1, + "Costs": [36] }, - "Threads": 4, - "Winner": 0 + "Calls": 1, + "Time": { + "Total": 0.076, + "Solve": 0.0, + "Model": 0.0, + "Unsat": 0.0, + "CPU": 0.076 + } } diff --git a/output2.json b/output2.json new file mode 100644 index 0000000..4a66539 --- /dev/null +++ b/output2.json @@ -0,0 +1,74 @@ +{ + "Solver": "clingo version 5.3.0", + "Input": ["test2.lp"], + "Call": [ + { + "Witnesses": [ + { + "Value": [ + "visualization(\"view\")", + "encoding(\"view\",e0)", + "encoding(\"view\",e1)", + "mark(\"view\",bar)", + "soft(encoding,\"view\",e0)", + "soft(encoding,\"view\",e1)", + "soft_weight(encoding,0)", + "encoding(\"view\",1)", + "channel(\"view\",1,x)", + "channel(\"view\",e1,y)", + "channel(\"view\",e0,color)", + "field(\"view\",e0,\"MPAA_Rating\")", + "field(\"view\",e1,\"Major_Genre\")", + "aggregate(\"view\",1,count)", + "type(\"view\",e0,nominal)", + "type(\"view\",e1,nominal)", + "zero(\"view\",1)", + "type(\"view\",1,quantitative)", + "stack(\"view\",zero)", + "soft(c_d_no_overlap_bar,\"view\",_placeholder)", + "soft(stack_zero,\"view\",_placeholder)", + "soft(aggregate,\"view\",1)", + "soft(encoding,\"view\",1)", + "soft(encoding_field,\"view\",e0)", + "soft(encoding_field,\"view\",e1)", + "soft(high_cardinality_nominal,\"view\",e1)", + "soft(type_q,\"view\",1)", + "soft(type_n,\"view\",e0)", + "soft(type_n,\"view\",e1)", + "soft(continuous_x,\"view\",1)", + "soft(nominal_y,\"view\",e1)", + "soft(nominal_color,\"view\",e0)", + "soft(aggregate_count,\"view\",1)", + "soft_weight(c_d_no_overlap_bar,0)", + "soft_weight(stack_zero,0)", + "soft_weight(aggregate,4)", + "soft_weight(encoding_field,6)", + "soft_weight(high_cardinality_nominal,10)", + "soft_weight(type_q,0)", + "soft_weight(type_n,2)", + "soft_weight(continuous_x,0)", + "soft_weight(nominal_y,0)", + "soft_weight(nominal_color,6)", + "soft_weight(aggregate_count,0)" + ] + } + ] + } + ], + "Result": "OPTIMUM FOUND", + "Models": { + "Number": 9, + "More": "no", + "Optimum": "yes", + "Optimal": 1, + "Costs": [36] + }, + "Calls": 1, + "Time": { + "Total": 0.079, + "Solve": 0.001, + "Model": 0.0, + "Unsat": 0.0, + "CPU": 0.078 + } +} From 376e19cce0d94b1362e58187fcbaceaf9e96da03 Mon Sep 17 00:00:00 2001 From: Halden Lin Date: Wed, 18 Sep 2019 10:48:08 -0700 Subject: [PATCH 23/25] visualization -> view. --- asp/compare.lp | 2 +- asp/generate.lp | 6 +++--- asp/hard.lp | 30 +++++++++++++++--------------- asp/output.lp | 2 +- asp/soft.lp | 10 +++++----- examples/multi.py | 10 +++++----- js/src/asp2vl.ts | 23 ++++++++++++----------- js/src/cql2asp.ts | 2 +- output.json | 2 +- output2.json | 2 +- 10 files changed, 45 insertions(+), 44 deletions(-) diff --git a/asp/compare.lp b/asp/compare.lp index 26d7934..78ad056 100644 --- a/asp/compare.lp +++ b/asp/compare.lp @@ -1,5 +1,5 @@ %% FILE GENERATED BY graphscapeToAsp.js, DO NOT MODIFY %% -comparable(V1,V2) :- visualization(V1), base(V1), visualization(V2), V1 != V2. +comparable(V1,V2) :- view(V1), base(V1), view(V2), V1 != V2. % MARK EDITS compare(edit_area_bar,V1,V2,area,bar) :- comparable(V1,V2), mark(V1,area), mark(V2,bar). compare(edit_area_bar,V1,V2,bar,area) :- comparable(V1,V2), mark(V1,bar), mark(V2,area). diff --git a/asp/generate.lp b/asp/generate.lp index 9108efe..227c6b0 100644 --- a/asp/generate.lp +++ b/asp/generate.lp @@ -7,7 +7,7 @@ obj_id(1..max_extra_encs). -{ encoding(V,E): obj_id(E) } :- visualization(V), not base(V). +{ encoding(V,E): obj_id(E) } :- view(V), not base(V). :- not encoding(V,ID), not base(V), encoding(V,ID-1), obj_id(ID), obj_id(ID-1). @@ -29,10 +29,10 @@ obj_id(1..max_extra_encs). % pick one mark type -{ mark(V,M) : marktype(M) } = 1 :- visualization(V), not base(V). +{ mark(V,M) : marktype(M) } = 1 :- view(V), not base(V). % stacking -0 { stack(V,S): stacking(S) } 1 :- visualization(V), not base(V). +0 { stack(V,S): stacking(S) } 1 :- view(V), not base(V). :- field(V,E1,F1), field(V,E2,F2), E1 > E2, F1 <= F2. diff --git a/asp/hard.lp b/asp/hard.lp index 5f059cd..1e6bbf7 100644 --- a/asp/hard.lp +++ b/asp/hard.lp @@ -1,6 +1,6 @@ -:- visualization(V), hard(_,V). -:- visualization(V), hard(_,V,_). -:- visualization(V), hard(_,V,_,_). +:- view(V), hard(_,V). +:- view(V), hard(_,V,_). +:- view(V), hard(_,V,_,_). % ====== Expressiveness and Well-Formedness Constraints ====== @@ -62,10 +62,10 @@ hard(size_negative,V,E) :- channel(V,E,size), enc_extent(V,E,MIN,MAX), MIN < 0, % === Across encodings and between encodings and marks === % @constraint Cannot use single channels twice. -hard(repeat_channel,V,C) :- visualization(V), single_channel(C), 2 { channel(V,_,C) }. +hard(repeat_channel,V,C) :- view(V), single_channel(C), 2 { channel(V,_,C) }. % @constraint There has to be at least one encoding. Otherwise, the visualization doesn't show anything. -hard(no_encodings,V) :- visualization(V), not encoding(V,_). +hard(no_encodings,V) :- view(V), not encoding(V,_). % @constraint Row and column require discrete. hard(row_or_column_c,V) :- channel_continuous(V,(row;column)). @@ -123,7 +123,7 @@ hard(area_bar_with_log,V) :- mark(V,(bar;area)), channel(V,E,(x;y)), log(V,E). hard(rect_without_d_d,V) :- mark(V,rect), not is_d_d(V). % @constraint Don't use the same field on x and y. -hard(same_field_x_and_y,V) :- visualization(V), { field(V,E,F) : channel(V,E,x); field(V,E,F) : channel(V,E,y) } >= 2, field(F). +hard(same_field_x_and_y,V) :- view(V), { field(V,E,F) : channel(V,E,x); field(V,E,F) : channel(V,E,y) } >= 2, field(F). % @constraint Don't use count on x and y. hard(count_on_x_and_y,V):- channel(V,EX,x), channel(V,EY,y), aggregate(V,EX,count), aggregate(V,EY,count). @@ -132,7 +132,7 @@ hard(count_on_x_and_y,V):- channel(V,EX,x), channel(V,EY,y), aggregate(V,EX,coun hard(aggregate_not_all_continuous,V):- aggregate(V,E,_), continuous(V,E), not aggregate(V,E,_). % @constraint Don't use count twice. -hard(count_twice) :- visualization(V), { aggregate(V,_,count) } = 2. +hard(count_twice) :- view(V), { aggregate(V,_,count) } = 2. % === Global properties === @@ -188,28 +188,28 @@ hard(invalid_agg,V,A) :- aggregate(V,_,A), not aggregate_op(A). hard(invalid_bin,V,B) :- bin(V,_,B), not B >= 0. % @constraint Bin has to be a natural number. % @constraint Fieldtype has to be primitive type. -hard(invalid_fieldtype,V,T) :- visualization(V), fieldtype(_,T), not primitive_type(T). +hard(invalid_fieldtype,V,T) :- view(V), fieldtype(_,T), not primitive_type(T). % @constraint Task has to be one of the tasks. -hard(invalid_task,V,T) :- visualization(V), task(V,T), not tasks(T). +hard(invalid_task,V,T) :- view(V), task(V,T), not tasks(T). % @constraint Num_rows has to be larger than 0. -hard(invalid_num_rows,V,S) :- visualization(V), num_rows(S), S < 0. +hard(invalid_num_rows,V,S) :- view(V), num_rows(S), S < 0. % @constraint Cardinality has to be larger than 0. -hard(invalid_cardinality,V,C) :- visualization(V), cardinality(_,C), C < 0. +hard(invalid_cardinality,V,C) :- view(V), cardinality(_,C), C < 0. % @constraint Entropy has to be positive. -hard(invalid_entropy,V,E) :- visualization(V), entropy(_,E), E < 0. +hard(invalid_entropy,V,E) :- view(V), entropy(_,E), E < 0. % @constraint Extent only allowed for numbers (for now). -hard(invalid_extent_non_number,V,F) :- visualization(V), extent(F,_,_), not fieldtype(F,number). +hard(invalid_extent_non_number,V,F) :- view(V), extent(F,_,_), not fieldtype(F,number). % @constraint Order has to be correct. -hard(invalid_extent_order,V,MIN,MAX):- visualization(V), extent(_,MIN,MAX), MIN > MAX. +hard(invalid_extent_order,V,MIN,MAX):- view(V), extent(_,MIN,MAX), MIN > MAX. % @constraint The name of a field cannot be the name of an encoding. This is to prevent errors coming from the shortcuts in define.lp. -hard(encoding_field_same_name,V,N) :- visualization(V), encoding(V,N), field(N). +hard(encoding_field_same_name,V,N) :- view(V), encoding(V,N), field(N). % @constraint Cannot bin strings. hard(bin_string,V,E) :- field(V,E,F), fieldtype(F,string), bin(V,E,_). diff --git a/asp/output.lp b/asp/output.lp index f4fda15..932baa5 100644 --- a/asp/output.lp +++ b/asp/output.lp @@ -4,7 +4,7 @@ #show mark/2. -#show visualization/1. +#show view/1. #show base/1. #show encoding/2. diff --git a/asp/soft.lp b/asp/soft.lp index 322d882..f727fdf 100644 --- a/asp/soft.lp +++ b/asp/soft.lp @@ -21,13 +21,13 @@ soft(encoding,V,E) :- encoding(V,E). soft(encoding_field,V,E) :- field(V,E,_). % @constraint Prefer not to use the same field twice. -soft(same_field_2,V,F) :- visualization(V), field(F), { field(V,_,F) } = 2. +soft(same_field_2,V,F) :- view(V), field(F), { field(V,_,F) } = 2. % @constraint Prefer not to use the same field three or more times. -soft(same_field_gte3,V,F) :- visualization(V), field(F), { field(V,_,F) } >= 3. +soft(same_field_gte3,V,F) :- view(V), field(F), { field(V,_,F) } >= 3. % @constraint Prefer not to use count more than once. -soft(count_twice,V) :- visualization(V), { aggregate(V,_,count) } = 2. +soft(count_twice,V) :- view(V), { aggregate(V,_,count) } = 2. % @constraint Shape channel should not have too high cardinality. soft(shape_cardinality,V,E) :- channel(V,E,shape), discrete_cardinality(V,E,C), C > 5. @@ -50,10 +50,10 @@ soft(bin_cardinality,V,E) :- type(V,E,quantitative), bin(V,E,_), enc_cardinality soft(quant_bin,V,E) :- bin(V,E,_), not type(V,E,quantitative). % @constraint Plots with only nominal, ordinal, binned q, or t with time unit should add either an aggregation (e.g. count) or a quantitative field. -soft(only_discrete,V) :- visualization(V), not continuous(V,_). +soft(only_discrete,V) :- view(V), not continuous(V,_). % @constraint Prefer not to use multiple non-positional encoding channels. -soft(multiple_non_pos,V) :- visualization(V), { channel(V,_,C): non_positional(C) } > 1. +soft(multiple_non_pos,V) :- view(V), { channel(V,_,C): non_positional(C) } > 1. % @constraint Prefer not to use non-positional channels until all positional channels are used. soft(non_positional_pref,V) :- channel(V,_,C), non_positional(C), not channel(V,_,(x;y)). diff --git a/examples/multi.py b/examples/multi.py index 56c6731..15162e0 100644 --- a/examples/multi.py +++ b/examples/multi.py @@ -11,7 +11,7 @@ # cardinality(acceleration,96). # % ====== Query constraints ====== -# visualization(v1). +# view(v1). # encoding(v1,e0). # :- not field(v1,e0,acceleration). @@ -38,7 +38,7 @@ # cardinality(acceleration,96). # % ====== Query constraints ====== -# visualization(v1). +# view(v1). # data("cars.json"). # type(v1,e0,quantitative). # type(v1,e1,quantitative). @@ -57,7 +57,7 @@ -program = """visualization("view"). +program = """view("view"). num_rows(406). fieldtype("Acceleration",number). @@ -86,7 +86,7 @@ channel("view",e0,x). encoding("view",e1). :- not field("view",e1,"Miles_per_Gallon"). -visualization("first"). +view("first"). num_rows(406). fieldtype("Acceleration",number). @@ -115,7 +115,7 @@ channel("first",e0,x). encoding("first",e1). :- not field("first",e1,"Miles_per_Gallon"). -visualization("first"). +view("first"). encoding("first",e0). encoding("first",e1). aggregate("first",e0,mean). diff --git a/js/src/asp2vl.ts b/js/src/asp2vl.ts index e22738f..3c543b9 100644 --- a/js/src/asp2vl.ts +++ b/js/src/asp2vl.ts @@ -2,19 +2,20 @@ import { TopLevelFacetedUnitSpec } from 'vega-lite/build/src/spec'; const REGEX = /(\w+)\(([\w\.\/]+)(,([\w\.]+))?(,([\w\.]+))?\)/; -const V_REGEX = /visualization\((.*)\)./; +const V_REGEX = /view\((.*)\)./; /** * Convert from ASP to Vega-Lite. */ -export default function asp2vl(facts: string[]): {[name: string]: TopLevelFacetedUnitSpec} { - const visualizations = facts.filter(fact => { - const extract = V_REGEX.exec(fact); - return extract !== null; - }).map(fact => { - const extract = V_REGEX.exec(fact); - return extract[1]; - }); - +export default function asp2vl(facts: string[]): { [name: string]: TopLevelFacetedUnitSpec } { + const visualizations = facts + .filter(fact => { + const extract = V_REGEX.exec(fact); + return extract !== null; + }) + .map(fact => { + const extract = V_REGEX.exec(fact); + return extract[1]; + }); const result = visualizations.reduce((dict, v) => { dict[v] = asp2vl_single(facts, v); @@ -35,7 +36,7 @@ function asp2vl_single(facts: string[], v: string) { const negSymbol = value.trim().startsWith(':-'); // TODO: remove this const [_, predicate, viz, __, first, ___, second] = REGEX.exec(cleanedValue) as any; - if (viz !== v.replace(/\"/g, '') || predicate === 'visualization') { + if (viz !== v.replace(/\"/g, '') || predicate === 'view') { continue; } diff --git a/js/src/cql2asp.ts b/js/src/cql2asp.ts index 4946a28..ddfc100 100644 --- a/js/src/cql2asp.ts +++ b/js/src/cql2asp.ts @@ -3,7 +3,7 @@ const HOLE = '?'; export default function cql2asp(spec: any) { const mark = subst_if_hole(spec.mark); - const facts = ['visualization(v1).']; + const facts = ['view(v1).']; if (mark) { facts.push(`mark(v1,${spec.mark}).`); diff --git a/output.json b/output.json index b1495d6..71be386 100644 --- a/output.json +++ b/output.json @@ -6,7 +6,7 @@ "Witnesses": [ { "Value": [ - "visualization(\"view\")", + "view(\"view\")", "encoding(\"view\",e0)", "encoding(\"view\",e1)", "encoding(\"view\",1)", diff --git a/output2.json b/output2.json index 4a66539..b5b9ab6 100644 --- a/output2.json +++ b/output2.json @@ -6,7 +6,7 @@ "Witnesses": [ { "Value": [ - "visualization(\"view\")", + "view(\"view\")", "encoding(\"view\",e0)", "encoding(\"view\",e1)", "mark(\"view\",bar)", From 00b522354958be507a6d2956286178938e04ae51 Mon Sep 17 00:00:00 2001 From: Halden Lin Date: Thu, 19 Sep 2019 21:06:13 -0700 Subject: [PATCH 24/25] Fix optimization. --- asp/assign_weights.lp | 3 +++ asp/compare.lp | 20 ++++++++++---------- asp/optimize.lp | 6 +++--- asp/optimize_draco.lp | 4 ++-- asp/optimize_graphscape.lp | 4 ++-- asp/soft.lp | 7 ++++++- asp/weights.lp | 2 ++ 7 files changed, 28 insertions(+), 18 deletions(-) diff --git a/asp/assign_weights.lp b/asp/assign_weights.lp index f39a257..b470973 100644 --- a/asp/assign_weights.lp +++ b/asp/assign_weights.lp @@ -15,6 +15,7 @@ soft_weight(count_twice,count_twice_weight). soft_weight(shape_cardinality,shape_cardinality_weight). soft_weight(string_non_nominal,string_non_nominal_weight). soft_weight(number_nominal,number_nominal_weight). +soft_weight(number_high_cardinality_ordinal,number_high_cardinality_ordinal_weight). soft_weight(bin_cardinality,bin_cardinality_weight). soft_weight(quant_bin,quant_bin_weight). soft_weight(agg_dim,agg_dim_weight). @@ -151,3 +152,5 @@ soft_weight(summary_discrete_row,summary_discrete_row_weight). soft_weight(summary_discrete_column,summary_discrete_column_weight). soft_weight(stack_zero,stack_zero_weight). soft_weight(stack_normalize,stack_normalize_weight). +soft_weight(x_y_fields_order,x_y_fields_order_weight). +soft_weight(rect_no_agg,rect_no_agg_weight). diff --git a/asp/compare.lp b/asp/compare.lp index 78ad056..d624d77 100644 --- a/asp/compare.lp +++ b/asp/compare.lp @@ -50,14 +50,14 @@ compare(edit_add_size_count,V1,V2,E2,count,add,none,size) :- not compare(_,V1,V2 compare(edit_add_row_count,V1,V2,E2,count,add,none,row) :- not compare(_,V1,V2,_,E2,move,_,row), comparable(V1,V2), channel(V2,E2,row), aggregate(V2,E2,count), not channel(V1,_,row). compare(edit_add_column_count,V1,V2,E2,count,add,none,column) :- not compare(_,V1,V2,_,E2,move,_,column), comparable(V1,V2), channel(V2,E2,column), aggregate(V2,E2,count), not channel(V1,_,column). compare(edit_add_text_count,V1,V2,E2,count,add,none,text) :- not compare(_,V1,V2,_,E2,move,_,text), comparable(V1,V2), channel(V2,E2,text), aggregate(V2,E2,count), not channel(V1,_,text). -compare(edit_remove_x_count,V1,V2,E2,count,remove,x,none) :- not compare(_,V1,V2,E1,_,move,x,_), comparable(V1,V2), channel(V1,E1,x), aggregate(V2,E2,count), not channel(V2,_,x). -compare(edit_remove_y_count,V1,V2,E2,count,remove,y,none) :- not compare(_,V1,V2,E1,_,move,y,_), comparable(V1,V2), channel(V1,E1,y), aggregate(V2,E2,count), not channel(V2,_,y). -compare(edit_remove_color_count,V1,V2,E2,count,remove,color,none) :- not compare(_,V1,V2,E1,_,move,color,_), comparable(V1,V2), channel(V1,E1,color), aggregate(V2,E2,count), not channel(V2,_,color). -compare(edit_remove_shape_count,V1,V2,E2,count,remove,shape,none) :- not compare(_,V1,V2,E1,_,move,shape,_), comparable(V1,V2), channel(V1,E1,shape), aggregate(V2,E2,count), not channel(V2,_,shape). -compare(edit_remove_size_count,V1,V2,E2,count,remove,size,none) :- not compare(_,V1,V2,E1,_,move,size,_), comparable(V1,V2), channel(V1,E1,size), aggregate(V2,E2,count), not channel(V2,_,size). -compare(edit_remove_row_count,V1,V2,E2,count,remove,row,none) :- not compare(_,V1,V2,E1,_,move,row,_), comparable(V1,V2), channel(V1,E1,row), aggregate(V2,E2,count), not channel(V2,_,row). -compare(edit_remove_column_count,V1,V2,E2,count,remove,column,none) :- not compare(_,V1,V2,E1,_,move,column,_), comparable(V1,V2), channel(V1,E1,column), aggregate(V2,E2,count), not channel(V2,_,column). -compare(edit_remove_text_count,V1,V2,E2,count,remove,text,none) :- not compare(_,V1,V2,E1,_,move,text,_), comparable(V1,V2), channel(V1,E1,text), aggregate(V2,E2,count), not channel(V2,_,text). +compare(edit_remove_x_count,V1,V2,E1,count,remove,x,none) :- not compare(_,V1,V2,E1,_,move,x,_), comparable(V1,V2), channel(V1,E1,x), aggregate(V1,E1,count), not channel(V2,_,x). +compare(edit_remove_y_count,V1,V2,E1,count,remove,y,none) :- not compare(_,V1,V2,E1,_,move,y,_), comparable(V1,V2), channel(V1,E1,y), aggregate(V1,E1,count), not channel(V2,_,y). +compare(edit_remove_color_count,V1,V2,E1,count,remove,color,none) :- not compare(_,V1,V2,E1,_,move,color,_), comparable(V1,V2), channel(V1,E1,color), aggregate(V1,E1,count), not channel(V2,_,color). +compare(edit_remove_shape_count,V1,V2,E1,count,remove,shape,none) :- not compare(_,V1,V2,E1,_,move,shape,_), comparable(V1,V2), channel(V1,E1,shape), aggregate(V1,E1,count), not channel(V2,_,shape). +compare(edit_remove_size_count,V1,V2,E1,count,remove,size,none) :- not compare(_,V1,V2,E1,_,move,size,_), comparable(V1,V2), channel(V1,E1,size), aggregate(V1,E1,count), not channel(V2,_,size). +compare(edit_remove_row_count,V1,V2,E1,count,remove,row,none) :- not compare(_,V1,V2,E1,_,move,row,_), comparable(V1,V2), channel(V1,E1,row), aggregate(V1,E1,count), not channel(V2,_,row). +compare(edit_remove_column_count,V1,V2,E1,count,remove,column,none) :- not compare(_,V1,V2,E1,_,move,column,_), comparable(V1,V2), channel(V1,E1,column), aggregate(V1,E1,count), not channel(V2,_,column). +compare(edit_remove_text_count,V1,V2,E1,count,remove,text,none) :- not compare(_,V1,V2,E1,_,move,text,_), comparable(V1,V2), channel(V1,E1,text), aggregate(V1,E1,count), not channel(V2,_,text). compare(edit_remove_x,V1,V2,E1,F1,remove,x,none) :- not compare(edit_remove_x_count,V1,V2,E1,count,remove,x,none), not compare(_,V1,V2,E1,_,move,x,_), comparable(V1,V2), channel(V1,E1,x), field(V1,E1,F1), not channel(V2,_,x). compare(edit_remove_y,V1,V2,E1,F1,remove,y,none) :- not compare(edit_remove_y_count,V1,V2,E1,count,remove,y,none), not compare(_,V1,V2,E1,_,move,y,_), comparable(V1,V2), channel(V1,E1,y), field(V1,E1,F1), not channel(V2,_,y). compare(edit_remove_color,V1,V2,E1,F1,remove,color,none) :- not compare(edit_remove_color_count,V1,V2,E1,count,remove,color,none), not compare(_,V1,V2,E1,_,move,color,_), comparable(V1,V2), channel(V1,E1,color), field(V1,E1,F1), not channel(V2,_,color). @@ -146,8 +146,8 @@ compare(edit_move_row_color,V1,V2,E1A,E2A,move,row,color) :- comparable(V1,V2), compare(edit_move_row_y,V1,V2,E1A,E2A,move,row,y) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,y). compare(edit_move_row_x,V1,V2,E1A,E2A,move,row,x) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,x). compare(edit_move_row_text,V1,V2,E1A,E2A,move,row,text) :- comparable(V1,V2), field(V1,E1A,F), field(V2,E2A,F), channel(V1,E1A,row), channel(V2,E2A,text). -compare(edit_swap_x_y,V1,V2,E1A,E2A,swap,x,y) :- comparable(V1,V2), channel(V1,E1A,x), channel(V1,E1B,y), channel(V2,E2A,x), channel(V2,E2B,y), field(V1,E1A,FA), field(V2,E2B,FA), field(V1,E1B,FB), field(V2,E2A,FB), E2A > E2B, E1A > E1B. -compare(edit_swap_row_column,V1,V2,E1A,E2A,swap,row,column) :- comparable(V1,V2), channel(V1,E1A,row), channel(V1,E1B,column), channel(V2,E2A,row), channel(V2,E2B,column), field(V1,E1A,FA), field(V2,E2B,FA), field(V1,E1B,FB), field(V2,E2A,FB), E2A > E2B, E1A > E1B. +compare(edit_swap_x_y,V1,V2,E1A,E2A,swap,x,y) :- comparable(V1,V2), channel(V1,E1A,x), channel(V1,E1B,y), channel(V2,E2A,x), channel(V2,E2B,y), field(V1,E1A,FA), field(V2,E2B,FA), field(V1,E1B,FB), field(V2,E2A,FB). +compare(edit_swap_row_column,V1,V2,E1A,E2A,swap,row,column) :- comparable(V1,V2), channel(V1,E1A,row), channel(V1,E1B,column), channel(V2,E2A,row), channel(V2,E2B,column), field(V1,E1A,FA), field(V2,E2B,FA), field(V1,E1B,FB), field(V2,E2A,FB). compare(edit_scale,V1,V2,E1,E2) :- comparable(V1,V2), field(V1,E1,F), field(V2,E2,F), log(V1,E1), not log(V2,E2). diff --git a/asp/optimize.lp b/asp/optimize.lp index 8f92e77..e70934b 100644 --- a/asp/optimize.lp +++ b/asp/optimize.lp @@ -1,6 +1,6 @@ % Minimize the feature weight -#minimize { WD,F,V,Q: soft_weight(F,WD), soft(F,V,Q) }. +#minimize { WD,F,V,Q: soft_weight(F,WD), soft(F,V,Q), not base(V) }. -% #minimize { W@2,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. -% #minimize { W@1,F,V1,V2: compare_weight(F,W), compare(F,V1,V2) }. +% #minimize { W@2,F,V,Q: soft_weight(F,W), soft(F,V,Q), not base(V) }. +% #minimize { W@1,F,V1,V2,A,B: compare_weight(F,W), compare(F,V1,V2,A,B) }. diff --git a/asp/optimize_draco.lp b/asp/optimize_draco.lp index edaf657..9f72e95 100644 --- a/asp/optimize_draco.lp +++ b/asp/optimize_draco.lp @@ -1,4 +1,4 @@ -#minimize { W@2,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. -#minimize { W@1,F,V1,V2,A,B: compare_weight(F,W), compare(F,V1,V2,A,B) }. +#minimize { W,F,V,Q: soft_weight(F,W), soft(F,V,Q), not base(V) }. +% #minimize { W@1,F,V1,V2,A,B: compare_weight(F,W), compare(F,V1,V2,A,B) }. % #minimize { W,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. diff --git a/asp/optimize_graphscape.lp b/asp/optimize_graphscape.lp index 0ab9e40..18fe463 100644 --- a/asp/optimize_graphscape.lp +++ b/asp/optimize_graphscape.lp @@ -1,2 +1,2 @@ -#minimize { W@1,F,V,Q: soft_weight(F,W), soft(F,V,Q) }. -#minimize { W@2,F,V1,V2,A,B: compare_weight(F,W), compare(F,V1,V2,A,B) }. +% #minimize { W@1,F,V,Q: soft_weight(F,W), soft(F,V,Q), not base(V) }. +#minimize { W,F,V1,V2,A,B: compare_weight(F,W), compare(F,V1,V2,A,B) }. diff --git a/asp/soft.lp b/asp/soft.lp index f727fdf..b7e9c22 100644 --- a/asp/soft.lp +++ b/asp/soft.lp @@ -92,7 +92,7 @@ soft(includes_zero,V,E) :- zero(V,E), field(V,E,F), extent(F,MIN,MAX), MIN < 0, soft(only_x,V) :- channel(V,_,y), not channel(V,_,x). % @constraint Chart orientation for bar and tick (with and without bin). Binned fields have short labels if they are quantitative while otherwise labels can be long. -soft(orientation_binned,V) :- bin(V,E,_), type(V,E,quantitative), not channel(V,E,x). +soft(orientation_binned,V) :- mark(V,(bar;tick)), bin(V,E,_), type(V,E,quantitative), not channel(V,E,x). % @constraint Prefer not to use ordinal for fields with high cardinality. soft(high_cardinality_ordinal,V,E) :- type(V,E,ordinal), discrete_cardinality(V,E,C), C > 30. @@ -477,3 +477,8 @@ soft(summary_discrete_row,E) :- task(V,summary), channel(V,E,row), discrete(V,E) % @constraint Discrete column for summary tasks. soft(summary_discrete_column,E) :- task(V,summary), channel(V,E,column), discrete(V,E), enc_interesting(V,E). +% @constraint Tiebreaker to keep fields on x and y consistent. +soft(x_y_fields_order,V) :- field(V,EX,F1), field(V,EY,F2), channel(V,EX,x), channel(V,EY,y), F1 > F2. + +% @constraint Rect without aggregate +% soft(d_d_rect_point_no_agg,V,none) :- mark(V,(point;rect)), is_d_d(V), not aggregate(V,_,_). diff --git a/asp/weights.lp b/asp/weights.lp index 41a0836..e3d0959 100644 --- a/asp/weights.lp +++ b/asp/weights.lp @@ -166,3 +166,5 @@ #const stack_zero_weight = 0. #const stack_normalize_weight = 1. +#const x_y_fields_order_weight = 1. +#const rect_no_agg_weight = 40. From 321adda88f2131f04a79a5c47e7f496cb81b1078 Mon Sep 17 00:00:00 2001 From: Halden Lin Date: Fri, 20 Sep 2019 07:25:26 -0700 Subject: [PATCH 25/25] Fix weights. --- asp/weights.lp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/asp/weights.lp b/asp/weights.lp index e3d0959..4f804c2 100644 --- a/asp/weights.lp +++ b/asp/weights.lp @@ -70,7 +70,7 @@ #const c_d_text_weight = 50. #const c_d_tick_weight = 0. -#const c_d_no_overlap_point_weight = 20. +#const c_d_no_overlap_point_weight = 10. #const c_d_no_overlap_bar_weight = 0. #const c_d_no_overlap_line_weight = 20. #const c_d_no_overlap_area_weight = 20.