Profiling results ----------------- Total cpu time observed: 191830ms (out of 193016ms) Number of samples taken: 553 (once every 347ms) (Hiding functions with self<1.0% and local<2.0%: 7 of 201 hidden) ========================================================================================== Caller Idx Total Self Name+src Local% ms(pct) ms(pct) Callee ========================================================================================== ??? [36] 100.0% [1] 176544(92.0%) 0(0.0%) profile-thunk16 ...t/pkgs/profile-lib/main.rkt:9:0 run [9] 100.0% ------------------------------------------------------------------------------------------ ??? [36] 100.0% [2] 169458(88.3%) 0(0.0%) run-improve50 ...ie/develop/src/mainloop.rkt:234:0 for-loop [10] 84.8% get-final-combination [11] 15.2% ------------------------------------------------------------------------------------------ ??? [47] 100.0% [3] 10276(5.4%) 0(0.0%) loop ...herbie/develop/src/core/simplify.rkt:210:2 pass [12] 100.0% ------------------------------------------------------------------------------------------ substitute-e [112] 15.5% match-e [94] 84.5% [4] 4456(2.3%) 0(0.0%) variable? ...e/develop/src/syntax/syntax.rkt:529:0 ??? [58] 100.0% ------------------------------------------------------------------------------------------ hash-ref! [132] 100.0% [5] 696(0.4%) 0(0.0%) ??? ...s/herbie/develop/src/core/taylor.rkt:282:26 for-loop [13] 100.0% ------------------------------------------------------------------------------------------ loop [81] 100.0% [6] 674(0.4%) 0(0.0%) ??? ...ket/collects/racket/private/list.rkt:323:18 hash-ref! [132] 82.2% map [59] 17.8% ------------------------------------------------------------------------------------------ hash-ref! [132] 100.0% [7] 360(0.2%) 0(0.0%) ??? ...s/herbie/develop/src/core/taylor.rkt:319:33 for-loop [14] 100.0% ------------------------------------------------------------------------------------------ hash-ref! [132] 100.0% [8] 360(0.2%) 0(0.0%) ??? ...s/herbie/develop/src/core/taylor.rkt:292:23 for-loop [15] 100.0% ------------------------------------------------------------------------------------------ profile-thunk16 [1] 100.0% [9] 176544(92.0%) 0(0.0%) run ...share/racket/pkgs/profile-lib/main.rkt:39:2 ??? [36] 100.0% ------------------------------------------------------------------------------------------ run-improve50 [2] 100.0% [10] 143754(74.9%) 0(0.0%) for-loop ...herbie/develop/src/mainloop.rkt:249:10 run-iter! [16] 100.0% ------------------------------------------------------------------------------------------ run-improve50 [2] 100.0% [11] 25704(13.4%) 0(0.0%) get-final-combination ...op/src/mainloop.rkt:264:0 split-table [17] 98.7% extract-alt [19] 1.3% ------------------------------------------------------------------------------------------ loop [3] 100.0% [12] 10276(5.4%) 0(0.0%) pass ...herbie/develop/src/core/simplify.rkt:200:2 for-loop [18] 100.0% ------------------------------------------------------------------------------------------ ??? [5] 100.0% [13] 696(0.4%) 0(0.0%) for-loop ...bie/develop/src/core/taylor.rkt:282:52 hash-ref! [132] 51.7% simplify [91] 48.3% ------------------------------------------------------------------------------------------ ??? [7] 100.0% [14] 360(0.2%) 0(0.0%) for-loop ...bie/develop/src/core/taylor.rkt:321:46 hash-ref! [132] 50.0% simplify [91] 50.0% ------------------------------------------------------------------------------------------ ??? [8] 100.0% [15] 360(0.2%) 0(0.0%) for-loop ...bie/develop/src/core/taylor.rkt:295:27 hash-ref! [132] 100.0% ------------------------------------------------------------------------------------------ for-loop [10] 100.0% [16] 143754(74.9%) 0(0.0%) run-iter! ...herbie/develop/src/mainloop.rkt:215:0 simplify! [20] 88.8% finalize-iter! [22] 9.6% gen-series! [25] 0.7% localize-error [26] 0.5% gen-rewrites! [29] 0.2% ------------------------------------------------------------------------------------------ get-final-combination [11] 100.0% [17] 25368(13.2%) 0(0.0%) split-table ...s/herbie/develop/src/glue.rkt:162:0 f134 [21] 100.0% ------------------------------------------------------------------------------------------ pass [12] 100.0% [18] 10276(5.4%) 0(0.0%) for-loop ...e/develop/src/core/simplify.rkt:203:29 argmin [23] 71.0% loop [24] 19.2% for-loop [27] 6.3% make-sequence [178] 3.5% ------------------------------------------------------------------------------------------ get-final-combination [11] 100.0% [19] 336(0.2%) 0(0.0%) extract-alt ...es/herbie/develop/src/glue.rkt:54:0 loop [28] 100.0% ------------------------------------------------------------------------------------------ run-iter! [16] 100.0% [20] 127586(66.5%) 0(0.0%) simplify! ...herbie/develop/src/mainloop.rkt:155:0 for-loop [30] 100.0% ------------------------------------------------------------------------------------------ map [59] 0.2% approximate9 [53] 0.2% simplify [91] 1.2% eval-const-expr [98] 6.8% eval-prog [120] 10.4% f134 [21] 18.2% split-table [17] 62.9% [21] 29454(15.4%) 720(0.4%) f134 .../collects/racket/match/compiler.rkt:507:40 loop [81] 49.3% f134 [21] 18.2% option-on-expr [87] 13.6% ??? [43] 11.3% ??? [47] 2.3% ??? [34] 2.2% ...velop/src/common.rkt:47:2 [50] 1.1% map [59] 0.2% ------------------------------------------------------------------------------------------ run-iter! [16] 100.0% [22] 13822(7.2%) 0(0.0%) finalize-iter! ...e/develop/src/mainloop.rkt:169:0 ??? [58] 100.0% ------------------------------------------------------------------------------------------ for-loop [18] 100.0% [23] 7296(3.8%) 310(0.2%) argmin ...re/racket/collects/racket/list.rkt:743:0 for-loop [31] 86.0% expression-cost [32] 9.8% ------------------------------------------------------------------------------------------ for-loop [18] 100.0% [24] 1974(1.0%) 0(0.0%) loop ...hare/racket/collects/racket/list.rkt:729:4 for-loop [31] 81.4% expression-cost [32] 18.6% ------------------------------------------------------------------------------------------ run-iter! [16] 100.0% [25] 1056(0.6%) 0(0.0%) gen-series! ...rbie/develop/src/mainloop.rkt:129:0 for-loop [33] 100.0% ------------------------------------------------------------------------------------------ run-iter! [16] 100.0% [26] 674(0.4%) 0(0.0%) localize-error ...velop/src/core/localize.rkt:47:0 hash-ref! [132] 100.0% ------------------------------------------------------------------------------------------ for-loop [18] 100.0% [27] 648(0.3%) 648(0.3%) for-loop ...e/develop/src/core/simplify.rkt:190:13 ------------------------------------------------------------------------------------------ extract-alt [19] 100.0% [28] 336(0.2%) 0(0.0%) loop ...htlies/herbie/develop/src/common.rkt:142:2 composed [74] 100.0% ------------------------------------------------------------------------------------------ run-iter! [16] 100.0% [29] 288(0.2%) 0(0.0%) gen-rewrites! ...ie/develop/src/mainloop.rkt:142:0 for-loop [35] 100.0% ------------------------------------------------------------------------------------------ simplify! [20] 99.2% [30] 128572(67.0%) 0(0.0%) for-loop .../herbie/develop/src/mainloop.rkt:159:6 ??? [36] 100.0% ------------------------------------------------------------------------------------------ loop [24] 20.4% argmin [23] 79.6% [31] 7878(4.1%) 362(0.2%) for-loop .../herbie/develop/src/programs.rkt:200:2 ??? [47] 57.1% ...velop/src/common.rkt:47:2 [50] 38.3% ------------------------------------------------------------------------------------------ loop [24] 34.0% argmin [23] 66.0% [32] 1082(0.6%) 0(0.0%) expression-cost .../develop/src/programs.rkt:199:0 compile [37] 100.0% ------------------------------------------------------------------------------------------ gen-series! [25] 100.0% [33] 1056(0.6%) 0(0.0%) for-loop .../herbie/develop/src/mainloop.rkt:135:7 taylor-alt [38] 100.0% ------------------------------------------------------------------------------------------ ??? [47] 34.1% f134 [21] 65.9% [34] 974(0.5%) 332(0.2%) ??? ...tract/private/arrow-higher-order.rkt:336:46 ??? [49] 65.9% ------------------------------------------------------------------------------------------ gen-rewrites! [29] 100.0% [35] 288(0.2%) 0(0.0%) for-loop ...herbie/develop/src/mainloop.rkt:147:11 ??? [39] 100.0% ------------------------------------------------------------------------------------------ for-loop [30] 23.2% run [9] 35.7% [36] 187958(98.0%) 0(0.0%) ??? ...lects/racket/private/more-scheme.rkt:261:28 profile-thunk16 [1] 35.7% run-improve50 [2] 34.2% ??? [47] 27.7% loop [40] 2.5% ------------------------------------------------------------------------------------------ expression-cost [32] 100.0% [37] 1082(0.6%) 0(0.0%) compile ...s/herbie/develop/src/programs.rkt:176:0 hash-ref! [132] 100.0% ------------------------------------------------------------------------------------------ for-loop [33] 100.0% [38] 1056(0.6%) 0(0.0%) taylor-alt ...es/herbie/develop/src/glue.rkt:139:0 for-loop [41] 100.0% ------------------------------------------------------------------------------------------ for-loop [35] 100.0% [39] 288(0.2%) 0(0.0%) ??? ...ies/herbie/develop/src/alternative.rkt:88:0 rewriter [42] 100.0% ------------------------------------------------------------------------------------------ ??? [36] 100.0% [40] 9054(4.7%) 0(0.0%) loop ...htlies/herbie/develop/src/points.rkt:193:2 make-exacts* [48] 64.2% loop [44] 35.8% ------------------------------------------------------------------------------------------ taylor-alt [38] 100.0% [41] 1056(0.6%) 0(0.0%) for-loop ...lies/herbie/develop/src/glue.rkt:141:2 ??? [43] 100.0% ------------------------------------------------------------------------------------------ matcher [55] 50.0% ??? [39] 50.0% [42] 288(0.2%) 0(0.0%) rewriter ...bie/develop/src/core/matcher.rkt:127:2 for-loop [45] 50.0% *rules* [46] 50.0% ------------------------------------------------------------------------------------------ ??? [78] 2.7% for-loop [41] 4.4% ??? [47] 7.1% f134 [21] 85.8% [43] 12094(6.3%) 360(0.2%) ??? ...tract/private/arrow-higher-order.rkt:342:33 ??? [47] 44.0% ??? [49] 25.6% ??? [52] 11.7% approximate9 [53] 4.4% ...velop/src/common.rkt:47:2 [50] 3.0% ??? [167] 2.9% ->flonum [171] 2.8% best-alt [54] 2.7% ------------------------------------------------------------------------------------------ loop [40] 100.0% [44] 3240(1.7%) 0(0.0%) loop ...htlies/herbie/develop/src/points.rkt:151:2 loop [51] 54.8% make-exacts* [48] 34.1% eval-prog [120] 11.0% ------------------------------------------------------------------------------------------ rewriter [42] 100.0% [45] 288(0.2%) 0(0.0%) for-loop ...ie/develop/src/core/matcher.rkt:130:10 matcher [55] 100.0% ------------------------------------------------------------------------------------------ rewriter [42] 100.0% [46] 288(0.2%) 0(0.0%) *rules* ...rbie/develop/src/syntax/rules.rkt:445:0 for-loop [75] 100.0% ------------------------------------------------------------------------------------------ f134 [21] 0.2% for-loop [31] 1.0% ??? [43] 3.8% ??? [47] 10.8% for-loop [57] 36.4% ??? [36] 47.5% [47] 143184(74.6%) 3096(1.6%) ??? ...llects/racket/private/norm-define.rkt:53:83 iterate-egraph!13 [56] 44.0% for-loop [57] 36.4% ??? [47] 10.8% loop [3] 3.1% ??? [144] 2.9% ??? [43] 0.7% *simplify-rules* [65] 0.2% ??? [34] 0.1% ------------------------------------------------------------------------------------------ loop [44] 16.0% loop [40] 84.0% [48] 6920(3.6%) 0(0.0%) make-exacts* ...erbie/develop/src/points.rkt:138:0 loop [81] 74.1% map [59] 25.9% ------------------------------------------------------------------------------------------ ??? [188] 6.8% ??? [34] 13.5% ??? [60] 14.4% ??? [43] 65.3% [49] 4746(2.5%) 0(0.0%) ??? ...ects/racket/contract/private/guts.rkt:644:8 ??? [58] 78.8% contract? [63] 14.4% dict? [68] 6.8% ------------------------------------------------------------------------------------------ f134 [21] 9.0% ??? [43] 9.7% for-loop [31] 81.3% [50] 3708(1.9%) 1340(0.7%) ...velop/src/common.rkt:47:2 ...e/arr-i.rkt:906:19 ??? [60] 37.1% ??? [61] 26.8% ------------------------------------------------------------------------------------------ loop [44] 100.0% [51] 1776(0.9%) 0(0.0%) loop ...htlies/herbie/develop/src/points.rkt:141:4 map [59] 100.0% ------------------------------------------------------------------------------------------ ??? [43] 100.0% [52] 1412(0.7%) 360(0.2%) ??? ...ts/racket/contract/private/arr-i.rkt:804:10 ??? [169] 25.9% get/build-late-neg-projection [64] 25.5% ??? [67] 23.1% ------------------------------------------------------------------------------------------ ??? [43] 100.0% [53] 1056(0.6%) 0(0.0%) approximate9 ...e/develop/src/core/taylor.rkt:12:0 loop [62] 65.9% f134 [21] 34.1% ------------------------------------------------------------------------------------------ ??? [43] 100.0% [54] 328(0.2%) 0(0.0%) best-alt ...tlies/herbie/develop/src/glue.rkt:76:0 argmins [66] 100.0% ------------------------------------------------------------------------------------------ for-loop [69] 50.0% for-loop [45] 50.0% [55] 288(0.2%) 0(0.0%) matcher ...rbie/develop/src/core/matcher.rkt:163:2 for-loop [69] 50.0% rewriter [42] 50.0% ------------------------------------------------------------------------------------------ ??? [47] 100.0% [56] 126354(65.9%) 302(0.2%) iterate-egraph!13 ...p/src/core/simplify.rkt:102:0 one-iter [70] 94.1% map-enodes [72] 5.3% debug-print [102] 0.3% ------------------------------------------------------------------------------------------ ??? [47] 100.0% [57] 105084(54.8%) 0(0.0%) for-loop ...ie/develop/src/core/simplify.rkt:63:12 ??? [47] 100.0% ------------------------------------------------------------------------------------------ ??? [49] 11.0% variable? [4] 14.4% match-e [94] 30.1% finalize-iter! [22] 43.5% [58] 31026(16.2%) 10696(5.6%) ??? ...contract/private/arrow-val-first.rkt:357:18 for-loop [71] 43.5% hash-has-key? [131] 21.0% ??? [78] 1.1% ------------------------------------------------------------------------------------------ ??? [6] 8.4% f134 [21] 8.4% loop [51] 41.4% make-exacts* [48] 41.8% [59] 4290(2.2%) 0(0.0%) map ...acket/collects/racket/private/map.rkt:20:13 loop [81] 83.2% f134 [21] 8.4% ->flonum [171] 8.4% ------------------------------------------------------------------------------------------ for-loop [83] 24.8% ...velop/src/common.rkt:47:2 [50] 75.2% [60] 1376(0.7%) 0(0.0%) ??? ...ects/racket/contract/private/list.rkt:342:4 ??? [73] 75.2% ??? [49] 24.8% ------------------------------------------------------------------------------------------ ...velop/src/common.rkt:47:2 [50] 100.0% [61] 992(0.5%) 0(0.0%) ??? ...s/racket/contract/private/arr-i.rkt:1268:39 ??? [188] 100.0% ------------------------------------------------------------------------------------------ approximate9 [53] 100.0% [62] 696(0.4%) 0(0.0%) loop ...es/herbie/develop/src/core/taylor.rkt:83:4 hash-ref! [132] 100.0% ------------------------------------------------------------------------------------------ ??? [49] 100.0% [63] 682(0.4%) 682(0.4%) contract? ...acket/contract/private/guts.rkt:109:0 ------------------------------------------------------------------------------------------ unconstrained-domain->-projection [77] 50.0% ??? [52] 50.0% [64] 360(0.2%) 0(0.0%) get/build-late-neg-projection ...te/guts.rkt:691:0 unconstrained-domain->-projection [77] 50.0% ??? [76] 50.0% ------------------------------------------------------------------------------------------ ??? [47] 100.0% [65] 352(0.2%) 0(0.0%) *simplify-rules* ...lop/src/syntax/rules.rkt:449:0 for-loop [75] 100.0% ------------------------------------------------------------------------------------------ best-alt [54] 100.0% [66] 328(0.2%) 0(0.0%) argmins ...ies/herbie/develop/src/common.rkt:141:0 composed [74] 100.0% ------------------------------------------------------------------------------------------ ??? [52] 100.0% [67] 326(0.2%) 326(0.2%) ??? ...private/unconstrained-domain-arrow.rkt:69:2 ------------------------------------------------------------------------------------------ ??? [49] 100.0% [68] 324(0.2%) 324(0.2%) dict? ...ollects/racket/private/generic.rkt:146:11 ------------------------------------------------------------------------------------------ matcher [55] 100.0% [69] 288(0.2%) 0(0.0%) for-loop ...ie/develop/src/core/matcher.rkt:179:21 matcher [55] 100.0% ------------------------------------------------------------------------------------------ iterate-egraph!13 [56] 100.0% [70] 118960(62.0%) 3330(1.7%) one-iter ...ie/develop/src/core/simplify.rkt:113:0 for-loop [79] 47.5% loop [80] 44.4% apply-match [86] 4.1% filter [190] 0.6% ------------------------------------------------------------------------------------------ ??? [58] 100.0% [71] 13822(7.2%) 0(0.0%) for-loop ...ie/develop/src/core/alt-table.rkt:51:2 atab-add-altn [82] 100.0% ------------------------------------------------------------------------------------------ iterate-egraph!13 [56] 100.0% [72] 6736(3.5%) 0(0.0%) map-enodes ...ie/develop/src/core/egraph.rkt:139:0 loop [81] 84.3% for-loop [89] 15.7% ------------------------------------------------------------------------------------------ ??? [60] 100.0% [73] 1376(0.7%) 694(0.4%) ??? ...cts/racket/contract/private/list.rkt:187:10 for-loop [83] 49.6% ------------------------------------------------------------------------------------------ argmins [66] 49.4% loop [28] 50.6% [74] 664(0.3%) 0(0.0%) composed ...ollects/racket/private/list.rkt:321:16 errors [95] 100.0% ------------------------------------------------------------------------------------------ *rules* [46] 45.0% *simplify-rules* [65] 55.0% [75] 640(0.3%) 0(0.0%) for-loop ...ies/herbie/develop/src/common.rkt:94:9 ormap [84] 100.0% ------------------------------------------------------------------------------------------ get/build-late-neg-projection [64] 100.0% [76] 360(0.2%) 0(0.0%) ??? ...cts/racket/contract/private/prop.rkt:314:12 build-compound-type-name [85] 100.0% ------------------------------------------------------------------------------------------ get/build-late-neg-projection [64] 100.0% [77] 360(0.2%) 0(0.0%) unconstrained-domain->-projection ...rrow.rkt:60:0 get/build-late-neg-projection [64] 100.0% ------------------------------------------------------------------------------------------ ??? [58] 100.0% [78] 328(0.2%) 0(0.0%) ??? .../herbie/develop/src/core/alt-table.rkt:54:0 ??? [43] 100.0% ------------------------------------------------------------------------------------------ for-loop [79] 48.5% one-iter [70] 51.5% [79] 56450(29.4%) 15066(7.9%) for-loop ...e/develop/src/core/simplify.rkt:123:12 for-loop [79] 48.5% match-e [94] 36.0% ??? [135] 0.6% ------------------------------------------------------------------------------------------ one-iter [70] 100.0% [80] 52840(27.5%) 0(0.0%) loop ...cket/collects/racket/private/map.rkt:52:19 apply-match [86] 100.0% ------------------------------------------------------------------------------------------ map [59] 0.1% make-exacts* [48] 0.1% parse-loop12 [153] 0.7% for-loop [107] 1.2% ??? [148] 2.1% option-on-expr [87] 2.1% match-e [94] 2.3% loop! [130] 3.7% map-enodes [72] 3.9% f134 [21] 40.7% loop [81] 42.3% [81] 45322(23.6%) 698(0.4%) loop ...cket/collects/racket/private/map.rkt:25:19 loop [81] 42.3% option-on-expr [87] 40.7% for-loop [89] 3.9% loop! [130] 3.7% errors [95] 2.1% hash-ref! [132] 2.1% foldl [92] 1.2% simplify [91] 0.8% ??? [6] 0.7% ??? [156] 0.2% ------------------------------------------------------------------------------------------ for-loop [71] 100.0% [82] 13822(7.2%) 0(0.0%) atab-add-altn ...elop/src/core/alt-table.rkt:208:0 best-and-tied-at-points [88] 87.6% override-at-pnts [90] 12.4% ------------------------------------------------------------------------------------------ ??? [73] 100.0% [83] 682(0.4%) 0(0.0%) for-loop ...acket/contract/private/list.rkt:190:15 ??? [60] 100.0% ------------------------------------------------------------------------------------------ for-loop [75] 100.0% [84] 640(0.3%) 0(0.0%) ormap ...et/collects/racket/private/map.rkt:105:13 flag-set? [93] 100.0% ------------------------------------------------------------------------------------------ ??? [76] 100.0% [85] 360(0.2%) 360(0.2%) build-compound-type-name ...private/guts.rkt:448:0 ------------------------------------------------------------------------------------------ one-iter [70] 8.5% loop [80] 91.5% [86] 57736(30.1%) 1040(0.5%) apply-match ...develop/src/core/simplify.rkt:129:2 merge-egraph-nodes! [108] 37.7% match-e [94] 20.8% for-loop [97] 10.7% update-leader! [119] 9.6% loop! [130] 9.5% mk-enode! [122] 3.8% substitute-e [112] 3.7% reduce-to-single! [101] 2.5% ------------------------------------------------------------------------------------------ f134 [21] 18.5% loop [81] 81.5% [87] 25368(13.2%) 0(0.0%) option-on-expr ...evelop/src/core/regimes.rkt:92:0 pick-errors [96] 68.3% sort-context-on-expr [99] 14.8% errors [95] 7.8% loop [81] 6.4% err-lsts->split-indices [103] 2.6% ------------------------------------------------------------------------------------------ atab-add-altn [82] 100.0% [88] 12106(6.3%) 0(0.0%) best-and-tied-at-points ...ore/alt-table.rkt:122:0 errors [95] 96.9% for-loop [104] 3.1% ------------------------------------------------------------------------------------------ map-enodes [72] 15.7% loop [81] 84.3% [89] 6736(3.5%) 1054(0.5%) for-loop ...ie/develop/src/core/simplify.rkt:168:2 eval-const-expr [98] 60.0% setfindf [100] 24.3% ------------------------------------------------------------------------------------------ atab-add-altn [82] 100.0% [90] 1716(0.9%) 0(0.0%) override-at-pnts ...p/src/core/alt-table.rkt:145:0 errors [95] 100.0% ------------------------------------------------------------------------------------------ for-loop [13] 31.8% for-loop [14] 34.1% loop [81] 34.1% [91] 1056(0.6%) 0(0.0%) simplify ...erbie/develop/src/core/reduce.rkt:15:0 debug-print [102] 34.1% f134 [21] 34.1% simplify* [105] 31.8% ------------------------------------------------------------------------------------------ loop [81] 100.0% [92] 998(0.5%) 666(0.3%) foldl ...et/collects/racket/private/list.rkt:229:4 merge2 [106] 33.3% ------------------------------------------------------------------------------------------ ormap [84] 100.0% [93] 640(0.3%) 0(0.0%) flag-set? ...es/herbie/develop/src/config.rkt:32:0 ??? [188] 55.0% return/no-unsupplied [180] 45.0% ------------------------------------------------------------------------------------------ apply-match [86] 14.1% for-loop [118] 22.6% for-loop [79] 63.3% [94] 52694(27.5%) 20890(10.9%) match-e ...herbie/develop/src/core/ematch.rkt:46:0 for-loop [107] 38.3% ??? [58] 9.1% for-loop [118] 8.7% variable? [4] 3.1% custom-in-set [113] 2.6% list-cartesian-product [123] 1.6% loop [81] 1.3% ------------------------------------------------------------------------------------------ composed [74] 3.7% loop [81] 9.2% override-at-pnts [90] 9.7% option-on-expr [87] 11.1% best-and-tied-at-points [88] 66.2% [95] 17720(9.2%) 362(0.2%) errors ...lies/herbie/develop/src/points.rkt:218:0 for-loop [110] 74.9% eval-prog [120] 23.0% ------------------------------------------------------------------------------------------ option-on-expr [87] 100.0% [96] 17334(9.0%) 0(0.0%) pick-errors .../develop/src/core/regimes.rkt:160:0 for-loop [109] 100.0% ------------------------------------------------------------------------------------------ apply-match [86] 100.0% [97] 6162(3.2%) 0(0.0%) for-loop ...e/develop/src/core/simplify.rkt:143:10 loop! [130] 72.1% merge-egraph-nodes! [108] 22.5% substitute-e [112] 5.4% ------------------------------------------------------------------------------------------ for-loop [89] 100.0% [98] 4044(2.1%) 662(0.3%) eval-const-expr .../develop/src/programs.rkt:167:0 f134 [21] 49.7% ??? [114] 25.9% ??? [175] 8.1% ------------------------------------------------------------------------------------------ option-on-expr [87] 100.0% [99] 3762(2.0%) 0(0.0%) sort-context-on-expr ...velop/src/points.rkt:115:0 ??? [111] 100.0% ------------------------------------------------------------------------------------------ for-loop [89] 100.0% [100] 1638(0.9%) 1316(0.7%) setfindf ...es/herbie/develop/src/common.rkt:175:0 for-loop [117] 19.7% ------------------------------------------------------------------------------------------ apply-match [86] 100.0% [101] 1464(0.8%) 0(0.0%) reduce-to-single! ...lop/src/core/egraph.rkt:324:0 for-loop [115] 50.7% make-sequence [178] 49.3% ------------------------------------------------------------------------------------------ iterate-egraph!13 [56] 49.7% simplify [91] 50.3% [102] 716(0.4%) 716(0.4%) debug-print .../herbie/develop/src/debug.rkt:107:0 ------------------------------------------------------------------------------------------ option-on-expr [87] 100.0% [103] 668(0.3%) 0(0.0%) err-lsts->split-indices .../core/regimes.rkt:214:0 add-splitpoint [116] 100.0% ------------------------------------------------------------------------------------------ best-and-tied-at-points [88] 100.0% [104] 370(0.2%) 370(0.2%) for-loop .../develop/src/core/alt-table.rkt:124:16 ------------------------------------------------------------------------------------------ simplify [91] 100.0% [105] 336(0.2%) 0(0.0%) simplify* ...rbie/develop/src/core/reduce.rkt:20:0 return/no-unsupplied [180] 100.0% ------------------------------------------------------------------------------------------ foldl [92] 100.0% [106] 332(0.2%) 332(0.2%) merge2 .../herbie/develop/src/core/ematch.rkt:31:0 ------------------------------------------------------------------------------------------ match-e [94] 100.0% [107] 27212(14.2%) 8006(4.2%) for-loop ...rbie/develop/src/core/ematch.rkt:59:11 for-loop [118] 64.1% list-cartesian-product [123] 6.0% loop [81] 3.7% filter [190] 0.7% ------------------------------------------------------------------------------------------ for-loop [126] 0.5% merge-egraph-nodes! [108] 5.1% for-loop [97] 6.0% apply-match [86] 88.4% [108] 23136(12.1%) 662(0.3%) merge-egraph-nodes! ...p/src/core/egraph.rkt:152:0 update-leader! [119] 62.2% loop! [130] 9.8% for-loop [124] 8.6% enode-merge! [125] 7.5% merge-egraph-nodes! [108] 5.1% for-loop [126] 3.9% ------------------------------------------------------------------------------------------ pick-errors [96] 100.0% [109] 17334(9.0%) 0(0.0%) for-loop ...bie/develop/src/core/regimes.rkt:163:6 eval-prog [120] 93.9% ??? [156] 6.1% ------------------------------------------------------------------------------------------ errors [95] 100.0% [110] 13278(6.9%) 1300(0.7%) for-loop ...es/herbie/develop/src/points.rkt:221:4 ??? [156] 88.0% ->flonum [171] 2.2% ------------------------------------------------------------------------------------------ sort-context-on-expr [99] 100.0% [111] 3762(2.0%) 0(0.0%) ??? ...cket/collects/racket/private/sort.rkt:403:3 generic-sort/key [121] 100.0% ------------------------------------------------------------------------------------------ for-loop [97] 13.6% substitute-e [112] 16.6% apply-match [86] 69.8% [112] 2450(1.3%) 394(0.2%) substitute-e ...e/develop/src/core/ematch.rkt:71:0 mk-enode! [122] 55.7% substitute-e [112] 16.6% variable? [4] 11.7% ------------------------------------------------------------------------------------------ match-e [94] 100.0% [113] 1716(0.9%) 1716(0.9%) custom-in-set ...acket/private/set-types.rkt:577:0 ------------------------------------------------------------------------------------------ eval-const-expr [98] 100.0% [114] 1048(0.5%) 0(0.0%) ??? ...cket/collects/racket/private/kw.rkt:1633:36 unpack242 [127] 100.0% ------------------------------------------------------------------------------------------ reduce-to-single! [101] 100.0% [115] 742(0.4%) 742(0.4%) for-loop ...rbie/develop/src/core/egraph.rkt:325:8 ------------------------------------------------------------------------------------------ err-lsts->split-indices [103] 100.0% [116] 668(0.3%) 0(0.0%) add-splitpoint ...velop/src/core/regimes.rkt:227:2 for-loop [128] 100.0% ------------------------------------------------------------------------------------------ setfindf [100] 100.0% [117] 322(0.2%) 322(0.2%) for-loop ...es/herbie/develop/src/common.rkt:176:2 ------------------------------------------------------------------------------------------ match-e [94] 30.4% for-loop [107] 69.6% [118] 24310(12.7%) 3052(1.6%) for-loop ...rbie/develop/src/core/ematch.rkt:65:37 match-e [94] 86.7% ??? [135] 2.8% ------------------------------------------------------------------------------------------ apply-match [86] 26.5% merge-egraph-nodes! [108] 73.5% [119] 20854(10.9%) 1678(0.9%) update-leader! ...evelop/src/core/egraph.rkt:217:0 for-loop [129] 88.5% hash-ref! [132] 1.8% ------------------------------------------------------------------------------------------ loop [44] 1.7% errors [95] 19.7% for-loop [109] 78.6% [120] 20718(10.8%) 6912(3.6%) eval-prog ...herbie/develop/src/programs.rkt:149:0 f134 [21] 50.1% hash-ref! [132] 6.7% parse-app [136] 5.0% ??? [139] 3.3% ------------------------------------------------------------------------------------------ ??? [111] 100.0% [121] 3762(2.0%) 0(0.0%) generic-sort/key .../racket/private/sort.rkt:185:2 copying-mergesort [133] 91.3% loop [147] 8.7% ------------------------------------------------------------------------------------------ substitute-e [112] 38.6% apply-match [86] 61.4% [122] 3538(1.8%) 2818(1.5%) mk-enode! ...bie/develop/src/core/egraph.rkt:101:0 new-enode [141] 10.2% hash-has-key? [131] 10.2% ------------------------------------------------------------------------------------------ list-cartesian-product [123] 18.5% match-e [94] 36.4% for-loop [107] 45.2% [123] 2828(1.5%) 2134(1.1%) list-cartesian-product ...src/core/ematch.rkt:20:0 for-loop [137] 18.6% list-cartesian-product [123] 18.5% ------------------------------------------------------------------------------------------ merge-egraph-nodes! [108] 100.0% [124] 1988(1.0%) 1988(1.0%) for-loop ...rbie/develop/src/core/egraph.rkt:232:6 ------------------------------------------------------------------------------------------ merge-egraph-nodes! [108] 100.0% [125] 1740(0.9%) 0(0.0%) enode-merge! ...e/develop/src/core/enode.rkt:100:0 custom-set-intersect! [134] 81.3% adopt-enode! [142] 18.7% ------------------------------------------------------------------------------------------ merge-egraph-nodes! [108] 100.0% [126] 1308(0.7%) 0(0.0%) for-loop ...bie/develop/src/core/egraph.rkt:200:10 loop! [130] 74.5% merge-egraph-nodes! [108] 25.5% ------------------------------------------------------------------------------------------ ??? [114] 100.0% [127] 1048(0.5%) 358(0.2%) unpack242 ...private/arrow-higher-order.rkt:354:44 maybe-cons-kwd [138] 65.8% ------------------------------------------------------------------------------------------ add-splitpoint [116] 100.0% [128] 668(0.3%) 0(0.0%) for-loop ...bie/develop/src/core/regimes.rkt:229:4 for-loop [140] 100.0% ------------------------------------------------------------------------------------------ update-leader! [119] 100.0% [129] 18458(9.6%) 694(0.4%) for-loop ...rbie/develop/src/core/egraph.rkt:222:6 for-loop [143] 96.2% ------------------------------------------------------------------------------------------ for-loop [126] 4.7% merge-egraph-nodes! [108] 13.0% loop [81] 23.5% apply-match [86] 29.3% for-loop [97] 29.5% [130] 13340(7.0%) 2012(1.0%) loop! ...s/herbie/develop/src/core/enode.rkt:163:2 custom-set-union [145] 50.0% loop [81] 23.5% set [146] 11.1% update-en-expr [186] 5.3% ------------------------------------------------------------------------------------------ mk-enode! [122] 5.0% ??? [58] 95.0% [131] 7202(3.8%) 3100(1.6%) hash-has-key? ...et/private/more-scheme.rkt:368:13 ??? [144] 57.0% ------------------------------------------------------------------------------------------ for-loop [15] 1.7% for-loop [13] 1.7% for-loop [14] 1.7% ??? [149] 3.7% loop [62] 3.7% ??? [155] 4.0% localize-error [26] 6.6% update-leader! [119] 8.8% ??? [6] 9.4% ??? [148] 9.9% loop [81] 15.7% compile [37] 15.8% eval-prog [120] 17.2% [132] 4204(2.2%) 2476(1.3%) hash-ref! ...racket/private/more-scheme.rkt:373:13 ??? [148] 25.6% parse-loop12 [153] 16.0% ??? [155] 4.0% ??? [149] 3.7% ??? [5] 3.7% ??? [7] 3.4% bigfloat-hash [154] 2.8% ??? [8] 1.7% ------------------------------------------------------------------------------------------ copying-mergesort [133] 41.6% generic-sort/key [121] 58.4% [133] 3436(1.8%) 0(0.0%) copying-mergesort ...racket/private/sort.rkt:130:8 loop [147] 53.4% copying-mergesort [133] 41.6% jloop [151] 5.0% ------------------------------------------------------------------------------------------ enode-merge! [125] 100.0% [134] 1414(0.7%) 1414(0.7%) custom-set-intersect! ...ivate/set-types.rkt:269:0 ------------------------------------------------------------------------------------------ for-loop [118] 49.1% for-loop [79] 50.9% [135] 1404(0.7%) 714(0.4%) ??? ...ies/herbie/develop/src/core/ematch.rkt:50:5 for-loop [150] 49.1% ------------------------------------------------------------------------------------------ eval-prog [120] 100.0% [136] 1030(0.5%) 1030(0.5%) parse-app .../collects/racket/private/kw.rkt:951:2 ------------------------------------------------------------------------------------------ list-cartesian-product [123] 100.0% [137] 694(0.4%) 694(0.4%) for-loop ...erbie/develop/src/core/ematch.rkt:24:8 ------------------------------------------------------------------------------------------ unpack242 [127] 100.0% [138] 690(0.4%) 0(0.0%) maybe-cons-kwd ...ate/arrow-higher-order.rkt:498:0 successfully-got-the-right-kind-of-function [160] 52.8% arrow-higher-order:lnp [161] 47.2% ------------------------------------------------------------------------------------------ eval-prog [120] 100.0% [139] 674(0.4%) 0(0.0%) ??? ...collects/racket/private/qq-and-or.rkt:155:9 ??? [152] 100.0% ------------------------------------------------------------------------------------------ for-loop [128] 100.0% [140] 668(0.3%) 668(0.3%) for-loop ...bie/develop/src/core/regimes.rkt:233:8 ------------------------------------------------------------------------------------------ mk-enode! [122] 100.0% [141] 360(0.2%) 360(0.2%) new-enode ...erbie/develop/src/core/enode.rkt:68:0 ------------------------------------------------------------------------------------------ enode-merge! [125] 100.0% [142] 326(0.2%) 0(0.0%) adopt-enode! ...ie/develop/src/core/enode.rkt:76:0 custom-set-union [145] 100.0% ------------------------------------------------------------------------------------------ for-loop [129] 100.0% [143] 17764(9.3%) 360(0.2%) for-loop ...rbie/develop/src/core/egraph.rkt:223:8 hash-update! [157] 98.0% ------------------------------------------------------------------------------------------ hash-has-key? [131] 38.4% ??? [47] 61.6% [144] 10672(5.6%) 5070(2.6%) ??? ...ects/racket/contract/private/list.rkt:737:4 for-loop [159] 40.1% ??? [169] 6.2% successfully-got-the-right-kind-of-function [160] 3.4% arrow-higher-order:lnp [161] 2.8% ------------------------------------------------------------------------------------------ adopt-enode! [142] 4.6% loop! [130] 95.4% [145] 7164(3.7%) 2070(1.1%) custom-set-union ...et/private/set-types.rkt:168:0 for-loop [158] 66.1% for-loop [162] 5.0% ------------------------------------------------------------------------------------------ loop! [130] 100.0% [146] 3082(1.6%) 3082(1.6%) set ...collects/racket/private/set-types.rkt:981:0 ------------------------------------------------------------------------------------------ generic-sort/key [121] 10.6% copying-mergesort [133] 89.4% [147] 3080(1.6%) 0(0.0%) loop ...ket/collects/racket/private/sort.rkt:97:12 ??? [156] 100.0% ------------------------------------------------------------------------------------------ hash-ref! [132] 100.0% [148] 1798(0.9%) 0(0.0%) ??? ...tlies/herbie/develop/src/programs.rkt:184:5 loop [81] 60.3% hash-ref! [132] 39.7% ------------------------------------------------------------------------------------------ hash-ref! [132] 100.0% [149] 696(0.4%) 0(0.0%) ??? ...es/herbie/develop/src/core/taylor.rkt:43:15 hash-ref! [132] 100.0% ------------------------------------------------------------------------------------------ ??? [135] 100.0% [150] 690(0.4%) 690(0.4%) for-loop ...erbie/develop/src/core/ematch.rkt:51:7 ------------------------------------------------------------------------------------------ copying-mergesort [133] 100.0% [151] 682(0.4%) 324(0.2%) jloop ...t/collects/racket/private/sort.rkt:121:23 ??? [156] 52.5% ------------------------------------------------------------------------------------------ ??? [139] 100.0% [152] 674(0.4%) 674(0.4%) ??? ...ollects/racket/private/qq-and-or.rkt:164:21 ------------------------------------------------------------------------------------------ hash-ref! [132] 100.0% [153] 674(0.4%) 0(0.0%) parse-loop12 ...s/racket/match/compiler.rkt:418:15 loop [81] 76.7% loop [164] 23.3% ------------------------------------------------------------------------------------------ hash-ref! [132] 100.0% [154] 358(0.2%) 0(0.0%) bigfloat-hash ...h/private/bigfloat/mpfr.rkt:165:0 bfcanonicalize [163] 100.0% ------------------------------------------------------------------------------------------ hash-ref! [132] 100.0% [155] 336(0.2%) 0(0.0%) ??? ...s/herbie/develop/src/core/taylor.rkt:335:33 hash-ref! [132] 100.0% ------------------------------------------------------------------------------------------ jloop [151] 1.4% for-loop [109] 4.2% loop [147] 12.4% loop [81] 35.0% for-loop [110] 47.0% [156] 24868(13.0%) 0(0.0%) ??? ...tlies/herbie/develop/src/programs.rkt:155:4 ??? [165] 83.9% ??? [167] 13.4% ->flonum [171] 2.8% ------------------------------------------------------------------------------------------ for-loop [143] 100.0% [157] 17404(9.1%) 726(0.4%) hash-update! ...ket/private/more-scheme.rkt:362:13 ??? [166] 95.8% ------------------------------------------------------------------------------------------ custom-set-union [145] 100.0% [158] 4734(2.5%) 1364(0.7%) for-loop ...cts/racket/private/set-types.rkt:174:3 for-loop [168] 71.2% ------------------------------------------------------------------------------------------ ??? [144] 100.0% [159] 4276(2.2%) 698(0.4%) for-loop ...acket/contract/private/list.rkt:743:12 for-loop [170] 45.9% ??? [169] 37.8% ------------------------------------------------------------------------------------------ maybe-cons-kwd [138] 49.9% ??? [144] 50.1% [160] 730(0.4%) 364(0.2%) successfully-got-the-right-kind-of-function ...9:4 arity-checking-wrapper [172] 50.1% ------------------------------------------------------------------------------------------ ??? [144] 48.1% maybe-cons-kwd [138] 51.9% [161] 628(0.3%) 302(0.2%) arrow-higher-order:lnp ...w-higher-order.rkt:597:7 ??? [173] 51.9% ------------------------------------------------------------------------------------------ custom-set-union [145] 100.0% [162] 360(0.2%) 360(0.2%) for-loop ...cts/racket/private/set-types.rkt:152:2 ------------------------------------------------------------------------------------------ bigfloat-hash [154] 100.0% [163] 358(0.2%) 358(0.2%) bfcanonicalize .../private/bigfloat/mpfr.rkt:155:0 ------------------------------------------------------------------------------------------ parse-loop12 [153] 1.5% loop [164] 98.5% [164] 314(0.2%) 314(0.2%) loop ...cket/collects/racket/private/map.rkt:36:19 loop [164] 98.5% ------------------------------------------------------------------------------------------ ??? [156] 100.0% [165] 20852(10.9%) 11758(6.1%) ??? ...acket/collects/racket/private/kw.rkt:444:14 ??? [175] 20.7% ??? [177] 13.0% ??? [181] 5.2% ??? [189] 4.8% ------------------------------------------------------------------------------------------ hash-update! [157] 100.0% [166] 16678(8.7%) 0(0.0%) ??? ...s/herbie/develop/src/core/egraph.rkt:225:24 for-loop [174] 98.2% make-sequence [178] 1.8% ------------------------------------------------------------------------------------------ ??? [43] 9.7% ??? [156] 90.3% [167] 3676(1.9%) 0(0.0%) ??? ...contract/private/../../private/kw.rkt:761:9 real->bigfloat [176] 90.3% integer->bigfloat [184] 9.7% ------------------------------------------------------------------------------------------ for-loop [158] 100.0% [168] 3370(1.8%) 3370(1.8%) for-loop ...cts/racket/private/set-types.rkt:178:5 ------------------------------------------------------------------------------------------ ??? [52] 13.9% ??? [144] 24.9% for-loop [159] 61.2% [169] 2640(1.4%) 1268(0.7%) ??? ...private/unconstrained-domain-arrow.rkt:74:4 make-keyword-procedure [179] 52.0% ------------------------------------------------------------------------------------------ for-loop [159] 100.0% [170] 1962(1.0%) 978(0.5%) for-loop ...racket/contract/private/hash.rkt:239:6 ??? [182] 35.0% ??? [189] 15.2% ------------------------------------------------------------------------------------------ for-loop [110] 17.6% ??? [43] 19.9% map [59] 21.3% ??? [156] 41.2% [171] 1690(0.9%) 720(0.4%) ->flonum ...s/herbie/develop/src/programs.rkt:37:0 return/no-unsupplied [180] 39.8% ??? [188] 17.6% ------------------------------------------------------------------------------------------ successfully-got-the-right-kind-of-function [160]100.0% [172] 366(0.2%) 0(0.0%) arity-checking-wrapper ...w-higher-order.rkt:402:0 matches-arity-exactly? [183] 100.0% ------------------------------------------------------------------------------------------ arrow-higher-order:lnp [161] 100.0% [173] 326(0.2%) 326(0.2%) ??? ...et/contract/private/arity-checking.rkt:19:2 ------------------------------------------------------------------------------------------ ??? [166] 100.0% [174] 16376(8.5%) 14376(7.5%) for-loop ...bie/develop/src/core/egraph.rkt:226:26 update-en-expr [186] 12.2% ------------------------------------------------------------------------------------------ eval-const-expr [98] 7.0% ??? [165] 93.0% [175] 4640(2.4%) 360(0.2%) ??? ...-racket/utils/simple-result-arrow.rkt:39:12 bfsub [185] 85.2% bfneg [191] 7.0% ------------------------------------------------------------------------------------------ ??? [167] 100.0% [176] 3320(1.7%) 788(0.4%) real->bigfloat .../private/bigfloat/mpfr.rkt:451:0 ??? [187] 76.3% ------------------------------------------------------------------------------------------ ??? [165] 100.0% [177] 2704(1.4%) 2704(1.4%) ??? ...rivate/unconstrained-domain-arrow.rkt:40:13 ------------------------------------------------------------------------------------------ ??? [166] 21.9% for-loop [18] 25.9% reduce-to-single! [101] 52.2% [178] 1382(0.7%) 1382(0.7%) make-sequence ...ects/racket/private/for.rkt:509:2 ------------------------------------------------------------------------------------------ ??? [169] 100.0% [179] 1372(0.7%) 1372(0.7%) make-keyword-procedure ...ket/private/kw.rkt:260:4 ------------------------------------------------------------------------------------------ flag-set? [93] 22.2% simplify* [105] 25.9% ->flonum [171] 51.9% [180] 1296(0.7%) 960(0.5%) return/no-unsupplied ...ct/private/arr-i.rkt:533:0 filter [190] 25.9% ------------------------------------------------------------------------------------------ ??? [165] 100.0% [181] 1080(0.6%) 722(0.4%) ??? ...herbie/develop/src/syntax/syntax.rkt:118:17 ??? [188] 33.1% ------------------------------------------------------------------------------------------ for-loop [170] 100.0% [182] 686(0.4%) 0(0.0%) ??? ...ects/racket/contract/private/list.rkt:686:7 ??? [189] 100.0% ------------------------------------------------------------------------------------------ arity-checking-wrapper [172] 100.0% [183] 366(0.2%) 366(0.2%) matches-arity-exactly? ...te/arrow-common.rkt:70:0 ------------------------------------------------------------------------------------------ ??? [167] 100.0% [184] 356(0.2%) 356(0.2%) integer->bigfloat ...ivate/bigfloat/mpfr.rkt:399:0 ------------------------------------------------------------------------------------------ ??? [175] 100.0% [185] 3954(2.1%) 3954(2.1%) bfsub ...-lib/math/private/bigfloat/mpfr.rkt:819:4 ------------------------------------------------------------------------------------------ loop! [130] 41.3% for-loop [174] 58.7% [186] 3408(1.8%) 3408(1.8%) update-en-expr ...evelop/src/core/egraph.rkt:211:0 ------------------------------------------------------------------------------------------ real->bigfloat [176] 100.0% [187] 2532(1.3%) 2532(1.3%) ??? .../share/racket/collects/ffi/unsafe.rkt:861:4 ------------------------------------------------------------------------------------------ ->flonum [171] 14.9% flag-set? [93] 17.6% ??? [181] 17.9% ??? [61] 49.6% [188] 2000(1.0%) 0(0.0%) ??? ...racket/collects/racket/private/kw.rkt:761:9 ??? [192] 83.8% ??? [49] 16.2% ------------------------------------------------------------------------------------------ for-loop [170] 15.1% ??? [182] 34.6% ??? [165] 50.3% [189] 1980(1.0%) 1654(0.9%) ??? ...ects/racket/contract/private/prop.rkt:493:4 ??? [193] 16.5% ------------------------------------------------------------------------------------------ return/no-unsupplied [180] 23.8% for-loop [107] 25.2% one-iter [70] 51.1% [190] 1414(0.7%) 1414(0.7%) filter ...t/collects/racket/private/list.rkt:256:2 ------------------------------------------------------------------------------------------ ??? [175] 100.0% [191] 326(0.2%) 326(0.2%) bfneg ...-lib/math/private/bigfloat/mpfr.rkt:616:4 ------------------------------------------------------------------------------------------ ??? [188] 100.0% [192] 1676(0.9%) 1676(0.9%) ??? ...s/racket/contract/private/arr-i.rkt:1233:27 ------------------------------------------------------------------------------------------ ??? [189] 100.0% [193] 326(0.2%) 0(0.0%) ??? ...lects/racket/contract/private/orc.rkt:83:14 ??? [194] 100.0% ------------------------------------------------------------------------------------------ ??? [193] 100.0% [194] 326(0.2%) 326(0.2%) ??? ...ects/racket/contract/private/list.rkt:141:5 ------------------------------------------------------------------------------------------