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