[{"data":1,"prerenderedAt":3158},["ShallowReactive",2],{"docs:\u002Freference\u002Futilities":3},{"id":4,"title":5,"body":6,"description":3149,"extension":3150,"meta":3151,"navigation":3153,"path":3154,"seo":3155,"stem":3156,"__hash__":3157},"docs\u002Freference\u002Futilities.md","Utilities",{"type":7,"value":8,"toc":3140},"minimark",[9,13,22,28,68,73,80,927,932,936,967,973,1036,1080,1089,1170,1213,1216,1282,1286,1372,1391,1572,1576,1668,1686,1855,1861,1865,1972,1987,2201,2207,2211,2254,2261,2378,2485,2499,2642,2745,2755,2896,2916,2920,2969,2983,3131,3136],[10,11,5],"h1",{"id":12},"utilities",[14,15,16,17,21],"p",{},"The ",[18,19,20],"code",{},"pydreamplet.utils"," module contains small helpers used by colors, generators,\nscales, charts, and label layout.",[14,23,24,25,27],{},"Utilities are imported from ",[18,26,20],{},".",[29,30,35],"pre",{"className":31,"code":32,"language":33,"meta":34,"style":34},"language-python shiki shiki-themes material-theme-lighter github-light-high-contrast github-dark","from pydreamplet.utils import calculate_ticks, place_labels_1d\n","python","",[18,36,37],{"__ignoreMap":34},[38,39,42,46,50,53,56,59,62,65],"span",{"class":40,"line":41},"line",1,[38,43,45],{"class":44},"sED7I","from",[38,47,49],{"class":48},"soTeR"," pydreamplet",[38,51,27],{"class":52},"sVsmf",[38,54,55],{"class":48},"utils ",[38,57,58],{"class":44},"import",[38,60,61],{"class":48}," calculate_ticks",[38,63,64],{"class":52},",",[38,66,67],{"class":48}," place_labels_1d\n",[69,70,72],"h2",{"id":71},"visual-example","Visual Example",[14,74,75,76,79],{},"This example uses ",[18,77,78],{},"place_labels_1d()"," to resolve overlapping labels while keeping\neach label close to its original anchor.",[29,81,83],{"className":31,"code":82,"language":33,"meta":34,"style":34},"import pydreamplet as dp\nfrom pydreamplet.utils import place_labels_1d\n\nanchors = [42, 55, 68, 128, 136, 206]\nsizes = [36, 36, 36, 44, 44, 38]\nplacements = place_labels_1d(anchors, sizes, gap=4, bounds=(24, 276))\n\nsvg = dp.SVG(300, 150)\nsvg.append(dp.Line(24, 114, 276, 114, stroke=\"currentColor\", opacity=0.3))\n\nfor anchor, placement in zip(anchors, placements):\n    svg.append(\n        dp.Line(anchor, 114, placement.position, 78, stroke=\"currentColor\", opacity=0.35),\n        dp.Circle(cx=anchor, cy=114, r=3, fill=\"#f83898\"),\n        dp.Rect(\n            x=placement.start,\n            y=60,\n            width=placement.size,\n            height=24,\n            rx=4,\n            fill=\"#14b8a6\",\n            opacity=0.24,\n            stroke=\"#14b8a6\",\n            stroke_width=1.5,\n        ),\n        dp.Text(\n            str(int(anchor)),\n            x=placement.position,\n            y=76,\n            font_size=11,\n            text_anchor=\"middle\",\n            fill=\"currentColor\",\n        ),\n    )\n\nsvg.append(dp.Text(\"anchor positions\", x=24, y=134, font_size=12, fill=\"currentColor\"))\nsvg.append(dp.Text(\"resolved label positions\", x=58, y=45, font_size=12, fill=\"currentColor\"))\n",[18,84,85,98,113,120,165,203,257,262,291,358,363,396,409,468,523,535,554,567,584,596,608,625,638,654,667,673,685,704,719,731,744,761,776,781,787,792,861],{"__ignoreMap":34},[38,86,87,89,92,95],{"class":40,"line":41},[38,88,58],{"class":44},[38,90,91],{"class":48}," pydreamplet ",[38,93,94],{"class":44},"as",[38,96,97],{"class":48}," dp\n",[38,99,101,103,105,107,109,111],{"class":40,"line":100},2,[38,102,45],{"class":44},[38,104,49],{"class":48},[38,106,27],{"class":52},[38,108,55],{"class":48},[38,110,58],{"class":44},[38,112,67],{"class":48},[38,114,116],{"class":40,"line":115},3,[38,117,119],{"emptyLinePlaceholder":118},true,"\n",[38,121,123,126,130,133,137,139,142,144,147,149,152,154,157,159,162],{"class":40,"line":122},4,[38,124,125],{"class":48},"anchors ",[38,127,129],{"class":128},"sWKEy","=",[38,131,132],{"class":52}," [",[38,134,136],{"class":135},"sNpir","42",[38,138,64],{"class":52},[38,140,141],{"class":135}," 55",[38,143,64],{"class":52},[38,145,146],{"class":135}," 68",[38,148,64],{"class":52},[38,150,151],{"class":135}," 128",[38,153,64],{"class":52},[38,155,156],{"class":135}," 136",[38,158,64],{"class":52},[38,160,161],{"class":135}," 206",[38,163,164],{"class":52},"]\n",[38,166,168,171,173,175,178,180,183,185,187,189,192,194,196,198,201],{"class":40,"line":167},5,[38,169,170],{"class":48},"sizes ",[38,172,129],{"class":128},[38,174,132],{"class":52},[38,176,177],{"class":135},"36",[38,179,64],{"class":52},[38,181,182],{"class":135}," 36",[38,184,64],{"class":52},[38,186,182],{"class":135},[38,188,64],{"class":52},[38,190,191],{"class":135}," 44",[38,193,64],{"class":52},[38,195,191],{"class":135},[38,197,64],{"class":52},[38,199,200],{"class":135}," 38",[38,202,164],{"class":52},[38,204,206,209,211,215,218,221,223,226,228,232,234,237,239,242,244,246,249,251,254],{"class":40,"line":205},6,[38,207,208],{"class":48},"placements ",[38,210,129],{"class":128},[38,212,214],{"class":213},"sAK04"," place_labels_1d",[38,216,217],{"class":52},"(",[38,219,220],{"class":213},"anchors",[38,222,64],{"class":52},[38,224,225],{"class":213}," sizes",[38,227,64],{"class":52},[38,229,231],{"class":230},"sYEV4"," gap",[38,233,129],{"class":128},[38,235,236],{"class":135},"4",[38,238,64],{"class":52},[38,240,241],{"class":230}," bounds",[38,243,129],{"class":128},[38,245,217],{"class":52},[38,247,248],{"class":135},"24",[38,250,64],{"class":52},[38,252,253],{"class":135}," 276",[38,255,256],{"class":52},"))\n",[38,258,260],{"class":40,"line":259},7,[38,261,119],{"emptyLinePlaceholder":118},[38,263,265,268,270,273,275,278,280,283,285,288],{"class":40,"line":264},8,[38,266,267],{"class":48},"svg ",[38,269,129],{"class":128},[38,271,272],{"class":48}," dp",[38,274,27],{"class":52},[38,276,277],{"class":213},"SVG",[38,279,217],{"class":52},[38,281,282],{"class":135},"300",[38,284,64],{"class":52},[38,286,287],{"class":135}," 150",[38,289,290],{"class":52},")\n",[38,292,294,297,299,302,304,307,309,312,314,316,318,321,323,325,327,329,331,334,336,340,344,346,348,351,353,356],{"class":40,"line":293},9,[38,295,296],{"class":48},"svg",[38,298,27],{"class":52},[38,300,301],{"class":213},"append",[38,303,217],{"class":52},[38,305,306],{"class":213},"dp",[38,308,27],{"class":52},[38,310,311],{"class":213},"Line",[38,313,217],{"class":52},[38,315,248],{"class":135},[38,317,64],{"class":52},[38,319,320],{"class":135}," 114",[38,322,64],{"class":52},[38,324,253],{"class":135},[38,326,64],{"class":52},[38,328,320],{"class":135},[38,330,64],{"class":52},[38,332,333],{"class":230}," stroke",[38,335,129],{"class":128},[38,337,339],{"class":338},"sqo_7","\"",[38,341,343],{"class":342},"s_jvP","currentColor",[38,345,339],{"class":338},[38,347,64],{"class":52},[38,349,350],{"class":230}," opacity",[38,352,129],{"class":128},[38,354,355],{"class":135},"0.3",[38,357,256],{"class":52},[38,359,361],{"class":40,"line":360},10,[38,362,119],{"emptyLinePlaceholder":118},[38,364,366,369,372,374,377,380,384,386,388,390,393],{"class":40,"line":365},11,[38,367,368],{"class":44},"for",[38,370,371],{"class":48}," anchor",[38,373,64],{"class":52},[38,375,376],{"class":48}," placement ",[38,378,379],{"class":44},"in",[38,381,383],{"class":382},"sBTIf"," zip",[38,385,217],{"class":52},[38,387,220],{"class":213},[38,389,64],{"class":52},[38,391,392],{"class":213}," placements",[38,394,395],{"class":52},"):\n",[38,397,399,402,404,406],{"class":40,"line":398},12,[38,400,401],{"class":48},"    svg",[38,403,27],{"class":52},[38,405,301],{"class":213},[38,407,408],{"class":52},"(\n",[38,410,412,415,417,419,421,424,426,428,430,433,435,439,441,444,446,448,450,452,454,456,458,460,462,465],{"class":40,"line":411},13,[38,413,414],{"class":213},"        dp",[38,416,27],{"class":52},[38,418,311],{"class":213},[38,420,217],{"class":52},[38,422,423],{"class":213},"anchor",[38,425,64],{"class":52},[38,427,320],{"class":135},[38,429,64],{"class":52},[38,431,432],{"class":213}," placement",[38,434,27],{"class":52},[38,436,438],{"class":437},"sm80-","position",[38,440,64],{"class":52},[38,442,443],{"class":135}," 78",[38,445,64],{"class":52},[38,447,333],{"class":230},[38,449,129],{"class":128},[38,451,339],{"class":338},[38,453,343],{"class":342},[38,455,339],{"class":338},[38,457,64],{"class":52},[38,459,350],{"class":230},[38,461,129],{"class":128},[38,463,464],{"class":135},"0.35",[38,466,467],{"class":52},"),\n",[38,469,471,473,475,478,480,483,485,487,489,492,494,497,499,502,504,507,509,512,514,516,519,521],{"class":40,"line":470},14,[38,472,414],{"class":213},[38,474,27],{"class":52},[38,476,477],{"class":213},"Circle",[38,479,217],{"class":52},[38,481,482],{"class":230},"cx",[38,484,129],{"class":128},[38,486,423],{"class":213},[38,488,64],{"class":52},[38,490,491],{"class":230}," cy",[38,493,129],{"class":128},[38,495,496],{"class":135},"114",[38,498,64],{"class":52},[38,500,501],{"class":230}," r",[38,503,129],{"class":128},[38,505,506],{"class":135},"3",[38,508,64],{"class":52},[38,510,511],{"class":230}," fill",[38,513,129],{"class":128},[38,515,339],{"class":338},[38,517,518],{"class":342},"#f83898",[38,520,339],{"class":338},[38,522,467],{"class":52},[38,524,526,528,530,533],{"class":40,"line":525},15,[38,527,414],{"class":213},[38,529,27],{"class":52},[38,531,532],{"class":213},"Rect",[38,534,408],{"class":52},[38,536,538,541,543,546,548,551],{"class":40,"line":537},16,[38,539,540],{"class":230},"            x",[38,542,129],{"class":128},[38,544,545],{"class":213},"placement",[38,547,27],{"class":52},[38,549,550],{"class":437},"start",[38,552,553],{"class":52},",\n",[38,555,557,560,562,565],{"class":40,"line":556},17,[38,558,559],{"class":230},"            y",[38,561,129],{"class":128},[38,563,564],{"class":135},"60",[38,566,553],{"class":52},[38,568,570,573,575,577,579,582],{"class":40,"line":569},18,[38,571,572],{"class":230},"            width",[38,574,129],{"class":128},[38,576,545],{"class":213},[38,578,27],{"class":52},[38,580,581],{"class":437},"size",[38,583,553],{"class":52},[38,585,587,590,592,594],{"class":40,"line":586},19,[38,588,589],{"class":230},"            height",[38,591,129],{"class":128},[38,593,248],{"class":135},[38,595,553],{"class":52},[38,597,599,602,604,606],{"class":40,"line":598},20,[38,600,601],{"class":230},"            rx",[38,603,129],{"class":128},[38,605,236],{"class":135},[38,607,553],{"class":52},[38,609,611,614,616,618,621,623],{"class":40,"line":610},21,[38,612,613],{"class":230},"            fill",[38,615,129],{"class":128},[38,617,339],{"class":338},[38,619,620],{"class":342},"#14b8a6",[38,622,339],{"class":338},[38,624,553],{"class":52},[38,626,628,631,633,636],{"class":40,"line":627},22,[38,629,630],{"class":230},"            opacity",[38,632,129],{"class":128},[38,634,635],{"class":135},"0.24",[38,637,553],{"class":52},[38,639,641,644,646,648,650,652],{"class":40,"line":640},23,[38,642,643],{"class":230},"            stroke",[38,645,129],{"class":128},[38,647,339],{"class":338},[38,649,620],{"class":342},[38,651,339],{"class":338},[38,653,553],{"class":52},[38,655,657,660,662,665],{"class":40,"line":656},24,[38,658,659],{"class":230},"            stroke_width",[38,661,129],{"class":128},[38,663,664],{"class":135},"1.5",[38,666,553],{"class":52},[38,668,670],{"class":40,"line":669},25,[38,671,672],{"class":52},"        ),\n",[38,674,676,678,680,683],{"class":40,"line":675},26,[38,677,414],{"class":213},[38,679,27],{"class":52},[38,681,682],{"class":213},"Text",[38,684,408],{"class":52},[38,686,688,692,694,697,699,701],{"class":40,"line":687},27,[38,689,691],{"class":690},"s-tzF","            str",[38,693,217],{"class":52},[38,695,696],{"class":690},"int",[38,698,217],{"class":52},[38,700,423],{"class":213},[38,702,703],{"class":52},")),\n",[38,705,707,709,711,713,715,717],{"class":40,"line":706},28,[38,708,540],{"class":230},[38,710,129],{"class":128},[38,712,545],{"class":213},[38,714,27],{"class":52},[38,716,438],{"class":437},[38,718,553],{"class":52},[38,720,722,724,726,729],{"class":40,"line":721},29,[38,723,559],{"class":230},[38,725,129],{"class":128},[38,727,728],{"class":135},"76",[38,730,553],{"class":52},[38,732,734,737,739,742],{"class":40,"line":733},30,[38,735,736],{"class":230},"            font_size",[38,738,129],{"class":128},[38,740,741],{"class":135},"11",[38,743,553],{"class":52},[38,745,747,750,752,754,757,759],{"class":40,"line":746},31,[38,748,749],{"class":230},"            text_anchor",[38,751,129],{"class":128},[38,753,339],{"class":338},[38,755,756],{"class":342},"middle",[38,758,339],{"class":338},[38,760,553],{"class":52},[38,762,764,766,768,770,772,774],{"class":40,"line":763},32,[38,765,613],{"class":230},[38,767,129],{"class":128},[38,769,339],{"class":338},[38,771,343],{"class":342},[38,773,339],{"class":338},[38,775,553],{"class":52},[38,777,779],{"class":40,"line":778},33,[38,780,672],{"class":52},[38,782,784],{"class":40,"line":783},34,[38,785,786],{"class":52},"    )\n",[38,788,790],{"class":40,"line":789},35,[38,791,119],{"emptyLinePlaceholder":118},[38,793,795,797,799,801,803,805,807,809,811,813,816,818,820,823,825,827,829,832,834,837,839,842,844,847,849,851,853,855,857,859],{"class":40,"line":794},36,[38,796,296],{"class":48},[38,798,27],{"class":52},[38,800,301],{"class":213},[38,802,217],{"class":52},[38,804,306],{"class":213},[38,806,27],{"class":52},[38,808,682],{"class":213},[38,810,217],{"class":52},[38,812,339],{"class":338},[38,814,815],{"class":342},"anchor positions",[38,817,339],{"class":338},[38,819,64],{"class":52},[38,821,822],{"class":230}," x",[38,824,129],{"class":128},[38,826,248],{"class":135},[38,828,64],{"class":52},[38,830,831],{"class":230}," y",[38,833,129],{"class":128},[38,835,836],{"class":135},"134",[38,838,64],{"class":52},[38,840,841],{"class":230}," font_size",[38,843,129],{"class":128},[38,845,846],{"class":135},"12",[38,848,64],{"class":52},[38,850,511],{"class":230},[38,852,129],{"class":128},[38,854,339],{"class":338},[38,856,343],{"class":342},[38,858,339],{"class":338},[38,860,256],{"class":52},[38,862,864,866,868,870,872,874,876,878,880,882,885,887,889,891,893,896,898,900,902,905,907,909,911,913,915,917,919,921,923,925],{"class":40,"line":863},37,[38,865,296],{"class":48},[38,867,27],{"class":52},[38,869,301],{"class":213},[38,871,217],{"class":52},[38,873,306],{"class":213},[38,875,27],{"class":52},[38,877,682],{"class":213},[38,879,217],{"class":52},[38,881,339],{"class":338},[38,883,884],{"class":342},"resolved label positions",[38,886,339],{"class":338},[38,888,64],{"class":52},[38,890,822],{"class":230},[38,892,129],{"class":128},[38,894,895],{"class":135},"58",[38,897,64],{"class":52},[38,899,831],{"class":230},[38,901,129],{"class":128},[38,903,904],{"class":135},"45",[38,906,64],{"class":52},[38,908,841],{"class":230},[38,910,129],{"class":128},[38,912,846],{"class":135},[38,914,64],{"class":52},[38,916,511],{"class":230},[38,918,129],{"class":128},[38,920,339],{"class":338},[38,922,343],{"class":342},[38,924,339],{"class":338},[38,926,256],{"class":52},[928,929],"svg-preview",{"alt":930,"src":931},"Overlapping anchor labels moved into non-overlapping positions.","\u002Fshowcase\u002Fref_utilities_labels.svg",[69,933,935],{"id":934},"numeric-helpers","Numeric Helpers",[29,937,939],{"className":31,"code":938,"language":33,"meta":34,"style":34},"math_round(x: Real) -> int\n",[18,940,941],{"__ignoreMap":34},[38,942,943,946,948,951,954,957,960,964],{"class":40,"line":41},[38,944,945],{"class":213},"math_round",[38,947,217],{"class":52},[38,949,950],{"class":213},"x",[38,952,953],{"class":52},":",[38,955,956],{"class":213}," Real",[38,958,959],{"class":52},")",[38,961,963],{"class":962},"str-j"," ->",[38,965,966],{"class":690}," int\n",[14,968,969,970,27],{},"Rounds with half-up behavior by returning ",[18,971,972],{},"int(x + 0.5)",[29,974,976],{"className":31,"code":975,"language":33,"meta":34,"style":34},"from pydreamplet.utils import math_round\n\nassert math_round(3.4) == 3\nassert math_round(3.6) == 4\n",[18,977,978,993,997,1018],{"__ignoreMap":34},[38,979,980,982,984,986,988,990],{"class":40,"line":41},[38,981,45],{"class":44},[38,983,49],{"class":48},[38,985,27],{"class":52},[38,987,55],{"class":48},[38,989,58],{"class":44},[38,991,992],{"class":48}," math_round\n",[38,994,995],{"class":40,"line":100},[38,996,119],{"emptyLinePlaceholder":118},[38,998,999,1002,1005,1007,1010,1012,1015],{"class":40,"line":115},[38,1000,1001],{"class":44},"assert",[38,1003,1004],{"class":213}," math_round",[38,1006,217],{"class":52},[38,1008,1009],{"class":135},"3.4",[38,1011,959],{"class":52},[38,1013,1014],{"class":128}," ==",[38,1016,1017],{"class":135}," 3\n",[38,1019,1020,1022,1024,1026,1029,1031,1033],{"class":40,"line":122},[38,1021,1001],{"class":44},[38,1023,1004],{"class":213},[38,1025,217],{"class":52},[38,1027,1028],{"class":135},"3.6",[38,1030,959],{"class":52},[38,1032,1014],{"class":128},[38,1034,1035],{"class":135}," 4\n",[29,1037,1039],{"className":31,"code":1038,"language":33,"meta":34,"style":34},"constrain(value: Real, min_val: Real, max_val: Real) -> Real\n",[18,1040,1041],{"__ignoreMap":34},[38,1042,1043,1046,1048,1051,1053,1055,1057,1060,1062,1064,1066,1069,1071,1073,1075,1077],{"class":40,"line":41},[38,1044,1045],{"class":213},"constrain",[38,1047,217],{"class":52},[38,1049,1050],{"class":213},"value",[38,1052,953],{"class":52},[38,1054,956],{"class":213},[38,1056,64],{"class":52},[38,1058,1059],{"class":213}," min_val",[38,1061,953],{"class":52},[38,1063,956],{"class":213},[38,1065,64],{"class":52},[38,1067,1068],{"class":213}," max_val",[38,1070,953],{"class":52},[38,1072,956],{"class":213},[38,1074,959],{"class":52},[38,1076,963],{"class":962},[38,1078,1079],{"class":48}," Real\n",[14,1081,1082,1083,1085,1086,27],{},"Clamps ",[18,1084,1050],{}," into the inclusive range ",[18,1087,1088],{},"[min_val, max_val]",[29,1090,1092],{"className":31,"code":1091,"language":33,"meta":34,"style":34},"from pydreamplet.utils import constrain\n\nassert constrain(10, 0, 5) == 5\nassert constrain(-3, 0, 5) == 0\n",[18,1093,1094,1109,1113,1142],{"__ignoreMap":34},[38,1095,1096,1098,1100,1102,1104,1106],{"class":40,"line":41},[38,1097,45],{"class":44},[38,1099,49],{"class":48},[38,1101,27],{"class":52},[38,1103,55],{"class":48},[38,1105,58],{"class":44},[38,1107,1108],{"class":48}," constrain\n",[38,1110,1111],{"class":40,"line":100},[38,1112,119],{"emptyLinePlaceholder":118},[38,1114,1115,1117,1120,1122,1125,1127,1130,1132,1135,1137,1139],{"class":40,"line":115},[38,1116,1001],{"class":44},[38,1118,1119],{"class":213}," constrain",[38,1121,217],{"class":52},[38,1123,1124],{"class":135},"10",[38,1126,64],{"class":52},[38,1128,1129],{"class":135}," 0",[38,1131,64],{"class":52},[38,1133,1134],{"class":135}," 5",[38,1136,959],{"class":52},[38,1138,1014],{"class":128},[38,1140,1141],{"class":135}," 5\n",[38,1143,1144,1146,1148,1150,1153,1155,1157,1159,1161,1163,1165,1167],{"class":40,"line":122},[38,1145,1001],{"class":44},[38,1147,1119],{"class":213},[38,1149,217],{"class":52},[38,1151,1152],{"class":128},"-",[38,1154,506],{"class":135},[38,1156,64],{"class":52},[38,1158,1129],{"class":135},[38,1160,64],{"class":52},[38,1162,1134],{"class":135},[38,1164,959],{"class":52},[38,1166,1014],{"class":128},[38,1168,1169],{"class":135}," 0\n",[29,1171,1173],{"className":31,"code":1172,"language":33,"meta":34,"style":34},"radians(degrees: Real) -> Real\ndegrees(radians: Real) -> Real\n",[18,1174,1175,1195],{"__ignoreMap":34},[38,1176,1177,1180,1182,1185,1187,1189,1191,1193],{"class":40,"line":41},[38,1178,1179],{"class":213},"radians",[38,1181,217],{"class":52},[38,1183,1184],{"class":213},"degrees",[38,1186,953],{"class":52},[38,1188,956],{"class":213},[38,1190,959],{"class":52},[38,1192,963],{"class":962},[38,1194,1079],{"class":48},[38,1196,1197,1199,1201,1203,1205,1207,1209,1211],{"class":40,"line":100},[38,1198,1184],{"class":213},[38,1200,217],{"class":52},[38,1202,1179],{"class":213},[38,1204,953],{"class":52},[38,1206,956],{"class":213},[38,1208,959],{"class":52},[38,1210,963],{"class":962},[38,1212,1079],{"class":48},[14,1214,1215],{},"Converts between degrees and radians.",[29,1217,1219],{"className":31,"code":1218,"language":33,"meta":34,"style":34},"from pydreamplet.utils import degrees, radians\n\nassert radians(180) == 3.141592653589793\nassert degrees(3.141592653589793) == 180.0\n",[18,1220,1221,1241,1245,1264],{"__ignoreMap":34},[38,1222,1223,1225,1227,1229,1231,1233,1236,1238],{"class":40,"line":41},[38,1224,45],{"class":44},[38,1226,49],{"class":48},[38,1228,27],{"class":52},[38,1230,55],{"class":48},[38,1232,58],{"class":44},[38,1234,1235],{"class":48}," degrees",[38,1237,64],{"class":52},[38,1239,1240],{"class":48}," radians\n",[38,1242,1243],{"class":40,"line":100},[38,1244,119],{"emptyLinePlaceholder":118},[38,1246,1247,1249,1252,1254,1257,1259,1261],{"class":40,"line":115},[38,1248,1001],{"class":44},[38,1250,1251],{"class":213}," radians",[38,1253,217],{"class":52},[38,1255,1256],{"class":135},"180",[38,1258,959],{"class":52},[38,1260,1014],{"class":128},[38,1262,1263],{"class":135}," 3.141592653589793\n",[38,1265,1266,1268,1270,1272,1275,1277,1279],{"class":40,"line":122},[38,1267,1001],{"class":44},[38,1269,1235],{"class":213},[38,1271,217],{"class":52},[38,1273,1274],{"class":135},"3.141592653589793",[38,1276,959],{"class":52},[38,1278,1014],{"class":128},[38,1280,1281],{"class":135}," 180.0\n",[69,1283,1285],{"id":1284},"ticks","Ticks",[29,1287,1289],{"className":31,"code":1288,"language":33,"meta":34,"style":34},"calculate_ticks(\n    min_val: Real,\n    max_val: Real,\n    num_ticks: int = 5,\n    below_max: bool = True,\n) -> list[Real]\n",[18,1290,1291,1298,1309,1320,1337,1355],{"__ignoreMap":34},[38,1292,1293,1296],{"class":40,"line":41},[38,1294,1295],{"class":213},"calculate_ticks",[38,1297,408],{"class":52},[38,1299,1300,1303,1305,1307],{"class":40,"line":100},[38,1301,1302],{"class":213},"    min_val",[38,1304,953],{"class":52},[38,1306,956],{"class":213},[38,1308,553],{"class":52},[38,1310,1311,1314,1316,1318],{"class":40,"line":115},[38,1312,1313],{"class":213},"    max_val",[38,1315,953],{"class":52},[38,1317,956],{"class":213},[38,1319,553],{"class":52},[38,1321,1322,1325,1327,1330,1333,1335],{"class":40,"line":122},[38,1323,1324],{"class":213},"    num_ticks",[38,1326,953],{"class":52},[38,1328,1329],{"class":230}," int",[38,1331,1332],{"class":128}," =",[38,1334,1134],{"class":135},[38,1336,553],{"class":52},[38,1338,1339,1342,1344,1347,1349,1353],{"class":40,"line":167},[38,1340,1341],{"class":213},"    below_max",[38,1343,953],{"class":52},[38,1345,1346],{"class":230}," bool",[38,1348,1332],{"class":128},[38,1350,1352],{"class":1351},"sTy78"," True",[38,1354,553],{"class":52},[38,1356,1357,1359,1361,1364,1367,1370],{"class":40,"line":205},[38,1358,959],{"class":52},[38,1360,963],{"class":962},[38,1362,1363],{"class":48}," list",[38,1365,1366],{"class":52},"[",[38,1368,1369],{"class":48},"Real",[38,1371,164],{"class":52},[14,1373,1374,1375,1378,1379,1382,1383,1386,1387,1390],{},"Returns rounded tick values using 1, 2, 5, or 10 times a power-of-ten step.\n",[18,1376,1377],{},"min_val"," must be less than ",[18,1380,1381],{},"max_val",". When ",[18,1384,1385],{},"below_max"," is ",[18,1388,1389],{},"True",", ticks above\nthe maximum are removed.",[29,1392,1394],{"className":31,"code":1393,"language":33,"meta":34,"style":34},"from pydreamplet.utils import calculate_ticks\n\nassert calculate_ticks(0, 42986, 5) == [0, 10000, 20000, 30000, 40000]\nassert calculate_ticks(0, 1, 5) == [0.0, 0.2, 0.4, 0.6, 0.8, 1.0]\nassert calculate_ticks(0, 42986, 3, below_max=False) == [0, 20000, 40000, 60000]\n",[18,1395,1396,1411,1415,1465,1520],{"__ignoreMap":34},[38,1397,1398,1400,1402,1404,1406,1408],{"class":40,"line":41},[38,1399,45],{"class":44},[38,1401,49],{"class":48},[38,1403,27],{"class":52},[38,1405,55],{"class":48},[38,1407,58],{"class":44},[38,1409,1410],{"class":48}," calculate_ticks\n",[38,1412,1413],{"class":40,"line":100},[38,1414,119],{"emptyLinePlaceholder":118},[38,1416,1417,1419,1421,1423,1426,1428,1431,1433,1435,1437,1439,1441,1443,1445,1448,1450,1453,1455,1458,1460,1463],{"class":40,"line":115},[38,1418,1001],{"class":44},[38,1420,61],{"class":213},[38,1422,217],{"class":52},[38,1424,1425],{"class":135},"0",[38,1427,64],{"class":52},[38,1429,1430],{"class":135}," 42986",[38,1432,64],{"class":52},[38,1434,1134],{"class":135},[38,1436,959],{"class":52},[38,1438,1014],{"class":128},[38,1440,132],{"class":52},[38,1442,1425],{"class":135},[38,1444,64],{"class":52},[38,1446,1447],{"class":135}," 10000",[38,1449,64],{"class":52},[38,1451,1452],{"class":135}," 20000",[38,1454,64],{"class":52},[38,1456,1457],{"class":135}," 30000",[38,1459,64],{"class":52},[38,1461,1462],{"class":135}," 40000",[38,1464,164],{"class":52},[38,1466,1467,1469,1471,1473,1475,1477,1480,1482,1484,1486,1488,1490,1493,1495,1498,1500,1503,1505,1508,1510,1513,1515,1518],{"class":40,"line":122},[38,1468,1001],{"class":44},[38,1470,61],{"class":213},[38,1472,217],{"class":52},[38,1474,1425],{"class":135},[38,1476,64],{"class":52},[38,1478,1479],{"class":135}," 1",[38,1481,64],{"class":52},[38,1483,1134],{"class":135},[38,1485,959],{"class":52},[38,1487,1014],{"class":128},[38,1489,132],{"class":52},[38,1491,1492],{"class":135},"0.0",[38,1494,64],{"class":52},[38,1496,1497],{"class":135}," 0.2",[38,1499,64],{"class":52},[38,1501,1502],{"class":135}," 0.4",[38,1504,64],{"class":52},[38,1506,1507],{"class":135}," 0.6",[38,1509,64],{"class":52},[38,1511,1512],{"class":135}," 0.8",[38,1514,64],{"class":52},[38,1516,1517],{"class":135}," 1.0",[38,1519,164],{"class":52},[38,1521,1522,1524,1526,1528,1530,1532,1534,1536,1539,1541,1544,1546,1549,1551,1553,1555,1557,1559,1561,1563,1565,1567,1570],{"class":40,"line":167},[38,1523,1001],{"class":44},[38,1525,61],{"class":213},[38,1527,217],{"class":52},[38,1529,1425],{"class":135},[38,1531,64],{"class":52},[38,1533,1430],{"class":135},[38,1535,64],{"class":52},[38,1537,1538],{"class":135}," 3",[38,1540,64],{"class":52},[38,1542,1543],{"class":230}," below_max",[38,1545,129],{"class":128},[38,1547,1548],{"class":1351},"False",[38,1550,959],{"class":52},[38,1552,1014],{"class":128},[38,1554,132],{"class":52},[38,1556,1425],{"class":135},[38,1558,64],{"class":52},[38,1560,1452],{"class":135},[38,1562,64],{"class":52},[38,1564,1462],{"class":135},[38,1566,64],{"class":52},[38,1568,1569],{"class":135}," 60000",[38,1571,164],{"class":52},[69,1573,1575],{"id":1574},"pie-angles","Pie Angles",[29,1577,1579],{"className":31,"code":1578,"language":33,"meta":34,"style":34},"pie_angles(\n    values: Sequence[Real],\n    start_angle: Real = 0,\n    end_angle: Real | None = None,\n) -> list[tuple[float, float]]\n",[18,1580,1581,1588,1605,1620,1642],{"__ignoreMap":34},[38,1582,1583,1586],{"class":40,"line":41},[38,1584,1585],{"class":213},"pie_angles",[38,1587,408],{"class":52},[38,1589,1590,1593,1595,1598,1600,1602],{"class":40,"line":100},[38,1591,1592],{"class":213},"    values",[38,1594,953],{"class":52},[38,1596,1597],{"class":213}," Sequence",[38,1599,1366],{"class":52},[38,1601,1369],{"class":213},[38,1603,1604],{"class":52},"],\n",[38,1606,1607,1610,1612,1614,1616,1618],{"class":40,"line":115},[38,1608,1609],{"class":213},"    start_angle",[38,1611,953],{"class":52},[38,1613,956],{"class":230},[38,1615,1332],{"class":128},[38,1617,1129],{"class":135},[38,1619,553],{"class":52},[38,1621,1622,1625,1627,1630,1633,1636,1638,1640],{"class":40,"line":122},[38,1623,1624],{"class":213},"    end_angle",[38,1626,953],{"class":52},[38,1628,1629],{"class":213}," Real ",[38,1631,1632],{"class":128},"|",[38,1634,1635],{"class":230}," None",[38,1637,1332],{"class":128},[38,1639,1635],{"class":1351},[38,1641,553],{"class":52},[38,1643,1644,1646,1648,1650,1652,1655,1657,1660,1662,1665],{"class":40,"line":167},[38,1645,959],{"class":52},[38,1647,963],{"class":962},[38,1649,1363],{"class":48},[38,1651,1366],{"class":52},[38,1653,1654],{"class":48},"tuple",[38,1656,1366],{"class":52},[38,1658,1659],{"class":690},"float",[38,1661,64],{"class":52},[38,1663,1664],{"class":690}," float",[38,1666,1667],{"class":52},"]]\n",[14,1669,1670,1671,1674,1675,1678,1679,1682,1683,27],{},"Splits an angular span proportionally by ",[18,1672,1673],{},"values",". If ",[18,1676,1677],{},"end_angle"," is omitted,\nthe span is a full turn from ",[18,1680,1681],{},"start_angle"," to ",[18,1684,1685],{},"start_angle + 360",[29,1687,1689],{"className":31,"code":1688,"language":33,"meta":34,"style":34},"from pydreamplet.utils import pie_angles\n\nassert pie_angles([1, 2, 3]) == [(0, 60), (60, 180), (180, 360)]\nassert pie_angles([1, 2, 3], start_angle=90) == [(90, 150), (150, 270), (270, 450)]\nassert pie_angles([]) == []\n",[18,1690,1691,1706,1710,1774,1841],{"__ignoreMap":34},[38,1692,1693,1695,1697,1699,1701,1703],{"class":40,"line":41},[38,1694,45],{"class":44},[38,1696,49],{"class":48},[38,1698,27],{"class":52},[38,1700,55],{"class":48},[38,1702,58],{"class":44},[38,1704,1705],{"class":48}," pie_angles\n",[38,1707,1708],{"class":40,"line":100},[38,1709,119],{"emptyLinePlaceholder":118},[38,1711,1712,1714,1717,1720,1723,1725,1728,1730,1732,1735,1737,1740,1742,1744,1747,1750,1753,1755,1757,1760,1762,1764,1766,1768,1771],{"class":40,"line":115},[38,1713,1001],{"class":44},[38,1715,1716],{"class":213}," pie_angles",[38,1718,1719],{"class":52},"([",[38,1721,1722],{"class":135},"1",[38,1724,64],{"class":52},[38,1726,1727],{"class":135}," 2",[38,1729,64],{"class":52},[38,1731,1538],{"class":135},[38,1733,1734],{"class":52},"])",[38,1736,1014],{"class":128},[38,1738,1739],{"class":52}," [(",[38,1741,1425],{"class":135},[38,1743,64],{"class":52},[38,1745,1746],{"class":135}," 60",[38,1748,1749],{"class":52},"),",[38,1751,1752],{"class":52}," (",[38,1754,564],{"class":135},[38,1756,64],{"class":52},[38,1758,1759],{"class":135}," 180",[38,1761,1749],{"class":52},[38,1763,1752],{"class":52},[38,1765,1256],{"class":135},[38,1767,64],{"class":52},[38,1769,1770],{"class":135}," 360",[38,1772,1773],{"class":52},")]\n",[38,1775,1776,1778,1780,1782,1784,1786,1788,1790,1792,1795,1798,1800,1803,1805,1807,1809,1811,1813,1815,1817,1819,1822,1824,1827,1829,1831,1834,1836,1839],{"class":40,"line":122},[38,1777,1001],{"class":44},[38,1779,1716],{"class":213},[38,1781,1719],{"class":52},[38,1783,1722],{"class":135},[38,1785,64],{"class":52},[38,1787,1727],{"class":135},[38,1789,64],{"class":52},[38,1791,1538],{"class":135},[38,1793,1794],{"class":52},"],",[38,1796,1797],{"class":230}," start_angle",[38,1799,129],{"class":128},[38,1801,1802],{"class":135},"90",[38,1804,959],{"class":52},[38,1806,1014],{"class":128},[38,1808,1739],{"class":52},[38,1810,1802],{"class":135},[38,1812,64],{"class":52},[38,1814,287],{"class":135},[38,1816,1749],{"class":52},[38,1818,1752],{"class":52},[38,1820,1821],{"class":135},"150",[38,1823,64],{"class":52},[38,1825,1826],{"class":135}," 270",[38,1828,1749],{"class":52},[38,1830,1752],{"class":52},[38,1832,1833],{"class":135},"270",[38,1835,64],{"class":52},[38,1837,1838],{"class":135}," 450",[38,1840,1773],{"class":52},[38,1842,1843,1845,1847,1850,1852],{"class":40,"line":167},[38,1844,1001],{"class":44},[38,1846,1716],{"class":213},[38,1848,1849],{"class":52},"([])",[38,1851,1014],{"class":128},[38,1853,1854],{"class":52}," []\n",[14,1856,1857,1858,27],{},"A list whose sum is zero raises ",[18,1859,1860],{},"ZeroDivisionError",[69,1862,1864],{"id":1863},"sampling","Sampling",[29,1866,1868],{"className":31,"code":1867,"language":33,"meta":34,"style":34},"sample_uniform(\n    input_list: list[Any],\n    n: int,\n    precedence: Literal[\"first\", \"last\"] | None = \"first\",\n) -> tuple[int, ...]\n",[18,1869,1870,1877,1893,1904,1951],{"__ignoreMap":34},[38,1871,1872,1875],{"class":40,"line":41},[38,1873,1874],{"class":213},"sample_uniform",[38,1876,408],{"class":52},[38,1878,1879,1882,1884,1886,1888,1891],{"class":40,"line":100},[38,1880,1881],{"class":213},"    input_list",[38,1883,953],{"class":52},[38,1885,1363],{"class":213},[38,1887,1366],{"class":52},[38,1889,1890],{"class":213},"Any",[38,1892,1604],{"class":52},[38,1894,1895,1898,1900,1902],{"class":40,"line":115},[38,1896,1897],{"class":213},"    n",[38,1899,953],{"class":52},[38,1901,1329],{"class":690},[38,1903,553],{"class":52},[38,1905,1906,1909,1911,1914,1916,1918,1921,1923,1925,1928,1931,1933,1936,1939,1941,1943,1945,1947,1949],{"class":40,"line":122},[38,1907,1908],{"class":213},"    precedence",[38,1910,953],{"class":52},[38,1912,1913],{"class":213}," Literal",[38,1915,1366],{"class":52},[38,1917,339],{"class":338},[38,1919,1920],{"class":342},"first",[38,1922,339],{"class":338},[38,1924,64],{"class":52},[38,1926,1927],{"class":338}," \"",[38,1929,1930],{"class":342},"last",[38,1932,339],{"class":338},[38,1934,1935],{"class":52},"]",[38,1937,1938],{"class":128}," |",[38,1940,1635],{"class":230},[38,1942,1332],{"class":128},[38,1944,1927],{"class":338},[38,1946,1920],{"class":342},[38,1948,339],{"class":338},[38,1950,553],{"class":52},[38,1952,1953,1955,1957,1960,1962,1964,1966,1970],{"class":40,"line":167},[38,1954,959],{"class":52},[38,1956,963],{"class":962},[38,1958,1959],{"class":48}," tuple",[38,1961,1366],{"class":52},[38,1963,696],{"class":690},[38,1965,64],{"class":52},[38,1967,1969],{"class":1968},"sXSbw"," ...",[38,1971,164],{"class":52},[14,1973,1974,1975,1978,1979,1982,1983,1986],{},"Returns evenly spaced indices. ",[18,1976,1977],{},"precedence=\"first\""," anchors the first index,\n",[18,1980,1981],{},"\"last\""," anchors the last index, and ",[18,1984,1985],{},"None"," chooses balanced interior indices.",[29,1988,1990],{"className":31,"code":1989,"language":33,"meta":34,"style":34},"from pydreamplet.utils import sample_uniform\n\nitems = list(range(10))\n\nassert sample_uniform(items, n=4, precedence=\"first\") == (0, 3, 6, 9)\nassert sample_uniform(items, n=3, precedence=\"last\") == (1, 5, 9)\nassert sample_uniform(list(range(12)), n=4, precedence=None) == (1, 3, 7, 10)\n",[18,1991,1992,2007,2011,2031,2035,2093,2141],{"__ignoreMap":34},[38,1993,1994,1996,1998,2000,2002,2004],{"class":40,"line":41},[38,1995,45],{"class":44},[38,1997,49],{"class":48},[38,1999,27],{"class":52},[38,2001,55],{"class":48},[38,2003,58],{"class":44},[38,2005,2006],{"class":48}," sample_uniform\n",[38,2008,2009],{"class":40,"line":100},[38,2010,119],{"emptyLinePlaceholder":118},[38,2012,2013,2016,2018,2020,2022,2025,2027,2029],{"class":40,"line":115},[38,2014,2015],{"class":48},"items ",[38,2017,129],{"class":128},[38,2019,1363],{"class":690},[38,2021,217],{"class":52},[38,2023,2024],{"class":382},"range",[38,2026,217],{"class":52},[38,2028,1124],{"class":135},[38,2030,256],{"class":52},[38,2032,2033],{"class":40,"line":122},[38,2034,119],{"emptyLinePlaceholder":118},[38,2036,2037,2039,2042,2044,2047,2049,2052,2054,2056,2058,2061,2063,2065,2067,2069,2071,2073,2075,2077,2079,2081,2083,2086,2088,2091],{"class":40,"line":167},[38,2038,1001],{"class":44},[38,2040,2041],{"class":213}," sample_uniform",[38,2043,217],{"class":52},[38,2045,2046],{"class":213},"items",[38,2048,64],{"class":52},[38,2050,2051],{"class":230}," n",[38,2053,129],{"class":128},[38,2055,236],{"class":135},[38,2057,64],{"class":52},[38,2059,2060],{"class":230}," precedence",[38,2062,129],{"class":128},[38,2064,339],{"class":338},[38,2066,1920],{"class":342},[38,2068,339],{"class":338},[38,2070,959],{"class":52},[38,2072,1014],{"class":128},[38,2074,1752],{"class":52},[38,2076,1425],{"class":135},[38,2078,64],{"class":52},[38,2080,1538],{"class":135},[38,2082,64],{"class":52},[38,2084,2085],{"class":135}," 6",[38,2087,64],{"class":52},[38,2089,2090],{"class":135}," 9",[38,2092,290],{"class":52},[38,2094,2095,2097,2099,2101,2103,2105,2107,2109,2111,2113,2115,2117,2119,2121,2123,2125,2127,2129,2131,2133,2135,2137,2139],{"class":40,"line":205},[38,2096,1001],{"class":44},[38,2098,2041],{"class":213},[38,2100,217],{"class":52},[38,2102,2046],{"class":213},[38,2104,64],{"class":52},[38,2106,2051],{"class":230},[38,2108,129],{"class":128},[38,2110,506],{"class":135},[38,2112,64],{"class":52},[38,2114,2060],{"class":230},[38,2116,129],{"class":128},[38,2118,339],{"class":338},[38,2120,1930],{"class":342},[38,2122,339],{"class":338},[38,2124,959],{"class":52},[38,2126,1014],{"class":128},[38,2128,1752],{"class":52},[38,2130,1722],{"class":135},[38,2132,64],{"class":52},[38,2134,1134],{"class":135},[38,2136,64],{"class":52},[38,2138,2090],{"class":135},[38,2140,290],{"class":52},[38,2142,2143,2145,2147,2149,2152,2154,2156,2158,2160,2163,2165,2167,2169,2171,2173,2175,2177,2179,2181,2183,2185,2187,2189,2191,2194,2196,2199],{"class":40,"line":259},[38,2144,1001],{"class":44},[38,2146,2041],{"class":213},[38,2148,217],{"class":52},[38,2150,2151],{"class":690},"list",[38,2153,217],{"class":52},[38,2155,2024],{"class":382},[38,2157,217],{"class":52},[38,2159,846],{"class":135},[38,2161,2162],{"class":52},")),",[38,2164,2051],{"class":230},[38,2166,129],{"class":128},[38,2168,236],{"class":135},[38,2170,64],{"class":52},[38,2172,2060],{"class":230},[38,2174,129],{"class":128},[38,2176,1985],{"class":1351},[38,2178,959],{"class":52},[38,2180,1014],{"class":128},[38,2182,1752],{"class":52},[38,2184,1722],{"class":135},[38,2186,64],{"class":52},[38,2188,1538],{"class":135},[38,2190,64],{"class":52},[38,2192,2193],{"class":135}," 7",[38,2195,64],{"class":52},[38,2197,2198],{"class":135}," 10",[38,2200,290],{"class":52},[14,2202,2203,2204,27],{},"Invalid precedence values raise ",[18,2205,2206],{},"ValueError",[69,2208,2210],{"id":2209},"label-layout","Label Layout",[29,2212,2214],{"className":31,"code":2213,"language":33,"meta":34,"style":34},"force_distance(values: Sequence[Real], distance: Real) -> list[Real]\n",[18,2215,2216],{"__ignoreMap":34},[38,2217,2218,2221,2223,2225,2227,2229,2231,2233,2235,2238,2240,2242,2244,2246,2248,2250,2252],{"class":40,"line":41},[38,2219,2220],{"class":213},"force_distance",[38,2222,217],{"class":52},[38,2224,1673],{"class":213},[38,2226,953],{"class":52},[38,2228,1597],{"class":213},[38,2230,1366],{"class":52},[38,2232,1369],{"class":213},[38,2234,1794],{"class":52},[38,2236,2237],{"class":213}," distance",[38,2239,953],{"class":52},[38,2241,956],{"class":213},[38,2243,959],{"class":52},[38,2245,963],{"class":962},[38,2247,1363],{"class":48},[38,2249,1366],{"class":52},[38,2251,1369],{"class":48},[38,2253,164],{"class":52},[14,2255,2256,2257,2260],{},"Adjusts unsorted numeric positions so adjacent sorted positions are at least\n",[18,2258,2259],{},"distance"," apart, then returns results in the original input order.",[29,2262,2264],{"className":31,"code":2263,"language":33,"meta":34,"style":34},"from pydreamplet.utils import force_distance\n\npositions = force_distance([2, 6, 7, 8, 10, 16, 18], distance=2)\nassert positions == [2, 5, 7, 9, 11, 16, 18]\n",[18,2265,2266,2281,2285,2337],{"__ignoreMap":34},[38,2267,2268,2270,2272,2274,2276,2278],{"class":40,"line":41},[38,2269,45],{"class":44},[38,2271,49],{"class":48},[38,2273,27],{"class":52},[38,2275,55],{"class":48},[38,2277,58],{"class":44},[38,2279,2280],{"class":48}," force_distance\n",[38,2282,2283],{"class":40,"line":100},[38,2284,119],{"emptyLinePlaceholder":118},[38,2286,2287,2290,2292,2295,2297,2300,2302,2304,2306,2308,2310,2313,2315,2317,2319,2322,2324,2327,2329,2331,2333,2335],{"class":40,"line":115},[38,2288,2289],{"class":48},"positions ",[38,2291,129],{"class":128},[38,2293,2294],{"class":213}," force_distance",[38,2296,1719],{"class":52},[38,2298,2299],{"class":135},"2",[38,2301,64],{"class":52},[38,2303,2085],{"class":135},[38,2305,64],{"class":52},[38,2307,2193],{"class":135},[38,2309,64],{"class":52},[38,2311,2312],{"class":135}," 8",[38,2314,64],{"class":52},[38,2316,2198],{"class":135},[38,2318,64],{"class":52},[38,2320,2321],{"class":135}," 16",[38,2323,64],{"class":52},[38,2325,2326],{"class":135}," 18",[38,2328,1794],{"class":52},[38,2330,2237],{"class":230},[38,2332,129],{"class":128},[38,2334,2299],{"class":135},[38,2336,290],{"class":52},[38,2338,2339,2341,2344,2347,2349,2351,2353,2355,2357,2359,2361,2363,2365,2368,2370,2372,2374,2376],{"class":40,"line":122},[38,2340,1001],{"class":44},[38,2342,2343],{"class":48}," positions ",[38,2345,2346],{"class":128},"==",[38,2348,132],{"class":52},[38,2350,2299],{"class":135},[38,2352,64],{"class":52},[38,2354,1134],{"class":135},[38,2356,64],{"class":52},[38,2358,2193],{"class":135},[38,2360,64],{"class":52},[38,2362,2090],{"class":135},[38,2364,64],{"class":52},[38,2366,2367],{"class":135}," 11",[38,2369,64],{"class":52},[38,2371,2321],{"class":135},[38,2373,64],{"class":52},[38,2375,2326],{"class":135},[38,2377,164],{"class":52},[29,2379,2381],{"className":31,"code":2380,"language":33,"meta":34,"style":34},"resolve_collisions_1d(\n    anchors: Sequence[Real],\n    sizes: Sequence[Real],\n    *,\n    gap: Real = 0,\n    bounds: tuple[Real, Real] | None = None,\n) -> list[float]\n",[18,2382,2383,2390,2405,2420,2427,2442,2471],{"__ignoreMap":34},[38,2384,2385,2388],{"class":40,"line":41},[38,2386,2387],{"class":213},"resolve_collisions_1d",[38,2389,408],{"class":52},[38,2391,2392,2395,2397,2399,2401,2403],{"class":40,"line":100},[38,2393,2394],{"class":213},"    anchors",[38,2396,953],{"class":52},[38,2398,1597],{"class":213},[38,2400,1366],{"class":52},[38,2402,1369],{"class":213},[38,2404,1604],{"class":52},[38,2406,2407,2410,2412,2414,2416,2418],{"class":40,"line":115},[38,2408,2409],{"class":213},"    sizes",[38,2411,953],{"class":52},[38,2413,1597],{"class":213},[38,2415,1366],{"class":52},[38,2417,1369],{"class":213},[38,2419,1604],{"class":52},[38,2421,2422,2425],{"class":40,"line":122},[38,2423,2424],{"class":128},"    *",[38,2426,553],{"class":52},[38,2428,2429,2432,2434,2436,2438,2440],{"class":40,"line":167},[38,2430,2431],{"class":213},"    gap",[38,2433,953],{"class":52},[38,2435,956],{"class":230},[38,2437,1332],{"class":128},[38,2439,1129],{"class":135},[38,2441,553],{"class":52},[38,2443,2444,2447,2449,2451,2453,2455,2457,2459,2461,2463,2465,2467,2469],{"class":40,"line":205},[38,2445,2446],{"class":213},"    bounds",[38,2448,953],{"class":52},[38,2450,1959],{"class":213},[38,2452,1366],{"class":52},[38,2454,1369],{"class":213},[38,2456,64],{"class":52},[38,2458,956],{"class":213},[38,2460,1935],{"class":52},[38,2462,1938],{"class":128},[38,2464,1635],{"class":230},[38,2466,1332],{"class":128},[38,2468,1635],{"class":1351},[38,2470,553],{"class":52},[38,2472,2473,2475,2477,2479,2481,2483],{"class":40,"line":259},[38,2474,959],{"class":52},[38,2476,963],{"class":962},[38,2478,1363],{"class":48},[38,2480,1366],{"class":52},[38,2482,1659],{"class":690},[38,2484,164],{"class":52},[14,2486,2487,2488,2490,2491,2494,2495,2498],{},"Resolves centered 1D items so their extents do not overlap. ",[18,2489,220],{}," and\n",[18,2492,2493],{},"sizes"," must have the same length. ",[18,2496,2497],{},"gap"," and every size must be non-negative.",[29,2500,2502],{"className":31,"code":2501,"language":33,"meta":34,"style":34},"from pydreamplet.utils import resolve_collisions_1d\n\nassert resolve_collisions_1d([0, 1, 10], [4, 4, 4], gap=1) == [0, 5, 10]\nassert resolve_collisions_1d([5, 0, 1], [4, 4, 4], gap=1) == [10, 0, 5]\n",[18,2503,2504,2519,2523,2583],{"__ignoreMap":34},[38,2505,2506,2508,2510,2512,2514,2516],{"class":40,"line":41},[38,2507,45],{"class":44},[38,2509,49],{"class":48},[38,2511,27],{"class":52},[38,2513,55],{"class":48},[38,2515,58],{"class":44},[38,2517,2518],{"class":48}," resolve_collisions_1d\n",[38,2520,2521],{"class":40,"line":100},[38,2522,119],{"emptyLinePlaceholder":118},[38,2524,2525,2527,2530,2532,2534,2536,2538,2540,2542,2544,2546,2548,2550,2553,2555,2557,2559,2561,2563,2565,2567,2569,2571,2573,2575,2577,2579,2581],{"class":40,"line":115},[38,2526,1001],{"class":44},[38,2528,2529],{"class":213}," resolve_collisions_1d",[38,2531,1719],{"class":52},[38,2533,1425],{"class":135},[38,2535,64],{"class":52},[38,2537,1479],{"class":135},[38,2539,64],{"class":52},[38,2541,2198],{"class":135},[38,2543,1794],{"class":52},[38,2545,132],{"class":52},[38,2547,236],{"class":135},[38,2549,64],{"class":52},[38,2551,2552],{"class":135}," 4",[38,2554,64],{"class":52},[38,2556,2552],{"class":135},[38,2558,1794],{"class":52},[38,2560,231],{"class":230},[38,2562,129],{"class":128},[38,2564,1722],{"class":135},[38,2566,959],{"class":52},[38,2568,1014],{"class":128},[38,2570,132],{"class":52},[38,2572,1425],{"class":135},[38,2574,64],{"class":52},[38,2576,1134],{"class":135},[38,2578,64],{"class":52},[38,2580,2198],{"class":135},[38,2582,164],{"class":52},[38,2584,2585,2587,2589,2591,2594,2596,2598,2600,2602,2604,2606,2608,2610,2612,2614,2616,2618,2620,2622,2624,2626,2628,2630,2632,2634,2636,2638,2640],{"class":40,"line":122},[38,2586,1001],{"class":44},[38,2588,2529],{"class":213},[38,2590,1719],{"class":52},[38,2592,2593],{"class":135},"5",[38,2595,64],{"class":52},[38,2597,1129],{"class":135},[38,2599,64],{"class":52},[38,2601,1479],{"class":135},[38,2603,1794],{"class":52},[38,2605,132],{"class":52},[38,2607,236],{"class":135},[38,2609,64],{"class":52},[38,2611,2552],{"class":135},[38,2613,64],{"class":52},[38,2615,2552],{"class":135},[38,2617,1794],{"class":52},[38,2619,231],{"class":230},[38,2621,129],{"class":128},[38,2623,1722],{"class":135},[38,2625,959],{"class":52},[38,2627,1014],{"class":128},[38,2629,132],{"class":52},[38,2631,1124],{"class":135},[38,2633,64],{"class":52},[38,2635,1129],{"class":135},[38,2637,64],{"class":52},[38,2639,1134],{"class":135},[38,2641,164],{"class":52},[29,2643,2645],{"className":31,"code":2644,"language":33,"meta":34,"style":34},"place_labels_1d(\n    anchors: Sequence[Real],\n    sizes: Sequence[Real],\n    *,\n    gap: Real = 0,\n    bounds: tuple[Real, Real] | None = None,\n) -> list[LabelPlacement]\n",[18,2646,2647,2654,2668,2682,2688,2702,2730],{"__ignoreMap":34},[38,2648,2649,2652],{"class":40,"line":41},[38,2650,2651],{"class":213},"place_labels_1d",[38,2653,408],{"class":52},[38,2655,2656,2658,2660,2662,2664,2666],{"class":40,"line":100},[38,2657,2394],{"class":213},[38,2659,953],{"class":52},[38,2661,1597],{"class":213},[38,2663,1366],{"class":52},[38,2665,1369],{"class":213},[38,2667,1604],{"class":52},[38,2669,2670,2672,2674,2676,2678,2680],{"class":40,"line":115},[38,2671,2409],{"class":213},[38,2673,953],{"class":52},[38,2675,1597],{"class":213},[38,2677,1366],{"class":52},[38,2679,1369],{"class":213},[38,2681,1604],{"class":52},[38,2683,2684,2686],{"class":40,"line":122},[38,2685,2424],{"class":128},[38,2687,553],{"class":52},[38,2689,2690,2692,2694,2696,2698,2700],{"class":40,"line":167},[38,2691,2431],{"class":213},[38,2693,953],{"class":52},[38,2695,956],{"class":230},[38,2697,1332],{"class":128},[38,2699,1129],{"class":135},[38,2701,553],{"class":52},[38,2703,2704,2706,2708,2710,2712,2714,2716,2718,2720,2722,2724,2726,2728],{"class":40,"line":205},[38,2705,2446],{"class":213},[38,2707,953],{"class":52},[38,2709,1959],{"class":213},[38,2711,1366],{"class":52},[38,2713,1369],{"class":213},[38,2715,64],{"class":52},[38,2717,956],{"class":213},[38,2719,1935],{"class":52},[38,2721,1938],{"class":128},[38,2723,1635],{"class":230},[38,2725,1332],{"class":128},[38,2727,1635],{"class":1351},[38,2729,553],{"class":52},[38,2731,2732,2734,2736,2738,2740,2743],{"class":40,"line":259},[38,2733,959],{"class":52},[38,2735,963],{"class":962},[38,2737,1363],{"class":48},[38,2739,1366],{"class":52},[38,2741,2742],{"class":48},"LabelPlacement",[38,2744,164],{"class":52},[14,2746,2747,2748,2751,2752,2754],{},"Wraps ",[18,2749,2750],{},"resolve_collisions_1d()"," and returns ",[18,2753,2742],{}," records.",[29,2756,2758],{"className":31,"code":2757,"language":33,"meta":34,"style":34},"from pydreamplet.utils import place_labels_1d\n\nplacements = place_labels_1d([0, 1], [4, 4], gap=1)\n\nassert [placement.position for placement in placements] == [0, 5]\nassert placements[0].start == -2\nassert placements[0].end == 2\n",[18,2759,2760,2774,2778,2814,2818,2853,2876],{"__ignoreMap":34},[38,2761,2762,2764,2766,2768,2770,2772],{"class":40,"line":41},[38,2763,45],{"class":44},[38,2765,49],{"class":48},[38,2767,27],{"class":52},[38,2769,55],{"class":48},[38,2771,58],{"class":44},[38,2773,67],{"class":48},[38,2775,2776],{"class":40,"line":100},[38,2777,119],{"emptyLinePlaceholder":118},[38,2779,2780,2782,2784,2786,2788,2790,2792,2794,2796,2798,2800,2802,2804,2806,2808,2810,2812],{"class":40,"line":115},[38,2781,208],{"class":48},[38,2783,129],{"class":128},[38,2785,214],{"class":213},[38,2787,1719],{"class":52},[38,2789,1425],{"class":135},[38,2791,64],{"class":52},[38,2793,1479],{"class":135},[38,2795,1794],{"class":52},[38,2797,132],{"class":52},[38,2799,236],{"class":135},[38,2801,64],{"class":52},[38,2803,2552],{"class":135},[38,2805,1794],{"class":52},[38,2807,231],{"class":230},[38,2809,129],{"class":128},[38,2811,1722],{"class":135},[38,2813,290],{"class":52},[38,2815,2816],{"class":40,"line":122},[38,2817,119],{"emptyLinePlaceholder":118},[38,2819,2820,2822,2824,2826,2828,2830,2833,2835,2837,2839,2841,2843,2845,2847,2849,2851],{"class":40,"line":167},[38,2821,1001],{"class":44},[38,2823,132],{"class":52},[38,2825,545],{"class":48},[38,2827,27],{"class":52},[38,2829,438],{"class":437},[38,2831,2832],{"class":44}," for",[38,2834,376],{"class":48},[38,2836,379],{"class":44},[38,2838,392],{"class":48},[38,2840,1935],{"class":52},[38,2842,1014],{"class":128},[38,2844,132],{"class":52},[38,2846,1425],{"class":135},[38,2848,64],{"class":52},[38,2850,1134],{"class":135},[38,2852,164],{"class":52},[38,2854,2855,2857,2859,2861,2863,2866,2868,2870,2873],{"class":40,"line":205},[38,2856,1001],{"class":44},[38,2858,392],{"class":48},[38,2860,1366],{"class":52},[38,2862,1425],{"class":135},[38,2864,2865],{"class":52},"].",[38,2867,550],{"class":437},[38,2869,1014],{"class":128},[38,2871,2872],{"class":128}," -",[38,2874,2875],{"class":135},"2\n",[38,2877,2878,2880,2882,2884,2886,2888,2891,2893],{"class":40,"line":259},[38,2879,1001],{"class":44},[38,2881,392],{"class":48},[38,2883,1366],{"class":52},[38,2885,1425],{"class":135},[38,2887,2865],{"class":52},[38,2889,2890],{"class":437},"end",[38,2892,1014],{"class":128},[38,2894,2895],{"class":135}," 2\n",[14,2897,2898,2900,2901,2903,2904,2906,2907,2909,2910,2912,2913,2915],{},[18,2899,2742],{}," is a frozen dataclass with ",[18,2902,423],{},", ",[18,2905,438],{},", and ",[18,2908,581],{},"\nfields plus computed ",[18,2911,550],{}," and ",[18,2914,2890],{}," properties.",[69,2917,2919],{"id":2918},"bounding-boxes","Bounding Boxes",[29,2921,2923],{"className":31,"code":2922,"language":33,"meta":34,"style":34},"bboxes_overlap(a: BoundingBox, b: BoundingBox, padding: Real = 0) -> bool\n",[18,2924,2925],{"__ignoreMap":34},[38,2926,2927,2930,2932,2935,2937,2940,2942,2945,2947,2949,2951,2954,2956,2958,2960,2962,2964,2966],{"class":40,"line":41},[38,2928,2929],{"class":213},"bboxes_overlap",[38,2931,217],{"class":52},[38,2933,2934],{"class":213},"a",[38,2936,953],{"class":52},[38,2938,2939],{"class":213}," BoundingBox",[38,2941,64],{"class":52},[38,2943,2944],{"class":213}," b",[38,2946,953],{"class":52},[38,2948,2939],{"class":213},[38,2950,64],{"class":52},[38,2952,2953],{"class":213}," padding",[38,2955,953],{"class":52},[38,2957,956],{"class":230},[38,2959,1332],{"class":128},[38,2961,1129],{"class":135},[38,2963,959],{"class":52},[38,2965,963],{"class":962},[38,2967,2968],{"class":690}," bool\n",[14,2970,2971,2972,2974,2975,2978,2979,2982],{},"Returns ",[18,2973,1389],{}," when two ",[18,2976,2977],{},"BoundingBox"," objects overlap. Touching edges are not\nconsidered overlapping. Positive ",[18,2980,2981],{},"padding"," expands both boxes before testing.",[29,2984,2986],{"className":31,"code":2985,"language":33,"meta":34,"style":34},"from pydreamplet import BoundingBox\nfrom pydreamplet.utils import bboxes_overlap\n\nleft = BoundingBox(0, 0, 10, 10)\nright = BoundingBox(10, 0, 5, 5)\n\nassert bboxes_overlap(left, right) is False\nassert bboxes_overlap(left, right, padding=0.1) is True\n",[18,2987,2988,2999,3014,3018,3045,3072,3076,3101],{"__ignoreMap":34},[38,2989,2990,2992,2994,2996],{"class":40,"line":41},[38,2991,45],{"class":44},[38,2993,91],{"class":48},[38,2995,58],{"class":44},[38,2997,2998],{"class":48}," BoundingBox\n",[38,3000,3001,3003,3005,3007,3009,3011],{"class":40,"line":100},[38,3002,45],{"class":44},[38,3004,49],{"class":48},[38,3006,27],{"class":52},[38,3008,55],{"class":48},[38,3010,58],{"class":44},[38,3012,3013],{"class":48}," bboxes_overlap\n",[38,3015,3016],{"class":40,"line":115},[38,3017,119],{"emptyLinePlaceholder":118},[38,3019,3020,3023,3025,3027,3029,3031,3033,3035,3037,3039,3041,3043],{"class":40,"line":122},[38,3021,3022],{"class":48},"left ",[38,3024,129],{"class":128},[38,3026,2939],{"class":213},[38,3028,217],{"class":52},[38,3030,1425],{"class":135},[38,3032,64],{"class":52},[38,3034,1129],{"class":135},[38,3036,64],{"class":52},[38,3038,2198],{"class":135},[38,3040,64],{"class":52},[38,3042,2198],{"class":135},[38,3044,290],{"class":52},[38,3046,3047,3050,3052,3054,3056,3058,3060,3062,3064,3066,3068,3070],{"class":40,"line":167},[38,3048,3049],{"class":48},"right ",[38,3051,129],{"class":128},[38,3053,2939],{"class":213},[38,3055,217],{"class":52},[38,3057,1124],{"class":135},[38,3059,64],{"class":52},[38,3061,1129],{"class":135},[38,3063,64],{"class":52},[38,3065,1134],{"class":135},[38,3067,64],{"class":52},[38,3069,1134],{"class":135},[38,3071,290],{"class":52},[38,3073,3074],{"class":40,"line":205},[38,3075,119],{"emptyLinePlaceholder":118},[38,3077,3078,3080,3083,3085,3088,3090,3093,3095,3098],{"class":40,"line":259},[38,3079,1001],{"class":44},[38,3081,3082],{"class":213}," bboxes_overlap",[38,3084,217],{"class":52},[38,3086,3087],{"class":213},"left",[38,3089,64],{"class":52},[38,3091,3092],{"class":213}," right",[38,3094,959],{"class":52},[38,3096,3097],{"class":128}," is",[38,3099,3100],{"class":1351}," False\n",[38,3102,3103,3105,3107,3109,3111,3113,3115,3117,3119,3121,3124,3126,3128],{"class":40,"line":264},[38,3104,1001],{"class":44},[38,3106,3082],{"class":213},[38,3108,217],{"class":52},[38,3110,3087],{"class":213},[38,3112,64],{"class":52},[38,3114,3092],{"class":213},[38,3116,64],{"class":52},[38,3118,2953],{"class":230},[38,3120,129],{"class":128},[38,3122,3123],{"class":135},"0.1",[38,3125,959],{"class":52},[38,3127,3097],{"class":128},[38,3129,3130],{"class":1351}," True\n",[14,3132,3133,3134,27],{},"Negative padding raises ",[18,3135,2206],{},[3137,3138,3139],"style",{},"html pre.shiki code .sED7I, html code.shiki .sED7I{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#A0111F;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .soTeR, html code.shiki .soTeR{--shiki-light:#90A4AE;--shiki-default:#0E1116;--shiki-dark:#E1E4E8}html pre.shiki code .sVsmf, html code.shiki .sVsmf{--shiki-light:#39ADB5;--shiki-default:#0E1116;--shiki-dark:#E1E4E8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sWKEy, html code.shiki .sWKEy{--shiki-light:#39ADB5;--shiki-default:#A0111F;--shiki-dark:#F97583}html pre.shiki code .sNpir, html code.shiki .sNpir{--shiki-light:#F76D47;--shiki-default:#023B95;--shiki-dark:#79B8FF}html pre.shiki code .sAK04, html code.shiki .sAK04{--shiki-light:#6182B8;--shiki-default:#0E1116;--shiki-dark:#E1E4E8}html pre.shiki code .sYEV4, html code.shiki .sYEV4{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#702C00;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}html pre.shiki code .sqo_7, html code.shiki .sqo_7{--shiki-light:#39ADB5;--shiki-default:#032563;--shiki-dark:#9ECBFF}html pre.shiki code .s_jvP, html code.shiki .s_jvP{--shiki-light:#91B859;--shiki-default:#032563;--shiki-dark:#9ECBFF}html pre.shiki code .sBTIf, html code.shiki .sBTIf{--shiki-light:#6182B8;--shiki-default:#023B95;--shiki-dark:#79B8FF}html pre.shiki code .sm80-, html code.shiki .sm80-{--shiki-light:#E53935;--shiki-default:#0E1116;--shiki-dark:#E1E4E8}html pre.shiki code .s-tzF, html code.shiki .s-tzF{--shiki-light:#E2931D;--shiki-default:#023B95;--shiki-dark:#79B8FF}html pre.shiki code .str-j, html code.shiki .str-j{--shiki-light:#90A4AE;--shiki-light-font-style:inherit;--shiki-default:#6E011A;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}html pre.shiki code .sTy78, html code.shiki .sTy78{--shiki-light:#39ADB5;--shiki-default:#023B95;--shiki-dark:#79B8FF}html pre.shiki code .sXSbw, html code.shiki .sXSbw{--shiki-light:#90A4AE;--shiki-default:#023B95;--shiki-dark:#79B8FF}",{"title":34,"searchDepth":115,"depth":115,"links":3141},[3142,3143,3144,3145,3146,3147,3148],{"id":71,"depth":100,"text":72},{"id":934,"depth":100,"text":935},{"id":1284,"depth":100,"text":1285},{"id":1574,"depth":100,"text":1575},{"id":1863,"depth":100,"text":1864},{"id":2209,"depth":100,"text":2210},{"id":2918,"depth":100,"text":2919},"Numeric, angle, tick, pie, sampling, and collision helper utilities.","md",{"category":3152},"reference",{"title":5},"\u002Freference\u002Futilities",{"title":5,"description":3149},"reference\u002Futilities","61ZZ_ucjj-U8sOE4qQIAk9ceZ8gSEhrwgmeZIwz5r_k",1780692544481]