[{"data":1,"prerenderedAt":10172},["ShallowReactive",2],{"\u002Fdevelopers\u002Fuser-guide\u002Fdata-transformation\u002Findexes-app":3,"navigation-developers":4393,"\u002Fdevelopers\u002Fuser-guide\u002Fdata-transformation\u002Findexes":6335,"surr-\u002Fdevelopers\u002Fuser-guide\u002Fdata-transformation\u002Findexes":10169},{"id":4,"title":5,"author":6,"body":7,"description":4374,"extension":4375,"meta":4376,"navigation":113,"path":4388,"seo":4389,"sitemap":4390,"stem":4391,"__hash__":4392},"content\u002F2.developers\u002F4.user-guide\u002F30.data-transformation\u002F60.indexes.md","Indexes in Pathway Live Data Framework",null,{"type":8,"value":9,"toc":4366},"minimark",[10,14,18,21,28,31,36,47,58,73,80,406,414,435,819,825,855,859,874,880,1215,1221,1236,1256,1265,1274,1283,1337,1341,1356,1371,1388,1820,1826,1834,1974,1980,1997,2003,2011,2018,2024,2027,2128,2255,2271,2362,2365,2458,2464,2578,2590,2605,2608,2646,2649,2665,2668,3395,3398,3423,3426,3450,3453,3471,3474,3494,4346,4355,4359,4362],[11,12,5],"h1",{"id":13},"indexes-in-pathway-live-data-framework",[15,16,17],"p",{},"In this article, you'll learn about reactive indexes in Pathway Live Data Framework and how they differ from conventional indexes used in databases. You'll also see how to use them to respond to a stream of queries in real time.",[15,19,20],{},"Indexes are data structures that improve the speed of queries. They are often used in databases. They are helpful if you want to retrieve records with a specific value in a given column (then you need an index based on this column). An example of this is answering a stream of queries using the contents of a database.",[15,22,23],{},[24,25],"img",{"alt":26,"src":27},"LSM index context drawing","assets\u002Fcontent\u002Ftutorials\u002Findexes\u002Findex.svg",[15,29,30],{},"Indexes can also speed up joins - an existing index can be used if it is built on appropriate columns but also an index can be built ad-hoc, during query execution.\nPathway Live Data Framework offers indexes, but because it operates on streams, there are some differences as compared to database indexes. To learn about them, continue reading the article.",[32,33,35],"h2",{"id":34},"joins","Joins",[15,37,38,39,46],{},"Pathway Live Data Framework operates on streams. Unless it is informed otherwise, it assumes that new data can arrive from any stream. Thus, when joining two streams, Pathway Live Data Framework has to keep these streams in memory. It builds ",[40,41,45],"a",{"href":42,"rel":43},"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FLog-structured_merge-tree",[44],"nofollow","LSM trees"," on both sides of a join. Thanks to that, new records arriving in any of the two streams can be joined quickly - it is enough to look them up in the index of the other table and no costly scans are needed.\nIn contrast, normal databases only use an index on one side of a join because once the query is processed the join results are not updated.",[15,48,49,50,54,55,57],{},"Let's consider a simple example in which you join two tables in Pathway Live Data Framework. Here, a table is built from a simulated stream of changes to its rows. The value in the ",[51,52,53],"code",{},"__time__"," column represents the arrival time of the record to the engine. Rows with the same value in the ",[51,56,53],{}," column belong to a single batch.",[15,59,60,61,67,68,72],{},"To use an example with a real streaming source it is enough to replace ",[40,62,64],{"href":63},"\u002Fdevelopers\u002Fapi-docs\u002Fdebug#pathway.debug.table_from_markdown",[51,65,66],{},"pw.debug.table_from_markdown"," with an appropriate ",[40,69,71],{"href":70},"\u002Fdevelopers\u002Fuser-guide\u002Fconnect\u002Fsupported-data-sources","connector"," (like Redpanda or Kafka connector).",[15,74,75,76,79],{},"The tables are joined on the ",[51,77,78],{},"instance"," column.",[81,82,87],"pre",{"className":83,"code":84,"language":85,"meta":86,"style":86},"language-python shiki shiki-themes material-theme-palenight","import pathway as pw\n\n\ntable_a = pw.debug.table_from_markdown(\n    \"\"\"\n    value | instance | __time__\n      1   |    1     |     2\n      2   |    1     |     6\n      3   |    2     |     8\n      4   |    2     |    12\n    \"\"\"\n)\ntable_b = pw.debug.table_from_markdown(\n    \"\"\"\n    value | instance | __time__\n      11  |    1     |     4\n      12  |    2     |     6\n      13  |    1     |     8\n    \"\"\"\n)\n\nresult = table_a.join(table_b, pw.left.instance == pw.right.instance).select(\n    left_value=pw.left.value, right_value=pw.right.value, instance=pw.this.instance\n)\n\npw.debug.compute_and_print(result)\n","python","",[51,88,89,108,115,120,149,155,162,168,174,180,186,191,197,217,222,227,233,239,245,250,255,260,318,375,380,385],{"__ignoreMap":86},[90,91,94,98,102,105],"span",{"class":92,"line":93},"line",1,[90,95,97],{"class":96},"s6cf3","import",[90,99,101],{"class":100},"s0W1g"," pathway ",[90,103,104],{"class":96},"as",[90,106,107],{"class":100}," pw\n",[90,109,111],{"class":92,"line":110},2,[90,112,114],{"emptyLinePlaceholder":113},true,"\n",[90,116,118],{"class":92,"line":117},3,[90,119,114],{"emptyLinePlaceholder":113},[90,121,123,126,130,133,136,140,142,146],{"class":92,"line":122},4,[90,124,125],{"class":100},"table_a ",[90,127,129],{"class":128},"sAklC","=",[90,131,132],{"class":100}," pw",[90,134,135],{"class":128},".",[90,137,139],{"class":138},"s-wAU","debug",[90,141,135],{"class":128},[90,143,145],{"class":144},"sdLwU","table_from_markdown",[90,147,148],{"class":128},"(\n",[90,150,152],{"class":92,"line":151},5,[90,153,154],{"class":128},"    \"\"\"\n",[90,156,158],{"class":92,"line":157},6,[90,159,161],{"class":160},"sfyAc","    value | instance | __time__\n",[90,163,165],{"class":92,"line":164},7,[90,166,167],{"class":160},"      1   |    1     |     2\n",[90,169,171],{"class":92,"line":170},8,[90,172,173],{"class":160},"      2   |    1     |     6\n",[90,175,177],{"class":92,"line":176},9,[90,178,179],{"class":160},"      3   |    2     |     8\n",[90,181,183],{"class":92,"line":182},10,[90,184,185],{"class":160},"      4   |    2     |    12\n",[90,187,189],{"class":92,"line":188},11,[90,190,154],{"class":128},[90,192,194],{"class":92,"line":193},12,[90,195,196],{"class":128},")\n",[90,198,200,203,205,207,209,211,213,215],{"class":92,"line":199},13,[90,201,202],{"class":100},"table_b ",[90,204,129],{"class":128},[90,206,132],{"class":100},[90,208,135],{"class":128},[90,210,139],{"class":138},[90,212,135],{"class":128},[90,214,145],{"class":144},[90,216,148],{"class":128},[90,218,220],{"class":92,"line":219},14,[90,221,154],{"class":128},[90,223,225],{"class":92,"line":224},15,[90,226,161],{"class":160},[90,228,230],{"class":92,"line":229},16,[90,231,232],{"class":160},"      11  |    1     |     4\n",[90,234,236],{"class":92,"line":235},17,[90,237,238],{"class":160},"      12  |    2     |     6\n",[90,240,242],{"class":92,"line":241},18,[90,243,244],{"class":160},"      13  |    1     |     8\n",[90,246,248],{"class":92,"line":247},19,[90,249,154],{"class":128},[90,251,253],{"class":92,"line":252},20,[90,254,196],{"class":128},[90,256,258],{"class":92,"line":257},21,[90,259,114],{"emptyLinePlaceholder":113},[90,261,263,266,268,271,273,276,279,282,285,287,289,292,294,296,299,301,303,306,308,310,313,316],{"class":92,"line":262},22,[90,264,265],{"class":100},"result ",[90,267,129],{"class":128},[90,269,270],{"class":100}," table_a",[90,272,135],{"class":128},[90,274,275],{"class":144},"join",[90,277,278],{"class":128},"(",[90,280,281],{"class":144},"table_b",[90,283,284],{"class":128},",",[90,286,132],{"class":144},[90,288,135],{"class":128},[90,290,291],{"class":138},"left",[90,293,135],{"class":128},[90,295,78],{"class":138},[90,297,298],{"class":128}," ==",[90,300,132],{"class":144},[90,302,135],{"class":128},[90,304,305],{"class":138},"right",[90,307,135],{"class":128},[90,309,78],{"class":138},[90,311,312],{"class":128},").",[90,314,315],{"class":144},"select",[90,317,148],{"class":128},[90,319,321,325,327,330,332,334,336,339,341,344,346,348,350,352,354,356,358,361,363,365,367,370,372],{"class":92,"line":320},23,[90,322,324],{"class":323},"s7ZW3","    left_value",[90,326,129],{"class":128},[90,328,329],{"class":144},"pw",[90,331,135],{"class":128},[90,333,291],{"class":138},[90,335,135],{"class":128},[90,337,338],{"class":138},"value",[90,340,284],{"class":128},[90,342,343],{"class":323}," right_value",[90,345,129],{"class":128},[90,347,329],{"class":144},[90,349,135],{"class":128},[90,351,305],{"class":138},[90,353,135],{"class":128},[90,355,338],{"class":138},[90,357,284],{"class":128},[90,359,360],{"class":323}," instance",[90,362,129],{"class":128},[90,364,329],{"class":144},[90,366,135],{"class":128},[90,368,369],{"class":138},"this",[90,371,135],{"class":128},[90,373,374],{"class":138},"instance\n",[90,376,378],{"class":92,"line":377},24,[90,379,196],{"class":128},[90,381,383],{"class":92,"line":382},25,[90,384,114],{"emptyLinePlaceholder":113},[90,386,388,390,392,394,396,399,401,404],{"class":92,"line":387},26,[90,389,329],{"class":100},[90,391,135],{"class":128},[90,393,139],{"class":138},[90,395,135],{"class":128},[90,397,398],{"class":144},"compute_and_print",[90,400,278],{"class":128},[90,402,403],{"class":144},"result",[90,405,196],{"class":128},[81,407,412],{"className":408,"code":410,"language":411},[409],"language-text","            | left_value | right_value | instance\n^YYYD8ZW... | 1          | 11          | 1\n^YYYFZNM... | 1          | 13          | 1\n^YYY47FZ... | 2          | 11          | 1\n^YYY822X... | 2          | 13          | 1\n^Z3QTSKY... | 3          | 12          | 2\n^Z3QXF7F... | 4          | 12          | 2\n","text",[51,413,410],{"__ignoreMap":86},[15,415,416,417,420,421,424,425,427,428,431,432,434],{},"As you can see, the records from both sides get joined with the future records. It is expected, as Pathway Live Data Framework incrementally updates all results to match the input data changes. However, if ",[51,418,419],{},"table_a"," would be ",[51,422,423],{},"queries"," on a ",[51,426,281],{}," representing the ",[51,429,430],{},"data"," you want to query, you'd be surprised to see that answers to your queries are updated in the future when ",[51,433,430],{}," changes. Let's say, you want to query the number of your website visits by location:",[81,436,438],{"className":83,"code":437,"language":85,"meta":86,"style":86},"import pathway as pw\n\nqueries = pw.debug.table_from_markdown(\n    \"\"\"\n    query_id |  country  | __time__\n        1    |   France  |     4\n        2    |   Poland  |     6\n        3    |  Germany  |     8\n        4    |      USA  |    14\n    \"\"\"\n)\nvisits = pw.debug.table_from_markdown(\n    \"\"\"\n     country | __time__\n      Poland |    2\n      France |    2\n      Spain  |    2\n      Poland |    2\n      France |    4\n         USA |    4\n         USA |    4\n     Germany |    6\n         USA |    6\n         USA |    8\n      Poland |    8\n      France |    8\n      France |   12\n     Germany |   14\n    \"\"\"\n)\ntotal_visits_by_country = visits.groupby(pw.this.country).reduce(\n    pw.this.country, visits=pw.reducers.count()\n)\n\nanswers = queries.join(\n    total_visits_by_country, pw.left.country == pw.right.country\n).select(pw.left.query_id, pw.this.country, pw.right.visits)\n\npw.debug.compute_and_print(answers)\n",[51,439,440,450,454,473,477,482,487,492,497,502,506,510,529,533,538,543,548,553,557,562,567,571,576,581,586,591,596,602,608,613,618,654,689,694,699,716,747,794,799],{"__ignoreMap":86},[90,441,442,444,446,448],{"class":92,"line":93},[90,443,97],{"class":96},[90,445,101],{"class":100},[90,447,104],{"class":96},[90,449,107],{"class":100},[90,451,452],{"class":92,"line":110},[90,453,114],{"emptyLinePlaceholder":113},[90,455,456,459,461,463,465,467,469,471],{"class":92,"line":117},[90,457,458],{"class":100},"queries ",[90,460,129],{"class":128},[90,462,132],{"class":100},[90,464,135],{"class":128},[90,466,139],{"class":138},[90,468,135],{"class":128},[90,470,145],{"class":144},[90,472,148],{"class":128},[90,474,475],{"class":92,"line":122},[90,476,154],{"class":128},[90,478,479],{"class":92,"line":151},[90,480,481],{"class":160},"    query_id |  country  | __time__\n",[90,483,484],{"class":92,"line":157},[90,485,486],{"class":160},"        1    |   France  |     4\n",[90,488,489],{"class":92,"line":164},[90,490,491],{"class":160},"        2    |   Poland  |     6\n",[90,493,494],{"class":92,"line":170},[90,495,496],{"class":160},"        3    |  Germany  |     8\n",[90,498,499],{"class":92,"line":176},[90,500,501],{"class":160},"        4    |      USA  |    14\n",[90,503,504],{"class":92,"line":182},[90,505,154],{"class":128},[90,507,508],{"class":92,"line":188},[90,509,196],{"class":128},[90,511,512,515,517,519,521,523,525,527],{"class":92,"line":193},[90,513,514],{"class":100},"visits ",[90,516,129],{"class":128},[90,518,132],{"class":100},[90,520,135],{"class":128},[90,522,139],{"class":138},[90,524,135],{"class":128},[90,526,145],{"class":144},[90,528,148],{"class":128},[90,530,531],{"class":92,"line":199},[90,532,154],{"class":128},[90,534,535],{"class":92,"line":219},[90,536,537],{"class":160},"     country | __time__\n",[90,539,540],{"class":92,"line":224},[90,541,542],{"class":160},"      Poland |    2\n",[90,544,545],{"class":92,"line":229},[90,546,547],{"class":160},"      France |    2\n",[90,549,550],{"class":92,"line":235},[90,551,552],{"class":160},"      Spain  |    2\n",[90,554,555],{"class":92,"line":241},[90,556,542],{"class":160},[90,558,559],{"class":92,"line":247},[90,560,561],{"class":160},"      France |    4\n",[90,563,564],{"class":92,"line":252},[90,565,566],{"class":160},"         USA |    4\n",[90,568,569],{"class":92,"line":257},[90,570,566],{"class":160},[90,572,573],{"class":92,"line":262},[90,574,575],{"class":160},"     Germany |    6\n",[90,577,578],{"class":92,"line":320},[90,579,580],{"class":160},"         USA |    6\n",[90,582,583],{"class":92,"line":377},[90,584,585],{"class":160},"         USA |    8\n",[90,587,588],{"class":92,"line":382},[90,589,590],{"class":160},"      Poland |    8\n",[90,592,593],{"class":92,"line":387},[90,594,595],{"class":160},"      France |    8\n",[90,597,599],{"class":92,"line":598},27,[90,600,601],{"class":160},"      France |   12\n",[90,603,605],{"class":92,"line":604},28,[90,606,607],{"class":160},"     Germany |   14\n",[90,609,611],{"class":92,"line":610},29,[90,612,154],{"class":128},[90,614,616],{"class":92,"line":615},30,[90,617,196],{"class":128},[90,619,621,624,626,629,631,634,636,638,640,642,644,647,649,652],{"class":92,"line":620},31,[90,622,623],{"class":100},"total_visits_by_country ",[90,625,129],{"class":128},[90,627,628],{"class":100}," visits",[90,630,135],{"class":128},[90,632,633],{"class":144},"groupby",[90,635,278],{"class":128},[90,637,329],{"class":144},[90,639,135],{"class":128},[90,641,369],{"class":138},[90,643,135],{"class":128},[90,645,646],{"class":138},"country",[90,648,312],{"class":128},[90,650,651],{"class":144},"reduce",[90,653,148],{"class":128},[90,655,657,660,662,664,666,668,670,672,674,676,678,681,683,686],{"class":92,"line":656},32,[90,658,659],{"class":144},"    pw",[90,661,135],{"class":128},[90,663,369],{"class":138},[90,665,135],{"class":128},[90,667,646],{"class":138},[90,669,284],{"class":128},[90,671,628],{"class":323},[90,673,129],{"class":128},[90,675,329],{"class":144},[90,677,135],{"class":128},[90,679,680],{"class":138},"reducers",[90,682,135],{"class":128},[90,684,685],{"class":144},"count",[90,687,688],{"class":128},"()\n",[90,690,692],{"class":92,"line":691},33,[90,693,196],{"class":128},[90,695,697],{"class":92,"line":696},34,[90,698,114],{"emptyLinePlaceholder":113},[90,700,702,705,707,710,712,714],{"class":92,"line":701},35,[90,703,704],{"class":100},"answers ",[90,706,129],{"class":128},[90,708,709],{"class":100}," queries",[90,711,135],{"class":128},[90,713,275],{"class":144},[90,715,148],{"class":128},[90,717,719,722,724,726,728,730,732,734,736,738,740,742,744],{"class":92,"line":718},36,[90,720,721],{"class":144},"    total_visits_by_country",[90,723,284],{"class":128},[90,725,132],{"class":144},[90,727,135],{"class":128},[90,729,291],{"class":138},[90,731,135],{"class":128},[90,733,646],{"class":138},[90,735,298],{"class":128},[90,737,132],{"class":144},[90,739,135],{"class":128},[90,741,305],{"class":138},[90,743,135],{"class":128},[90,745,746],{"class":138},"country\n",[90,748,750,752,754,756,758,760,762,764,767,769,771,773,775,777,779,781,783,785,787,789,792],{"class":92,"line":749},37,[90,751,312],{"class":128},[90,753,315],{"class":144},[90,755,278],{"class":128},[90,757,329],{"class":144},[90,759,135],{"class":128},[90,761,291],{"class":138},[90,763,135],{"class":128},[90,765,766],{"class":138},"query_id",[90,768,284],{"class":128},[90,770,132],{"class":144},[90,772,135],{"class":128},[90,774,369],{"class":138},[90,776,135],{"class":128},[90,778,646],{"class":138},[90,780,284],{"class":128},[90,782,132],{"class":144},[90,784,135],{"class":128},[90,786,305],{"class":138},[90,788,135],{"class":128},[90,790,791],{"class":138},"visits",[90,793,196],{"class":128},[90,795,797],{"class":92,"line":796},38,[90,798,114],{"emptyLinePlaceholder":113},[90,800,802,804,806,808,810,812,814,817],{"class":92,"line":801},39,[90,803,329],{"class":100},[90,805,135],{"class":128},[90,807,139],{"class":138},[90,809,135],{"class":128},[90,811,398],{"class":144},[90,813,278],{"class":128},[90,815,816],{"class":144},"answers",[90,818,196],{"class":128},[81,820,823],{"className":821,"code":822,"language":411},[409],"            | query_id | country | visits\n^9WE7JPQ... | 1        | France  | 4\n^G58R0QV... | 2        | Poland  | 3\n^JCMZ99C... | 3        | Germany | 2\n^B6HXT4V... | 4        | USA     | 4\n",[51,824,822],{"__ignoreMap":86},[15,826,827,828,831,832,835,836,839,840,843,844,847,848,851,852,854],{},"Please note how the answer to your query with ",[51,829,830],{},"query_no=1"," is updated a few times. At first, it is equal to ",[51,833,834],{},"2",". At time ",[51,837,838],{},"8",", it changes to ",[51,841,842],{},"3"," and finally is equal to ",[51,845,846],{},"4"," (starting from time ",[51,849,850],{},"12","). It may be a bit surprising if you're new to Pathway Live Data Framework. It turns out, the ",[51,853,275],{}," allows you to keep track of the updates! And it has many cool uses, for instance alerting. You can use it to set up a real-time alerting system. However, if that is not what you want and you'd like to get an answer to your query once, at its processing time, Pathway Live Data Framework supports it as well!",[32,856,858],{"id":857},"asof-now-join","Asof now join",[15,860,861,862,866,867,873],{},"Monitoring changes of answers to your queries might not be what you want. Especially if you have ",[863,864,865],"strong",{},"a lot of"," queries. If you want to get an answer for a query once, and then forget it, you can use ",[40,868,870],{"href":869},"\u002Fdevelopers\u002Fapi-docs\u002Ftemporal#pathway.stdlib.temporal.asof_now_join",[51,871,872],{},"asof_now_join",". Its left side is a queries table and the right side is the data you want to query. Note that the right side is still a table dynamically streaming row changes. You can update it but the updates will only affect future queries - no old answers will be updated.",[15,875,876,877,879],{},"Let's see what ",[51,878,872],{}," would return in the example above:",[81,881,883],{"className":83,"code":882,"language":85,"meta":86,"style":86},"import pathway as pw\n\nqueries = pw.debug.table_from_markdown(\n    \"\"\"\n    query_id |  country  | __time__\n        1    |   France  |     4\n        2    |   Poland  |     6\n        3    |  Germany  |     8\n        4    |      USA  |    14\n    \"\"\"\n)\nvisits = pw.debug.table_from_markdown(\n    \"\"\"\n     country | __time__\n      Poland |    2\n      France |    2\n      Spain  |    2\n      Poland |    2\n      France |    4\n         USA |    4\n         USA |    4\n     Germany |    6\n         USA |    6\n         USA |    8\n      Poland |    8\n      France |    8\n      France |   12\n     Germany |   14\n    \"\"\"\n)\ntotal_visits_by_country = visits.groupby(pw.this.country).reduce(\n    pw.this.country, visits=pw.reducers.count()\n)\n\nanswers = queries.asof_now_join(\n    total_visits_by_country, pw.left.country == pw.right.country\n).select(pw.left.query_id, pw.this.country, pw.right.visits)\n\npw.debug.compute_and_print(answers)\n",[51,884,885,895,899,917,921,925,929,933,937,941,945,949,967,971,975,979,983,987,991,995,999,1003,1007,1011,1015,1019,1023,1027,1031,1035,1039,1069,1099,1103,1107,1121,1149,1193,1197],{"__ignoreMap":86},[90,886,887,889,891,893],{"class":92,"line":93},[90,888,97],{"class":96},[90,890,101],{"class":100},[90,892,104],{"class":96},[90,894,107],{"class":100},[90,896,897],{"class":92,"line":110},[90,898,114],{"emptyLinePlaceholder":113},[90,900,901,903,905,907,909,911,913,915],{"class":92,"line":117},[90,902,458],{"class":100},[90,904,129],{"class":128},[90,906,132],{"class":100},[90,908,135],{"class":128},[90,910,139],{"class":138},[90,912,135],{"class":128},[90,914,145],{"class":144},[90,916,148],{"class":128},[90,918,919],{"class":92,"line":122},[90,920,154],{"class":128},[90,922,923],{"class":92,"line":151},[90,924,481],{"class":160},[90,926,927],{"class":92,"line":157},[90,928,486],{"class":160},[90,930,931],{"class":92,"line":164},[90,932,491],{"class":160},[90,934,935],{"class":92,"line":170},[90,936,496],{"class":160},[90,938,939],{"class":92,"line":176},[90,940,501],{"class":160},[90,942,943],{"class":92,"line":182},[90,944,154],{"class":128},[90,946,947],{"class":92,"line":188},[90,948,196],{"class":128},[90,950,951,953,955,957,959,961,963,965],{"class":92,"line":193},[90,952,514],{"class":100},[90,954,129],{"class":128},[90,956,132],{"class":100},[90,958,135],{"class":128},[90,960,139],{"class":138},[90,962,135],{"class":128},[90,964,145],{"class":144},[90,966,148],{"class":128},[90,968,969],{"class":92,"line":199},[90,970,154],{"class":128},[90,972,973],{"class":92,"line":219},[90,974,537],{"class":160},[90,976,977],{"class":92,"line":224},[90,978,542],{"class":160},[90,980,981],{"class":92,"line":229},[90,982,547],{"class":160},[90,984,985],{"class":92,"line":235},[90,986,552],{"class":160},[90,988,989],{"class":92,"line":241},[90,990,542],{"class":160},[90,992,993],{"class":92,"line":247},[90,994,561],{"class":160},[90,996,997],{"class":92,"line":252},[90,998,566],{"class":160},[90,1000,1001],{"class":92,"line":257},[90,1002,566],{"class":160},[90,1004,1005],{"class":92,"line":262},[90,1006,575],{"class":160},[90,1008,1009],{"class":92,"line":320},[90,1010,580],{"class":160},[90,1012,1013],{"class":92,"line":377},[90,1014,585],{"class":160},[90,1016,1017],{"class":92,"line":382},[90,1018,590],{"class":160},[90,1020,1021],{"class":92,"line":387},[90,1022,595],{"class":160},[90,1024,1025],{"class":92,"line":598},[90,1026,601],{"class":160},[90,1028,1029],{"class":92,"line":604},[90,1030,607],{"class":160},[90,1032,1033],{"class":92,"line":610},[90,1034,154],{"class":128},[90,1036,1037],{"class":92,"line":615},[90,1038,196],{"class":128},[90,1040,1041,1043,1045,1047,1049,1051,1053,1055,1057,1059,1061,1063,1065,1067],{"class":92,"line":620},[90,1042,623],{"class":100},[90,1044,129],{"class":128},[90,1046,628],{"class":100},[90,1048,135],{"class":128},[90,1050,633],{"class":144},[90,1052,278],{"class":128},[90,1054,329],{"class":144},[90,1056,135],{"class":128},[90,1058,369],{"class":138},[90,1060,135],{"class":128},[90,1062,646],{"class":138},[90,1064,312],{"class":128},[90,1066,651],{"class":144},[90,1068,148],{"class":128},[90,1070,1071,1073,1075,1077,1079,1081,1083,1085,1087,1089,1091,1093,1095,1097],{"class":92,"line":656},[90,1072,659],{"class":144},[90,1074,135],{"class":128},[90,1076,369],{"class":138},[90,1078,135],{"class":128},[90,1080,646],{"class":138},[90,1082,284],{"class":128},[90,1084,628],{"class":323},[90,1086,129],{"class":128},[90,1088,329],{"class":144},[90,1090,135],{"class":128},[90,1092,680],{"class":138},[90,1094,135],{"class":128},[90,1096,685],{"class":144},[90,1098,688],{"class":128},[90,1100,1101],{"class":92,"line":691},[90,1102,196],{"class":128},[90,1104,1105],{"class":92,"line":696},[90,1106,114],{"emptyLinePlaceholder":113},[90,1108,1109,1111,1113,1115,1117,1119],{"class":92,"line":701},[90,1110,704],{"class":100},[90,1112,129],{"class":128},[90,1114,709],{"class":100},[90,1116,135],{"class":128},[90,1118,872],{"class":144},[90,1120,148],{"class":128},[90,1122,1123,1125,1127,1129,1131,1133,1135,1137,1139,1141,1143,1145,1147],{"class":92,"line":718},[90,1124,721],{"class":144},[90,1126,284],{"class":128},[90,1128,132],{"class":144},[90,1130,135],{"class":128},[90,1132,291],{"class":138},[90,1134,135],{"class":128},[90,1136,646],{"class":138},[90,1138,298],{"class":128},[90,1140,132],{"class":144},[90,1142,135],{"class":128},[90,1144,305],{"class":138},[90,1146,135],{"class":128},[90,1148,746],{"class":138},[90,1150,1151,1153,1155,1157,1159,1161,1163,1165,1167,1169,1171,1173,1175,1177,1179,1181,1183,1185,1187,1189,1191],{"class":92,"line":749},[90,1152,312],{"class":128},[90,1154,315],{"class":144},[90,1156,278],{"class":128},[90,1158,329],{"class":144},[90,1160,135],{"class":128},[90,1162,291],{"class":138},[90,1164,135],{"class":128},[90,1166,766],{"class":138},[90,1168,284],{"class":128},[90,1170,132],{"class":144},[90,1172,135],{"class":128},[90,1174,369],{"class":138},[90,1176,135],{"class":128},[90,1178,646],{"class":138},[90,1180,284],{"class":128},[90,1182,132],{"class":144},[90,1184,135],{"class":128},[90,1186,305],{"class":138},[90,1188,135],{"class":128},[90,1190,791],{"class":138},[90,1192,196],{"class":128},[90,1194,1195],{"class":92,"line":796},[90,1196,114],{"emptyLinePlaceholder":113},[90,1198,1199,1201,1203,1205,1207,1209,1211,1213],{"class":92,"line":801},[90,1200,329],{"class":100},[90,1202,135],{"class":128},[90,1204,139],{"class":138},[90,1206,135],{"class":128},[90,1208,398],{"class":144},[90,1210,278],{"class":128},[90,1212,816],{"class":144},[90,1214,196],{"class":128},[81,1216,1219],{"className":1217,"code":1218,"language":411},[409],"            | query_id | country | visits\n^9WE7JPQ... | 1        | France  | 2\n^G58R0QV... | 2        | Poland  | 2\n^JCMZ99C... | 3        | Germany | 1\n^B6HXT4V... | 4        | USA     | 4\n",[51,1220,1218],{"__ignoreMap":86},[15,1222,1223,1224,1226,1227,1229,1230,1232,1233,1235],{},"This time the answers to queries are not updated. In particular, the answer to the query with ",[51,1225,830],{}," is set to ",[51,1228,834],{}," at time ",[51,1231,846],{}," and remains equal to ",[51,1234,834],{}," until the end of the program.",[15,1237,1238,1239,1244,1245,1247,1248,1251,1252,1255],{},"In contrast to an ordinary ",[40,1240,1242],{"href":1241},"\u002Fdevelopers\u002Fuser-guide\u002Fdata-transformation\u002Fjoin-manual",[51,1243,275],{},", ",[51,1246,872],{}," is not symmetric. New rows on the left side of the join will produce a result under the condition they can be joined with at least one row from the right side. If you want to produce at least one result from every query, you can use ",[51,1249,1250],{},"asof_now_join_left"," - then all columns from the right side in the output row will be set to ",[51,1253,1254],{},"None",". On the other hand, new rows on the right side of the join won't immediately produce any new rows in the output but will update the index and if they're matched with new records from the left side later, they will appear in the output.",[15,1257,1258,1259,1261,1262,1264],{},"Please note that for a correct operation, the left table of the ",[51,1260,872],{}," (",[51,1263,423],{},") can only be extended with new queries. Pathway Live Data Framework verifies it for you. You can't delete or update the queries. It is quite reasonable. Instead of updating the query, you can just send a new query because your previous query has been already forgotten anyway.",[15,1266,1267,1268,1270,1271,1273],{},"Another important thing is that ",[51,1269,872],{}," depends on the processing time and because of that is non-deterministic. When sending data to a distributed system like pathway, you don't have a guarantee which data will enter the system first (network latencies, etc.). If both queries and data streams are updated at the same time, the amount of data that is already present in the system when a given query is answered is non-deterministic. Thus if you repeat the same experiment with real connectors (like Redpanda or Kafka), you may get different answers in different runs. If you used an ordinary ",[51,1272,275],{},", you would always get the same answers in the end because the answers would be updated with the arrival of the new data.",[15,1275,1276,1277,1279,1280,1282],{},"The differences between an ordinary ",[51,1278,275],{}," and ",[51,1281,872],{}," used to answer the queries are summarized in the table below. Let's denote the left side of the join as \"queries\" and the right side as \"data\".",[1284,1285,1286,1301],"table",{},[1287,1288,1289],"thead",{},[1290,1291,1292,1297],"tr",{},[1293,1294,1295],"th",{},[51,1296,275],{},[1293,1298,1299],{},[51,1300,872],{},[1302,1303,1304,1313,1321,1329],"tbody",{},[1290,1305,1306,1310],{},[1307,1308,1309],"td",{},"updates the answers to old queries",[1307,1311,1312],{},"doesn't update the answers to old queries",[1290,1314,1315,1318],{},[1307,1316,1317],{},"keeps the queries",[1307,1319,1320],{},"forgets the queries",[1290,1322,1323,1326],{},[1307,1324,1325],{},"consumes memory (approx.) proportional to the sum of sizes of the queries and data tables",[1307,1327,1328],{},"consumes memory (approx.) proportional to the size of the data table",[1290,1330,1331,1334],{},[1307,1332,1333],{},"final output deterministic",[1307,1335,1336],{},"final output non-deterministic",[32,1338,1340],{"id":1339},"knn-index","KNN Index",[15,1342,1343,1344,1348,1349,1355],{},"An approximate ",[40,1345,1347],{"href":1346},"\u002Fdevelopers\u002Ftemplates\u002Fetl\u002Flsh_chapter1","K Nearest Neighbors (KNN) Index"," behaves similarly to a join. The default method ",[40,1350,1352],{"href":1351},"\u002Fdevelopers\u002Fapi-docs\u002Fml#pathway.stdlib.ml.index.KNNIndex.get_nearest_items",[51,1353,1354],{},"get_nearest_items"," maintains always up-to-date answers to all queries when the set of indexed documents changes. In fact, it uses a join under the hood.",[15,1357,1358,1359,1365,1366,1370],{},"If you don't want answers to your queries to be updated, you can use ",[40,1360,1362],{"href":1361},"\u002Fdevelopers\u002Fapi-docs\u002Fml#pathway.stdlib.ml.index.KNNIndex.get_nearest_items_asof_now",[51,1363,1364],{},"get_nearest_items_asof_now"," (experimental). It'll return the closest points once and will forget the query. However, it'll monitor the stream containing index data and update the index if new data arrives (but won't update old queries). As a result, if you ask the same query again and the index has changed in the meantime, you can get a different answer. This behavior is used in our ",[40,1367,1369],{"href":1368},"\u002Fdevelopers\u002Fuser-guide\u002Fllm-xpack\u002Fllm-app-pathway","llm-app"," to answer queries using an always up-to-date index of documents.",[15,1372,1373,1374,1377,1378,1381,1382,1384,1385,1387],{},"To understand better the differences between the methods, you can analyze the examples below. In the first example, ",[51,1375,1376],{},"index.get_nearest_items"," is used which leads to updating the answers. In the second example, ",[51,1379,1380],{},"index.get_nearest_items_asof_now"," is used and thus the answers are not updated.\nStreams of changes to tables are simulated using ",[51,1383,66],{}," which, as earlier, uses ",[51,1386,53],{}," column to split the data into batches.",[81,1389,1391],{"className":83,"code":1390,"language":85,"meta":86,"style":86},"import pathway as pw\nfrom pathway.stdlib.ml.index import KNNIndex\n\nqueries = pw.debug.table_from_markdown(\n    \"\"\"\n    query_id |  x |  y | __time__\n        1    |  0 |  0 |    4\n        2    |  2 | -2 |    6\n        3    | -1 |  1 |    8\n        4    | -2 | -3 |    10\n    \"\"\"\n).select(pw.this.query_id, coords=pw.make_tuple(pw.this.x, pw.this.y))\n\ndata = pw.debug.table_from_markdown(\n    \"\"\"\n    point_id |  x |  y | __time__\n        A    |  2 |  2 |    2\n        B    |  3 | -2 |    2\n        C    | -1 |  0 |    6\n        D    |  1 |  2 |    8\n        E    | -3 |  1 |   10\n        F    |  1 | -4 |   12\n    \"\"\"\n).select(pw.this.point_id, coords=pw.make_tuple(pw.this.x, pw.this.y))\n\nindex = KNNIndex(data.coords, data, n_dimensions=2, n_and=5)\nresult_with_updates = queries + index.get_nearest_items(queries.coords, k=2).select(\n    nn_ids=pw.this.point_id, nns=pw.this.coords\n)\npw.debug.compute_and_print(result_with_updates)\n",[51,1392,1393,1403,1431,1435,1453,1457,1462,1467,1472,1477,1482,1486,1547,1551,1570,1574,1579,1584,1589,1594,1599,1604,1609,1613,1670,1674,1719,1762,1797,1801],{"__ignoreMap":86},[90,1394,1395,1397,1399,1401],{"class":92,"line":93},[90,1396,97],{"class":96},[90,1398,101],{"class":100},[90,1400,104],{"class":96},[90,1402,107],{"class":100},[90,1404,1405,1408,1411,1413,1416,1418,1421,1423,1426,1428],{"class":92,"line":110},[90,1406,1407],{"class":96},"from",[90,1409,1410],{"class":100}," pathway",[90,1412,135],{"class":128},[90,1414,1415],{"class":100},"stdlib",[90,1417,135],{"class":128},[90,1419,1420],{"class":100},"ml",[90,1422,135],{"class":128},[90,1424,1425],{"class":100},"index ",[90,1427,97],{"class":96},[90,1429,1430],{"class":100}," KNNIndex\n",[90,1432,1433],{"class":92,"line":117},[90,1434,114],{"emptyLinePlaceholder":113},[90,1436,1437,1439,1441,1443,1445,1447,1449,1451],{"class":92,"line":122},[90,1438,458],{"class":100},[90,1440,129],{"class":128},[90,1442,132],{"class":100},[90,1444,135],{"class":128},[90,1446,139],{"class":138},[90,1448,135],{"class":128},[90,1450,145],{"class":144},[90,1452,148],{"class":128},[90,1454,1455],{"class":92,"line":151},[90,1456,154],{"class":128},[90,1458,1459],{"class":92,"line":157},[90,1460,1461],{"class":160},"    query_id |  x |  y | __time__\n",[90,1463,1464],{"class":92,"line":164},[90,1465,1466],{"class":160},"        1    |  0 |  0 |    4\n",[90,1468,1469],{"class":92,"line":170},[90,1470,1471],{"class":160},"        2    |  2 | -2 |    6\n",[90,1473,1474],{"class":92,"line":176},[90,1475,1476],{"class":160},"        3    | -1 |  1 |    8\n",[90,1478,1479],{"class":92,"line":182},[90,1480,1481],{"class":160},"        4    | -2 | -3 |    10\n",[90,1483,1484],{"class":92,"line":188},[90,1485,154],{"class":128},[90,1487,1488,1490,1492,1494,1496,1498,1500,1502,1504,1506,1509,1511,1513,1515,1518,1520,1522,1524,1526,1528,1531,1533,1535,1537,1539,1541,1544],{"class":92,"line":193},[90,1489,312],{"class":128},[90,1491,315],{"class":144},[90,1493,278],{"class":128},[90,1495,329],{"class":144},[90,1497,135],{"class":128},[90,1499,369],{"class":138},[90,1501,135],{"class":128},[90,1503,766],{"class":138},[90,1505,284],{"class":128},[90,1507,1508],{"class":323}," coords",[90,1510,129],{"class":128},[90,1512,329],{"class":144},[90,1514,135],{"class":128},[90,1516,1517],{"class":144},"make_tuple",[90,1519,278],{"class":128},[90,1521,329],{"class":144},[90,1523,135],{"class":128},[90,1525,369],{"class":138},[90,1527,135],{"class":128},[90,1529,1530],{"class":138},"x",[90,1532,284],{"class":128},[90,1534,132],{"class":144},[90,1536,135],{"class":128},[90,1538,369],{"class":138},[90,1540,135],{"class":128},[90,1542,1543],{"class":138},"y",[90,1545,1546],{"class":128},"))\n",[90,1548,1549],{"class":92,"line":199},[90,1550,114],{"emptyLinePlaceholder":113},[90,1552,1553,1556,1558,1560,1562,1564,1566,1568],{"class":92,"line":219},[90,1554,1555],{"class":100},"data ",[90,1557,129],{"class":128},[90,1559,132],{"class":100},[90,1561,135],{"class":128},[90,1563,139],{"class":138},[90,1565,135],{"class":128},[90,1567,145],{"class":144},[90,1569,148],{"class":128},[90,1571,1572],{"class":92,"line":224},[90,1573,154],{"class":128},[90,1575,1576],{"class":92,"line":229},[90,1577,1578],{"class":160},"    point_id |  x |  y | __time__\n",[90,1580,1581],{"class":92,"line":235},[90,1582,1583],{"class":160},"        A    |  2 |  2 |    2\n",[90,1585,1586],{"class":92,"line":241},[90,1587,1588],{"class":160},"        B    |  3 | -2 |    2\n",[90,1590,1591],{"class":92,"line":247},[90,1592,1593],{"class":160},"        C    | -1 |  0 |    6\n",[90,1595,1596],{"class":92,"line":252},[90,1597,1598],{"class":160},"        D    |  1 |  2 |    8\n",[90,1600,1601],{"class":92,"line":257},[90,1602,1603],{"class":160},"        E    | -3 |  1 |   10\n",[90,1605,1606],{"class":92,"line":262},[90,1607,1608],{"class":160},"        F    |  1 | -4 |   12\n",[90,1610,1611],{"class":92,"line":320},[90,1612,154],{"class":128},[90,1614,1615,1617,1619,1621,1623,1625,1627,1629,1632,1634,1636,1638,1640,1642,1644,1646,1648,1650,1652,1654,1656,1658,1660,1662,1664,1666,1668],{"class":92,"line":377},[90,1616,312],{"class":128},[90,1618,315],{"class":144},[90,1620,278],{"class":128},[90,1622,329],{"class":144},[90,1624,135],{"class":128},[90,1626,369],{"class":138},[90,1628,135],{"class":128},[90,1630,1631],{"class":138},"point_id",[90,1633,284],{"class":128},[90,1635,1508],{"class":323},[90,1637,129],{"class":128},[90,1639,329],{"class":144},[90,1641,135],{"class":128},[90,1643,1517],{"class":144},[90,1645,278],{"class":128},[90,1647,329],{"class":144},[90,1649,135],{"class":128},[90,1651,369],{"class":138},[90,1653,135],{"class":128},[90,1655,1530],{"class":138},[90,1657,284],{"class":128},[90,1659,132],{"class":144},[90,1661,135],{"class":128},[90,1663,369],{"class":138},[90,1665,135],{"class":128},[90,1667,1543],{"class":138},[90,1669,1546],{"class":128},[90,1671,1672],{"class":92,"line":382},[90,1673,114],{"emptyLinePlaceholder":113},[90,1675,1676,1678,1680,1683,1685,1687,1689,1692,1694,1697,1699,1702,1704,1707,1709,1712,1714,1717],{"class":92,"line":387},[90,1677,1425],{"class":100},[90,1679,129],{"class":128},[90,1681,1682],{"class":144}," KNNIndex",[90,1684,278],{"class":128},[90,1686,430],{"class":144},[90,1688,135],{"class":128},[90,1690,1691],{"class":138},"coords",[90,1693,284],{"class":128},[90,1695,1696],{"class":144}," data",[90,1698,284],{"class":128},[90,1700,1701],{"class":323}," n_dimensions",[90,1703,129],{"class":128},[90,1705,834],{"class":1706},"sx098",[90,1708,284],{"class":128},[90,1710,1711],{"class":323}," n_and",[90,1713,129],{"class":128},[90,1715,1716],{"class":1706},"5",[90,1718,196],{"class":128},[90,1720,1721,1724,1726,1729,1732,1735,1737,1739,1741,1743,1745,1747,1749,1752,1754,1756,1758,1760],{"class":92,"line":598},[90,1722,1723],{"class":100},"result_with_updates ",[90,1725,129],{"class":128},[90,1727,1728],{"class":100}," queries ",[90,1730,1731],{"class":128},"+",[90,1733,1734],{"class":100}," index",[90,1736,135],{"class":128},[90,1738,1354],{"class":144},[90,1740,278],{"class":128},[90,1742,423],{"class":144},[90,1744,135],{"class":128},[90,1746,1691],{"class":138},[90,1748,284],{"class":128},[90,1750,1751],{"class":323}," k",[90,1753,129],{"class":128},[90,1755,834],{"class":1706},[90,1757,312],{"class":128},[90,1759,315],{"class":144},[90,1761,148],{"class":128},[90,1763,1764,1767,1769,1771,1773,1775,1777,1779,1781,1784,1786,1788,1790,1792,1794],{"class":92,"line":604},[90,1765,1766],{"class":323},"    nn_ids",[90,1768,129],{"class":128},[90,1770,329],{"class":144},[90,1772,135],{"class":128},[90,1774,369],{"class":138},[90,1776,135],{"class":128},[90,1778,1631],{"class":138},[90,1780,284],{"class":128},[90,1782,1783],{"class":323}," nns",[90,1785,129],{"class":128},[90,1787,329],{"class":144},[90,1789,135],{"class":128},[90,1791,369],{"class":138},[90,1793,135],{"class":128},[90,1795,1796],{"class":138},"coords\n",[90,1798,1799],{"class":92,"line":610},[90,1800,196],{"class":128},[90,1802,1803,1805,1807,1809,1811,1813,1815,1818],{"class":92,"line":615},[90,1804,329],{"class":100},[90,1806,135],{"class":128},[90,1808,139],{"class":138},[90,1810,135],{"class":128},[90,1812,398],{"class":144},[90,1814,278],{"class":128},[90,1816,1817],{"class":144},"result_with_updates",[90,1819,196],{"class":128},[81,1821,1824],{"className":1822,"code":1823,"language":411},[409],"            | query_id | coords   | nn_ids     | nns\n^X1MXHYY... | 1        | (0, 0)   | ('D', 'C') | ((1, 2), (-1, 0))\n^YYY4HAB... | 2        | (2, -2)  | ('B', 'F') | ((3, -2), (1, -4))\n^Z3QWT29... | 3        | (-1, 1)  | ('C', 'E') | ((-1, 0), (-3, 1))\n^3CZ78B4... | 4        | (-2, -3) | ('F', 'C') | ((1, -4), (-1, 0))\n",[51,1825,1823],{"__ignoreMap":86},[15,1827,1828,1829,1831,1832,135],{},"The example below uses the same streams but does not update the answers to the queries. Note the difference between the methods used - ",[51,1830,1354],{}," vs ",[51,1833,1364],{},[81,1835,1837],{"className":83,"code":1836,"language":85,"meta":86,"style":86},"index = KNNIndex(data.coords, data, n_dimensions=2, n_and=5)\nresult_asof_now = queries + index.get_nearest_items_asof_now(\n    queries.coords, k=2\n).select(nn_ids=pw.this.point_id, nns=pw.this.coords)\npw.debug.compute_and_print(result_asof_now)\n",[51,1838,1839,1877,1896,1914,1955],{"__ignoreMap":86},[90,1840,1841,1843,1845,1847,1849,1851,1853,1855,1857,1859,1861,1863,1865,1867,1869,1871,1873,1875],{"class":92,"line":93},[90,1842,1425],{"class":100},[90,1844,129],{"class":128},[90,1846,1682],{"class":144},[90,1848,278],{"class":128},[90,1850,430],{"class":144},[90,1852,135],{"class":128},[90,1854,1691],{"class":138},[90,1856,284],{"class":128},[90,1858,1696],{"class":144},[90,1860,284],{"class":128},[90,1862,1701],{"class":323},[90,1864,129],{"class":128},[90,1866,834],{"class":1706},[90,1868,284],{"class":128},[90,1870,1711],{"class":323},[90,1872,129],{"class":128},[90,1874,1716],{"class":1706},[90,1876,196],{"class":128},[90,1878,1879,1882,1884,1886,1888,1890,1892,1894],{"class":92,"line":110},[90,1880,1881],{"class":100},"result_asof_now ",[90,1883,129],{"class":128},[90,1885,1728],{"class":100},[90,1887,1731],{"class":128},[90,1889,1734],{"class":100},[90,1891,135],{"class":128},[90,1893,1364],{"class":144},[90,1895,148],{"class":128},[90,1897,1898,1901,1903,1905,1907,1909,1911],{"class":92,"line":117},[90,1899,1900],{"class":144},"    queries",[90,1902,135],{"class":128},[90,1904,1691],{"class":138},[90,1906,284],{"class":128},[90,1908,1751],{"class":323},[90,1910,129],{"class":128},[90,1912,1913],{"class":1706},"2\n",[90,1915,1916,1918,1920,1922,1925,1927,1929,1931,1933,1935,1937,1939,1941,1943,1945,1947,1949,1951,1953],{"class":92,"line":122},[90,1917,312],{"class":128},[90,1919,315],{"class":144},[90,1921,278],{"class":128},[90,1923,1924],{"class":323},"nn_ids",[90,1926,129],{"class":128},[90,1928,329],{"class":144},[90,1930,135],{"class":128},[90,1932,369],{"class":138},[90,1934,135],{"class":128},[90,1936,1631],{"class":138},[90,1938,284],{"class":128},[90,1940,1783],{"class":323},[90,1942,129],{"class":128},[90,1944,329],{"class":144},[90,1946,135],{"class":128},[90,1948,369],{"class":138},[90,1950,135],{"class":128},[90,1952,1691],{"class":138},[90,1954,196],{"class":128},[90,1956,1957,1959,1961,1963,1965,1967,1969,1972],{"class":92,"line":151},[90,1958,329],{"class":100},[90,1960,135],{"class":128},[90,1962,139],{"class":138},[90,1964,135],{"class":128},[90,1966,398],{"class":144},[90,1968,278],{"class":128},[90,1970,1971],{"class":144},"result_asof_now",[90,1973,196],{"class":128},[81,1975,1978],{"className":1976,"code":1977,"language":411},[409],"            | query_id | coords   | nn_ids     | nns\n^X1MXHYY... | 1        | (0, 0)   | ('A', 'B') | ((2, 2), (3, -2))\n^YYY4HAB... | 2        | (2, -2)  | ('B', 'C') | ((3, -2), (-1, 0))\n^Z3QWT29... | 3        | (-1, 1)  | ('C', 'D') | ((-1, 0), (1, 2))\n^3CZ78B4... | 4        | (-2, -3) | ('C', 'E') | ((-1, 0), (-3, 1))\n",[51,1979,1977],{"__ignoreMap":86},[15,1981,1982,1986,1987,1990,1991,1993,1994,1996],{},[24,1983],{"alt":1984,"src":1985},"Points and queries in knn example","assets\u002Fcontent\u002Ftutorials\u002Findexes\u002Fknn.svg","\nNote the differences between two cases. For instance, for query with ",[51,1988,1989],{},"query_id=2",", points returned by ",[51,1992,1364],{}," were B and C because other closer points were not available at the query time. On the other hand, ",[51,1995,1354],{}," updated the results and they have changed to B, F.",[15,1998,1999,2000,2002],{},"In the example above, 2-dimensional vectors were used to make the analysis simpler. The ",[863,2001,1369],{}," uses n-dimensional vectors but the general principle doesn't change.",[32,2004,2006,2007,2010],{"id":2005},"applications-of-asof_now-indexes-to-data-read-using-http-rest-connector","Applications of ",[51,2008,2009],{},"asof_now"," indexes to data read using HTTP REST connector",[15,2012,2013,2014,2017],{},"If you want a more practical example, we can set up a webserver that answers queries about ",[51,2015,2016],{},"k"," nearest neighbors. The architecture of the app is presented on the diagram below:",[15,2019,2020],{},[24,2021],{"alt":2022,"src":2023},"KNN app architecture","assets\u002Fcontent\u002Ftutorials\u002Findexes\u002Frest_knn.svg",[15,2025,2026],{},"First you have to make necessary imports and define a schema of the data (we will use the same schema for data na queries).",[81,2028,2030],{"className":83,"code":2029,"language":85,"meta":86,"style":86},"import pathway as pw\nfrom pathway.stdlib.ml.index import KNNIndex\n\n\nclass PointSchema(pw.Schema):\n    x: int\n    y: int\n\n\n# To receive the queries, you can use the [`rest_connector`](\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fhttp#pathway.io.http.rest_connector).\n",[51,2031,2032,2042,2064,2068,2072,2094,2105,2114,2118,2122],{"__ignoreMap":86},[90,2033,2034,2036,2038,2040],{"class":92,"line":93},[90,2035,97],{"class":96},[90,2037,101],{"class":100},[90,2039,104],{"class":96},[90,2041,107],{"class":100},[90,2043,2044,2046,2048,2050,2052,2054,2056,2058,2060,2062],{"class":92,"line":110},[90,2045,1407],{"class":96},[90,2047,1410],{"class":100},[90,2049,135],{"class":128},[90,2051,1415],{"class":100},[90,2053,135],{"class":128},[90,2055,1420],{"class":100},[90,2057,135],{"class":128},[90,2059,1425],{"class":100},[90,2061,97],{"class":96},[90,2063,1430],{"class":100},[90,2065,2066],{"class":92,"line":117},[90,2067,114],{"emptyLinePlaceholder":113},[90,2069,2070],{"class":92,"line":122},[90,2071,114],{"emptyLinePlaceholder":113},[90,2073,2074,2078,2082,2084,2086,2088,2091],{"class":92,"line":151},[90,2075,2077],{"class":2076},"sJ14y","class",[90,2079,2081],{"class":2080},"s5Dmg"," PointSchema",[90,2083,278],{"class":128},[90,2085,329],{"class":2080},[90,2087,135],{"class":128},[90,2089,2090],{"class":2080},"Schema",[90,2092,2093],{"class":128},"):\n",[90,2095,2096,2099,2102],{"class":92,"line":157},[90,2097,2098],{"class":100},"    x",[90,2100,2101],{"class":128},":",[90,2103,2104],{"class":2080}," int\n",[90,2106,2107,2110,2112],{"class":92,"line":164},[90,2108,2109],{"class":100},"    y",[90,2111,2101],{"class":128},[90,2113,2104],{"class":2080},[90,2115,2116],{"class":92,"line":170},[90,2117,114],{"emptyLinePlaceholder":113},[90,2119,2120],{"class":92,"line":176},[90,2121,114],{"emptyLinePlaceholder":113},[90,2123,2124],{"class":92,"line":182},[90,2125,2127],{"class":2126},"saEQR","# To receive the queries, you can use the [`rest_connector`](\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fhttp#pathway.io.http.rest_connector).\n",[81,2129,2131],{"className":83,"code":2130,"language":85,"meta":86,"style":86},"host = \"0.0.0.0\"  # set as needed\nport = 8080  # set as needed\nqueries, response_writer = pw.io.http.rest_connector(\n    host=host,\n    port=port,\n    schema=PointSchema,\n    autocommit_duration_ms=50,\n    delete_completed_queries=False,\n)\n",[51,2132,2133,2152,2164,2194,2207,2219,2231,2243,2251],{"__ignoreMap":86},[90,2134,2135,2138,2140,2143,2146,2149],{"class":92,"line":93},[90,2136,2137],{"class":100},"host ",[90,2139,129],{"class":128},[90,2141,2142],{"class":128}," \"",[90,2144,2145],{"class":160},"0.0.0.0",[90,2147,2148],{"class":128},"\"",[90,2150,2151],{"class":2126},"  # set as needed\n",[90,2153,2154,2157,2159,2162],{"class":92,"line":110},[90,2155,2156],{"class":100},"port ",[90,2158,129],{"class":128},[90,2160,2161],{"class":1706}," 8080",[90,2163,2151],{"class":2126},[90,2165,2166,2168,2170,2173,2175,2177,2179,2182,2184,2187,2189,2192],{"class":92,"line":117},[90,2167,423],{"class":100},[90,2169,284],{"class":128},[90,2171,2172],{"class":100}," response_writer ",[90,2174,129],{"class":128},[90,2176,132],{"class":100},[90,2178,135],{"class":128},[90,2180,2181],{"class":138},"io",[90,2183,135],{"class":128},[90,2185,2186],{"class":138},"http",[90,2188,135],{"class":128},[90,2190,2191],{"class":144},"rest_connector",[90,2193,148],{"class":128},[90,2195,2196,2199,2201,2204],{"class":92,"line":122},[90,2197,2198],{"class":323},"    host",[90,2200,129],{"class":128},[90,2202,2203],{"class":144},"host",[90,2205,2206],{"class":128},",\n",[90,2208,2209,2212,2214,2217],{"class":92,"line":151},[90,2210,2211],{"class":323},"    port",[90,2213,129],{"class":128},[90,2215,2216],{"class":144},"port",[90,2218,2206],{"class":128},[90,2220,2221,2224,2226,2229],{"class":92,"line":157},[90,2222,2223],{"class":323},"    schema",[90,2225,129],{"class":128},[90,2227,2228],{"class":144},"PointSchema",[90,2230,2206],{"class":128},[90,2232,2233,2236,2238,2241],{"class":92,"line":164},[90,2234,2235],{"class":323},"    autocommit_duration_ms",[90,2237,129],{"class":128},[90,2239,2240],{"class":1706},"50",[90,2242,2206],{"class":128},[90,2244,2245,2248],{"class":92,"line":170},[90,2246,2247],{"class":323},"    delete_completed_queries",[90,2249,2250],{"class":128},"=False,\n",[90,2252,2253],{"class":92,"line":176},[90,2254,196],{"class":128},[15,2256,2257,2258,2262,2263,2266,2267,2270],{},"The database is represented as a directory containing CSV files with points from which you want to find closest ones. You can use a ",[40,2259,2261],{"href":2260},"\u002Fdevelopers\u002Fuser-guide\u002Fconnect\u002Fconnectors\u002Fcsv_connectors","CSV connector"," to read a directory of CSV files. The ",[51,2264,2265],{},"mode"," parameter is set to ",[51,2268,2269],{},"streaming",". If new files appear in the directory, their entries will be appended to the stream and hence will be added to the KNN index.",[81,2272,2274],{"className":83,"code":2273,"language":85,"meta":86,"style":86},"data_dir = \"points\"\ndata = pw.io.csv.read(\n    data_dir,\n    schema=PointSchema,\n    mode=\"streaming\",\n    autocommit_duration_ms=500,\n)\n",[51,2275,2276,2291,2315,2322,2332,2347,2358],{"__ignoreMap":86},[90,2277,2278,2281,2283,2285,2288],{"class":92,"line":93},[90,2279,2280],{"class":100},"data_dir ",[90,2282,129],{"class":128},[90,2284,2142],{"class":128},[90,2286,2287],{"class":160},"points",[90,2289,2290],{"class":128},"\"\n",[90,2292,2293,2295,2297,2299,2301,2303,2305,2308,2310,2313],{"class":92,"line":110},[90,2294,1555],{"class":100},[90,2296,129],{"class":128},[90,2298,132],{"class":100},[90,2300,135],{"class":128},[90,2302,2181],{"class":138},[90,2304,135],{"class":128},[90,2306,2307],{"class":138},"csv",[90,2309,135],{"class":128},[90,2311,2312],{"class":144},"read",[90,2314,148],{"class":128},[90,2316,2317,2320],{"class":92,"line":117},[90,2318,2319],{"class":144},"    data_dir",[90,2321,2206],{"class":128},[90,2323,2324,2326,2328,2330],{"class":92,"line":122},[90,2325,2223],{"class":323},[90,2327,129],{"class":128},[90,2329,2228],{"class":144},[90,2331,2206],{"class":128},[90,2333,2334,2337,2339,2341,2343,2345],{"class":92,"line":151},[90,2335,2336],{"class":323},"    mode",[90,2338,129],{"class":128},[90,2340,2148],{"class":128},[90,2342,2269],{"class":160},[90,2344,2148],{"class":128},[90,2346,2206],{"class":128},[90,2348,2349,2351,2353,2356],{"class":92,"line":157},[90,2350,2235],{"class":323},[90,2352,129],{"class":128},[90,2354,2355],{"class":1706},"500",[90,2357,2206],{"class":128},[90,2359,2360],{"class":92,"line":164},[90,2361,196],{"class":128},[15,2363,2364],{},"To build the index you need to turn point coordinates into a vector:",[81,2366,2368],{"className":83,"code":2367,"language":85,"meta":86,"style":86},"data = data.select(coords=pw.make_tuple(pw.this.x, pw.this.y))\nindex = KNNIndex(data.coords, data, n_dimensions=2, n_and=5)\n",[51,2369,2370,2420],{"__ignoreMap":86},[90,2371,2372,2374,2376,2378,2380,2382,2384,2386,2388,2390,2392,2394,2396,2398,2400,2402,2404,2406,2408,2410,2412,2414,2416,2418],{"class":92,"line":93},[90,2373,1555],{"class":100},[90,2375,129],{"class":128},[90,2377,1696],{"class":100},[90,2379,135],{"class":128},[90,2381,315],{"class":144},[90,2383,278],{"class":128},[90,2385,1691],{"class":323},[90,2387,129],{"class":128},[90,2389,329],{"class":144},[90,2391,135],{"class":128},[90,2393,1517],{"class":144},[90,2395,278],{"class":128},[90,2397,329],{"class":144},[90,2399,135],{"class":128},[90,2401,369],{"class":138},[90,2403,135],{"class":128},[90,2405,1530],{"class":138},[90,2407,284],{"class":128},[90,2409,132],{"class":144},[90,2411,135],{"class":128},[90,2413,369],{"class":138},[90,2415,135],{"class":128},[90,2417,1543],{"class":138},[90,2419,1546],{"class":128},[90,2421,2422,2424,2426,2428,2430,2432,2434,2436,2438,2440,2442,2444,2446,2448,2450,2452,2454,2456],{"class":92,"line":110},[90,2423,1425],{"class":100},[90,2425,129],{"class":128},[90,2427,1682],{"class":144},[90,2429,278],{"class":128},[90,2431,430],{"class":144},[90,2433,135],{"class":128},[90,2435,1691],{"class":138},[90,2437,284],{"class":128},[90,2439,1696],{"class":144},[90,2441,284],{"class":128},[90,2443,1701],{"class":323},[90,2445,129],{"class":128},[90,2447,834],{"class":1706},[90,2449,284],{"class":128},[90,2451,1711],{"class":323},[90,2453,129],{"class":128},[90,2455,1716],{"class":1706},[90,2457,196],{"class":128},[15,2459,2460,2461,2463],{},"To answer the queries, you can use the ",[51,2462,1364],{}," method of the index. It'll find the nearest points but won't update the queries in the future.",[81,2465,2467],{"className":83,"code":2466,"language":85,"meta":86,"style":86},"queries = queries.select(coords=pw.make_tuple(pw.this.x, pw.this.y))\nresult = queries + index.get_nearest_items_asof_now(queries.coords, k=2).select(\n    result=pw.this.coords\n)\n",[51,2468,2469,2519,2557,2574],{"__ignoreMap":86},[90,2470,2471,2473,2475,2477,2479,2481,2483,2485,2487,2489,2491,2493,2495,2497,2499,2501,2503,2505,2507,2509,2511,2513,2515,2517],{"class":92,"line":93},[90,2472,458],{"class":100},[90,2474,129],{"class":128},[90,2476,709],{"class":100},[90,2478,135],{"class":128},[90,2480,315],{"class":144},[90,2482,278],{"class":128},[90,2484,1691],{"class":323},[90,2486,129],{"class":128},[90,2488,329],{"class":144},[90,2490,135],{"class":128},[90,2492,1517],{"class":144},[90,2494,278],{"class":128},[90,2496,329],{"class":144},[90,2498,135],{"class":128},[90,2500,369],{"class":138},[90,2502,135],{"class":128},[90,2504,1530],{"class":138},[90,2506,284],{"class":128},[90,2508,132],{"class":144},[90,2510,135],{"class":128},[90,2512,369],{"class":138},[90,2514,135],{"class":128},[90,2516,1543],{"class":138},[90,2518,1546],{"class":128},[90,2520,2521,2523,2525,2527,2529,2531,2533,2535,2537,2539,2541,2543,2545,2547,2549,2551,2553,2555],{"class":92,"line":110},[90,2522,265],{"class":100},[90,2524,129],{"class":128},[90,2526,1728],{"class":100},[90,2528,1731],{"class":128},[90,2530,1734],{"class":100},[90,2532,135],{"class":128},[90,2534,1364],{"class":144},[90,2536,278],{"class":128},[90,2538,423],{"class":144},[90,2540,135],{"class":128},[90,2542,1691],{"class":138},[90,2544,284],{"class":128},[90,2546,1751],{"class":323},[90,2548,129],{"class":128},[90,2550,834],{"class":1706},[90,2552,312],{"class":128},[90,2554,315],{"class":144},[90,2556,148],{"class":128},[90,2558,2559,2562,2564,2566,2568,2570,2572],{"class":92,"line":117},[90,2560,2561],{"class":323},"    result",[90,2563,129],{"class":128},[90,2565,329],{"class":144},[90,2567,135],{"class":128},[90,2569,369],{"class":138},[90,2571,135],{"class":128},[90,2573,1796],{"class":138},[90,2575,2576],{"class":92,"line":122},[90,2577,196],{"class":128},[15,2579,2580,2581,2584,2585],{},"To send back query response to the user, you should use ",[51,2582,2583],{},"response_writer"," returned by the ",[40,2586,2588],{"href":2587},"\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fhttp#pathway.io.http.rest_connector",[51,2589,2191],{},[81,2591,2593],{"className":83,"code":2592,"language":85,"meta":86,"style":86},"response_writer(result)\n",[51,2594,2595],{"__ignoreMap":86},[90,2596,2597,2599,2601,2603],{"class":92,"line":93},[90,2598,2583],{"class":144},[90,2600,278],{"class":128},[90,2602,403],{"class":144},[90,2604,196],{"class":128},[15,2606,2607],{},"Firstly, let's populate the directory with a file containing some points. To do that you can run in your terminal:",[81,2609,2614],{"className":2610,"code":2611,"language":2612,"meta":2613,"style":86},"language-shell shiki shiki-themes material-theme-palenight","mkdir points && echo -e \"x,y\\n2,2\\n-2,2\\n0,6\\n2,8\" > points\u002Fa.csv\n","shell","script",[51,2615,2616],{"__ignoreMap":86},[90,2617,2618,2621,2624,2627,2630,2633,2635,2638,2640,2643],{"class":92,"line":93},[90,2619,2620],{"class":2080},"mkdir",[90,2622,2623],{"class":160}," points",[90,2625,2626],{"class":128}," &&",[90,2628,2629],{"class":144}," echo",[90,2631,2632],{"class":160}," -e",[90,2634,2142],{"class":128},[90,2636,2637],{"class":160},"x,y\\n2,2\\n-2,2\\n0,6\\n2,8",[90,2639,2148],{"class":128},[90,2641,2642],{"class":128}," >",[90,2644,2645],{"class":160}," points\u002Fa.csv\n",[15,2647,2648],{},"Now you can start the computation:",[81,2650,2652],{"className":83,"code":2651,"language":85,"meta":86,"style":86},"pw.run()\n",[51,2653,2654],{"__ignoreMap":86},[90,2655,2656,2658,2660,2663],{"class":92,"line":93},[90,2657,329],{"class":100},[90,2659,135],{"class":128},[90,2661,2662],{"class":144},"run",[90,2664,688],{"class":128},[15,2666,2667],{},"It is most convenient to copy the whole code and run it as a standalone script:",[81,2669,2671],{"className":83,"code":2670,"language":85,"meta":86,"style":86},"import pathway as pw\nfrom pathway.stdlib.ml.index import KNNIndex\nimport argparse\n\n\nclass PointSchema(pw.Schema):\n    x: int\n    y: int\n\n\ndef run(data_dir: str, host: str, port: int):\n    queries, response_writer = pw.io.http.rest_connector(\n        host=host,\n        port=port,\n        schema=PointSchema,\n        autocommit_duration_ms=50,\n        delete_completed_queries=False,\n    )\n    data = pw.io.csv.read(\n        data_dir,\n        schema=PointSchema,\n        mode=\"streaming\",\n        autocommit_duration_ms=500,\n    )\n    data = data.select(coords=pw.make_tuple(pw.this.x, pw.this.y))\n\n    index = KNNIndex(data.coords, data, n_dimensions=2, n_and=5)\n\n    queries = queries.select(coords=pw.make_tuple(pw.this.x, pw.this.y))\n\n    result = queries + index.get_nearest_items_asof_now(queries.coords, k=2).select(\n        result=pw.this.coords\n    )\n\n    response_writer(result)\n\n    pw.run()\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"data_dir\")\n    parser.add_argument(\"--host\", default=\"0.0.0.0\")\n    parser.add_argument(\"--port\", type=int, default=8080)\n    args = parser.parse_args()\n    run(data_dir=args.data_dir, host=args.host, port=args.port)\n",[51,2672,2673,2683,2705,2712,2716,2720,2736,2744,2752,2756,2760,2799,2825,2836,2847,2858,2869,2876,2881,2904,2911,2921,2936,2946,2950,3000,3004,3043,3047,3098,3102,3141,3158,3162,3166,3177,3181,3191,3195,3199,3221,3239,3260,3293,3332,3350],{"__ignoreMap":86},[90,2674,2675,2677,2679,2681],{"class":92,"line":93},[90,2676,97],{"class":96},[90,2678,101],{"class":100},[90,2680,104],{"class":96},[90,2682,107],{"class":100},[90,2684,2685,2687,2689,2691,2693,2695,2697,2699,2701,2703],{"class":92,"line":110},[90,2686,1407],{"class":96},[90,2688,1410],{"class":100},[90,2690,135],{"class":128},[90,2692,1415],{"class":100},[90,2694,135],{"class":128},[90,2696,1420],{"class":100},[90,2698,135],{"class":128},[90,2700,1425],{"class":100},[90,2702,97],{"class":96},[90,2704,1430],{"class":100},[90,2706,2707,2709],{"class":92,"line":117},[90,2708,97],{"class":96},[90,2710,2711],{"class":100}," argparse\n",[90,2713,2714],{"class":92,"line":122},[90,2715,114],{"emptyLinePlaceholder":113},[90,2717,2718],{"class":92,"line":151},[90,2719,114],{"emptyLinePlaceholder":113},[90,2721,2722,2724,2726,2728,2730,2732,2734],{"class":92,"line":157},[90,2723,2077],{"class":2076},[90,2725,2081],{"class":2080},[90,2727,278],{"class":128},[90,2729,329],{"class":2080},[90,2731,135],{"class":128},[90,2733,2090],{"class":2080},[90,2735,2093],{"class":128},[90,2737,2738,2740,2742],{"class":92,"line":164},[90,2739,2098],{"class":100},[90,2741,2101],{"class":128},[90,2743,2104],{"class":2080},[90,2745,2746,2748,2750],{"class":92,"line":170},[90,2747,2109],{"class":100},[90,2749,2101],{"class":128},[90,2751,2104],{"class":2080},[90,2753,2754],{"class":92,"line":176},[90,2755,114],{"emptyLinePlaceholder":113},[90,2757,2758],{"class":92,"line":182},[90,2759,114],{"emptyLinePlaceholder":113},[90,2761,2762,2765,2768,2770,2773,2775,2778,2780,2783,2785,2787,2789,2792,2794,2797],{"class":92,"line":188},[90,2763,2764],{"class":2076},"def",[90,2766,2767],{"class":144}," run",[90,2769,278],{"class":128},[90,2771,2772],{"class":323},"data_dir",[90,2774,2101],{"class":128},[90,2776,2777],{"class":2080}," str",[90,2779,284],{"class":128},[90,2781,2782],{"class":323}," host",[90,2784,2101],{"class":128},[90,2786,2777],{"class":2080},[90,2788,284],{"class":128},[90,2790,2791],{"class":323}," port",[90,2793,2101],{"class":128},[90,2795,2796],{"class":2080}," int",[90,2798,2093],{"class":128},[90,2800,2801,2803,2805,2807,2809,2811,2813,2815,2817,2819,2821,2823],{"class":92,"line":193},[90,2802,1900],{"class":100},[90,2804,284],{"class":128},[90,2806,2172],{"class":100},[90,2808,129],{"class":128},[90,2810,132],{"class":100},[90,2812,135],{"class":128},[90,2814,2181],{"class":138},[90,2816,135],{"class":128},[90,2818,2186],{"class":138},[90,2820,135],{"class":128},[90,2822,2191],{"class":144},[90,2824,148],{"class":128},[90,2826,2827,2830,2832,2834],{"class":92,"line":199},[90,2828,2829],{"class":323},"        host",[90,2831,129],{"class":128},[90,2833,2203],{"class":144},[90,2835,2206],{"class":128},[90,2837,2838,2841,2843,2845],{"class":92,"line":219},[90,2839,2840],{"class":323},"        port",[90,2842,129],{"class":128},[90,2844,2216],{"class":144},[90,2846,2206],{"class":128},[90,2848,2849,2852,2854,2856],{"class":92,"line":224},[90,2850,2851],{"class":323},"        schema",[90,2853,129],{"class":128},[90,2855,2228],{"class":144},[90,2857,2206],{"class":128},[90,2859,2860,2863,2865,2867],{"class":92,"line":229},[90,2861,2862],{"class":323},"        autocommit_duration_ms",[90,2864,129],{"class":128},[90,2866,2240],{"class":1706},[90,2868,2206],{"class":128},[90,2870,2871,2874],{"class":92,"line":235},[90,2872,2873],{"class":323},"        delete_completed_queries",[90,2875,2250],{"class":128},[90,2877,2878],{"class":92,"line":241},[90,2879,2880],{"class":128},"    )\n",[90,2882,2883,2886,2888,2890,2892,2894,2896,2898,2900,2902],{"class":92,"line":247},[90,2884,2885],{"class":100},"    data ",[90,2887,129],{"class":128},[90,2889,132],{"class":100},[90,2891,135],{"class":128},[90,2893,2181],{"class":138},[90,2895,135],{"class":128},[90,2897,2307],{"class":138},[90,2899,135],{"class":128},[90,2901,2312],{"class":144},[90,2903,148],{"class":128},[90,2905,2906,2909],{"class":92,"line":252},[90,2907,2908],{"class":144},"        data_dir",[90,2910,2206],{"class":128},[90,2912,2913,2915,2917,2919],{"class":92,"line":257},[90,2914,2851],{"class":323},[90,2916,129],{"class":128},[90,2918,2228],{"class":144},[90,2920,2206],{"class":128},[90,2922,2923,2926,2928,2930,2932,2934],{"class":92,"line":262},[90,2924,2925],{"class":323},"        mode",[90,2927,129],{"class":128},[90,2929,2148],{"class":128},[90,2931,2269],{"class":160},[90,2933,2148],{"class":128},[90,2935,2206],{"class":128},[90,2937,2938,2940,2942,2944],{"class":92,"line":320},[90,2939,2862],{"class":323},[90,2941,129],{"class":128},[90,2943,2355],{"class":1706},[90,2945,2206],{"class":128},[90,2947,2948],{"class":92,"line":377},[90,2949,2880],{"class":128},[90,2951,2952,2954,2956,2958,2960,2962,2964,2966,2968,2970,2972,2974,2976,2978,2980,2982,2984,2986,2988,2990,2992,2994,2996,2998],{"class":92,"line":382},[90,2953,2885],{"class":100},[90,2955,129],{"class":128},[90,2957,1696],{"class":100},[90,2959,135],{"class":128},[90,2961,315],{"class":144},[90,2963,278],{"class":128},[90,2965,1691],{"class":323},[90,2967,129],{"class":128},[90,2969,329],{"class":144},[90,2971,135],{"class":128},[90,2973,1517],{"class":144},[90,2975,278],{"class":128},[90,2977,329],{"class":144},[90,2979,135],{"class":128},[90,2981,369],{"class":138},[90,2983,135],{"class":128},[90,2985,1530],{"class":138},[90,2987,284],{"class":128},[90,2989,132],{"class":144},[90,2991,135],{"class":128},[90,2993,369],{"class":138},[90,2995,135],{"class":128},[90,2997,1543],{"class":138},[90,2999,1546],{"class":128},[90,3001,3002],{"class":92,"line":387},[90,3003,114],{"emptyLinePlaceholder":113},[90,3005,3006,3009,3011,3013,3015,3017,3019,3021,3023,3025,3027,3029,3031,3033,3035,3037,3039,3041],{"class":92,"line":598},[90,3007,3008],{"class":100},"    index ",[90,3010,129],{"class":128},[90,3012,1682],{"class":144},[90,3014,278],{"class":128},[90,3016,430],{"class":144},[90,3018,135],{"class":128},[90,3020,1691],{"class":138},[90,3022,284],{"class":128},[90,3024,1696],{"class":144},[90,3026,284],{"class":128},[90,3028,1701],{"class":323},[90,3030,129],{"class":128},[90,3032,834],{"class":1706},[90,3034,284],{"class":128},[90,3036,1711],{"class":323},[90,3038,129],{"class":128},[90,3040,1716],{"class":1706},[90,3042,196],{"class":128},[90,3044,3045],{"class":92,"line":604},[90,3046,114],{"emptyLinePlaceholder":113},[90,3048,3049,3052,3054,3056,3058,3060,3062,3064,3066,3068,3070,3072,3074,3076,3078,3080,3082,3084,3086,3088,3090,3092,3094,3096],{"class":92,"line":610},[90,3050,3051],{"class":100},"    queries ",[90,3053,129],{"class":128},[90,3055,709],{"class":100},[90,3057,135],{"class":128},[90,3059,315],{"class":144},[90,3061,278],{"class":128},[90,3063,1691],{"class":323},[90,3065,129],{"class":128},[90,3067,329],{"class":144},[90,3069,135],{"class":128},[90,3071,1517],{"class":144},[90,3073,278],{"class":128},[90,3075,329],{"class":144},[90,3077,135],{"class":128},[90,3079,369],{"class":138},[90,3081,135],{"class":128},[90,3083,1530],{"class":138},[90,3085,284],{"class":128},[90,3087,132],{"class":144},[90,3089,135],{"class":128},[90,3091,369],{"class":138},[90,3093,135],{"class":128},[90,3095,1543],{"class":138},[90,3097,1546],{"class":128},[90,3099,3100],{"class":92,"line":615},[90,3101,114],{"emptyLinePlaceholder":113},[90,3103,3104,3107,3109,3111,3113,3115,3117,3119,3121,3123,3125,3127,3129,3131,3133,3135,3137,3139],{"class":92,"line":620},[90,3105,3106],{"class":100},"    result ",[90,3108,129],{"class":128},[90,3110,1728],{"class":100},[90,3112,1731],{"class":128},[90,3114,1734],{"class":100},[90,3116,135],{"class":128},[90,3118,1364],{"class":144},[90,3120,278],{"class":128},[90,3122,423],{"class":144},[90,3124,135],{"class":128},[90,3126,1691],{"class":138},[90,3128,284],{"class":128},[90,3130,1751],{"class":323},[90,3132,129],{"class":128},[90,3134,834],{"class":1706},[90,3136,312],{"class":128},[90,3138,315],{"class":144},[90,3140,148],{"class":128},[90,3142,3143,3146,3148,3150,3152,3154,3156],{"class":92,"line":656},[90,3144,3145],{"class":323},"        result",[90,3147,129],{"class":128},[90,3149,329],{"class":144},[90,3151,135],{"class":128},[90,3153,369],{"class":138},[90,3155,135],{"class":128},[90,3157,1796],{"class":138},[90,3159,3160],{"class":92,"line":691},[90,3161,2880],{"class":128},[90,3163,3164],{"class":92,"line":696},[90,3165,114],{"emptyLinePlaceholder":113},[90,3167,3168,3171,3173,3175],{"class":92,"line":701},[90,3169,3170],{"class":144},"    response_writer",[90,3172,278],{"class":128},[90,3174,403],{"class":144},[90,3176,196],{"class":128},[90,3178,3179],{"class":92,"line":718},[90,3180,114],{"emptyLinePlaceholder":113},[90,3182,3183,3185,3187,3189],{"class":92,"line":749},[90,3184,659],{"class":100},[90,3186,135],{"class":128},[90,3188,2662],{"class":144},[90,3190,688],{"class":128},[90,3192,3193],{"class":92,"line":796},[90,3194,114],{"emptyLinePlaceholder":113},[90,3196,3197],{"class":92,"line":801},[90,3198,114],{"emptyLinePlaceholder":113},[90,3200,3202,3205,3208,3211,3213,3216,3218],{"class":92,"line":3201},40,[90,3203,3204],{"class":96},"if",[90,3206,3207],{"class":100}," __name__ ",[90,3209,3210],{"class":128},"==",[90,3212,2142],{"class":128},[90,3214,3215],{"class":160},"__main__",[90,3217,2148],{"class":128},[90,3219,3220],{"class":128},":\n",[90,3222,3224,3227,3229,3232,3234,3237],{"class":92,"line":3223},41,[90,3225,3226],{"class":100},"    parser ",[90,3228,129],{"class":128},[90,3230,3231],{"class":100}," argparse",[90,3233,135],{"class":128},[90,3235,3236],{"class":144},"ArgumentParser",[90,3238,688],{"class":128},[90,3240,3242,3245,3247,3250,3252,3254,3256,3258],{"class":92,"line":3241},42,[90,3243,3244],{"class":100},"    parser",[90,3246,135],{"class":128},[90,3248,3249],{"class":144},"add_argument",[90,3251,278],{"class":128},[90,3253,2148],{"class":128},[90,3255,2772],{"class":160},[90,3257,2148],{"class":128},[90,3259,196],{"class":128},[90,3261,3263,3265,3267,3269,3271,3273,3276,3278,3280,3283,3285,3287,3289,3291],{"class":92,"line":3262},43,[90,3264,3244],{"class":100},[90,3266,135],{"class":128},[90,3268,3249],{"class":144},[90,3270,278],{"class":128},[90,3272,2148],{"class":128},[90,3274,3275],{"class":160},"--host",[90,3277,2148],{"class":128},[90,3279,284],{"class":128},[90,3281,3282],{"class":323}," default",[90,3284,129],{"class":128},[90,3286,2148],{"class":128},[90,3288,2145],{"class":160},[90,3290,2148],{"class":128},[90,3292,196],{"class":128},[90,3294,3296,3298,3300,3302,3304,3306,3309,3311,3313,3316,3318,3321,3323,3325,3327,3330],{"class":92,"line":3295},44,[90,3297,3244],{"class":100},[90,3299,135],{"class":128},[90,3301,3249],{"class":144},[90,3303,278],{"class":128},[90,3305,2148],{"class":128},[90,3307,3308],{"class":160},"--port",[90,3310,2148],{"class":128},[90,3312,284],{"class":128},[90,3314,3315],{"class":323}," type",[90,3317,129],{"class":128},[90,3319,3320],{"class":2080},"int",[90,3322,284],{"class":128},[90,3324,3282],{"class":323},[90,3326,129],{"class":128},[90,3328,3329],{"class":1706},"8080",[90,3331,196],{"class":128},[90,3333,3335,3338,3340,3343,3345,3348],{"class":92,"line":3334},45,[90,3336,3337],{"class":100},"    args ",[90,3339,129],{"class":128},[90,3341,3342],{"class":100}," parser",[90,3344,135],{"class":128},[90,3346,3347],{"class":144},"parse_args",[90,3349,688],{"class":128},[90,3351,3353,3356,3358,3360,3362,3365,3367,3369,3371,3373,3375,3377,3379,3381,3383,3385,3387,3389,3391,3393],{"class":92,"line":3352},46,[90,3354,3355],{"class":144},"    run",[90,3357,278],{"class":128},[90,3359,2772],{"class":323},[90,3361,129],{"class":128},[90,3363,3364],{"class":144},"args",[90,3366,135],{"class":128},[90,3368,2772],{"class":138},[90,3370,284],{"class":128},[90,3372,2782],{"class":323},[90,3374,129],{"class":128},[90,3376,3364],{"class":144},[90,3378,135],{"class":128},[90,3380,2203],{"class":138},[90,3382,284],{"class":128},[90,3384,2791],{"class":323},[90,3386,129],{"class":128},[90,3388,3364],{"class":144},[90,3390,135],{"class":128},[90,3392,2216],{"class":138},[90,3394,196],{"class":128},[15,3396,3397],{},"Now you can send a request to the webserver. You can play with it and try different points. You can use",[81,3399,3401],{"className":2610,"code":3400,"language":2612,"meta":2613,"style":86},"curl --data '{\"x\": 2, \"y\": -2}' http:\u002F\u002Flocalhost:8080\u002F\n",[51,3402,3403],{"__ignoreMap":86},[90,3404,3405,3408,3411,3414,3417,3420],{"class":92,"line":93},[90,3406,3407],{"class":2080},"curl",[90,3409,3410],{"class":160}," --data",[90,3412,3413],{"class":128}," '",[90,3415,3416],{"class":160},"{\"x\": 2, \"y\": -2}",[90,3418,3419],{"class":128},"'",[90,3421,3422],{"class":160}," http:\u002F\u002Flocalhost:8080\u002F\n",[15,3424,3425],{},"You can also add new points to the index by adding a new file to a directory:",[81,3427,3429],{"className":2610,"code":3428,"language":2612,"meta":2613,"style":86},"echo -e \"x,y\\n-3,1\\n1,-4\" > points\u002Fb.csv\n",[51,3430,3431],{"__ignoreMap":86},[90,3432,3433,3436,3438,3440,3443,3445,3447],{"class":92,"line":93},[90,3434,3435],{"class":144},"echo",[90,3437,2632],{"class":160},[90,3439,2142],{"class":128},[90,3441,3442],{"class":160},"x,y\\n-3,1\\n1,-4",[90,3444,2148],{"class":128},[90,3446,2642],{"class":128},[90,3448,3449],{"class":160}," points\u002Fb.csv\n",[15,3451,3452],{},"Let's repeat the first query.",[81,3454,3455],{"className":2610,"code":3400,"language":2612,"meta":2613,"style":86},[51,3456,3457],{"__ignoreMap":86},[90,3458,3459,3461,3463,3465,3467,3469],{"class":92,"line":93},[90,3460,3407],{"class":2080},[90,3462,3410],{"class":160},[90,3464,3413],{"class":128},[90,3466,3416],{"class":160},[90,3468,3419],{"class":128},[90,3470,3422],{"class":160},[15,3472,3473],{},"The result has changed which indicates that the index has been updated.",[15,3475,3476,3477,3479,3480,3482,3483,3489,3490,3493],{},"In this case, you didn't need to keep the queries. However, if you wanted to alert your users (for example via email) that answers to their queries have changed, you could use the normal ",[51,3478,1354],{}," method instead of ",[51,3481,1364],{}," and keep watching the changes in the output stream. To not complicate the example, instead of sending an email, we print a message to the console.\nTo intercept messages in a stream, you can use the ",[40,3484,3486],{"href":3485},"\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io#pathway.io.subscribe",[51,3487,3488],{},"pw.io.subscribe"," method. The function you provide, is called on every row of the stream. It'll also include deletion rows and that's why we check if ",[51,3491,3492],{},"is_addition"," argument is true before printing (an update in a stream consists of two records - a deletion record with the content of the old row and an addition record with a content of the new row).\nThe code below is a slight modification of the code answering queries. You can run and experiment with it in the same way as you did with the code above.",[81,3495,3497],{"className":83,"code":3496,"language":85,"meta":86,"style":86},"import pathway as pw\nfrom pathway.stdlib.ml.index import KNNIndex\nimport argparse\nimport logging\n\n\nclass PointSchema(pw.Schema):\n    x: int\n    y: int\n\n\ndef run(data_dir: str, host: str, port: int):\n    queries, response_writer = pw.io.http.rest_connector(\n        host=host,\n        port=port,\n        schema=PointSchema,\n        autocommit_duration_ms=50,\n        delete_completed_queries=False,\n    )\n    data = pw.io.csv.read(\n        data_dir,\n        schema=PointSchema,\n        mode=\"streaming\",\n        autocommit_duration_ms=500,\n    )\n    data = data.select(coords=pw.make_tuple(pw.this.x, pw.this.y))\n\n    index = KNNIndex(data.coords, data, n_dimensions=2, n_and=5)\n\n    queries = queries.select(coords=pw.make_tuple(pw.this.x, pw.this.y))\n\n    result = queries + index.get_nearest_items(queries.coords, k=2).select(\n        result=pw.this.coords\n    )\n\n    response_writer(result)\n\n    def on_change(key, row, time, is_addition):\n        if is_addition:\n            query_coords = row[\"coords\"]\n            result_coords = row[\"result\"]\n            logging.info(\n                f\"The current answer to query {query_coords} is {result_coords}.\"\n            )\n\n    pw.io.subscribe(result, on_change)\n\n    pw.run()\n\n\nif __name__ == \"__main__\":\n    parser = argparse.ArgumentParser()\n    parser.add_argument(\"data_dir\")\n    parser.add_argument(\"--host\", default=\"0.0.0.0\")\n    parser.add_argument(\"--port\", type=int, default=8080)\n    args = parser.parse_args()\n    run(data_dir=args.data_dir, host=args.host, port=args.port)\n",[51,3498,3499,3509,3531,3537,3544,3548,3552,3568,3576,3584,3588,3592,3624,3650,3660,3670,3680,3690,3696,3700,3722,3728,3738,3752,3762,3766,3816,3820,3858,3862,3912,3916,3954,3970,3974,3978,3988,3992,4022,4031,4052,4071,4083,4113,4118,4122,4145,4150,4161,4166,4171,4188,4203,4222,4253,4288,4303],{"__ignoreMap":86},[90,3500,3501,3503,3505,3507],{"class":92,"line":93},[90,3502,97],{"class":96},[90,3504,101],{"class":100},[90,3506,104],{"class":96},[90,3508,107],{"class":100},[90,3510,3511,3513,3515,3517,3519,3521,3523,3525,3527,3529],{"class":92,"line":110},[90,3512,1407],{"class":96},[90,3514,1410],{"class":100},[90,3516,135],{"class":128},[90,3518,1415],{"class":100},[90,3520,135],{"class":128},[90,3522,1420],{"class":100},[90,3524,135],{"class":128},[90,3526,1425],{"class":100},[90,3528,97],{"class":96},[90,3530,1430],{"class":100},[90,3532,3533,3535],{"class":92,"line":117},[90,3534,97],{"class":96},[90,3536,2711],{"class":100},[90,3538,3539,3541],{"class":92,"line":122},[90,3540,97],{"class":96},[90,3542,3543],{"class":100}," logging\n",[90,3545,3546],{"class":92,"line":151},[90,3547,114],{"emptyLinePlaceholder":113},[90,3549,3550],{"class":92,"line":157},[90,3551,114],{"emptyLinePlaceholder":113},[90,3553,3554,3556,3558,3560,3562,3564,3566],{"class":92,"line":164},[90,3555,2077],{"class":2076},[90,3557,2081],{"class":2080},[90,3559,278],{"class":128},[90,3561,329],{"class":2080},[90,3563,135],{"class":128},[90,3565,2090],{"class":2080},[90,3567,2093],{"class":128},[90,3569,3570,3572,3574],{"class":92,"line":170},[90,3571,2098],{"class":100},[90,3573,2101],{"class":128},[90,3575,2104],{"class":2080},[90,3577,3578,3580,3582],{"class":92,"line":176},[90,3579,2109],{"class":100},[90,3581,2101],{"class":128},[90,3583,2104],{"class":2080},[90,3585,3586],{"class":92,"line":182},[90,3587,114],{"emptyLinePlaceholder":113},[90,3589,3590],{"class":92,"line":188},[90,3591,114],{"emptyLinePlaceholder":113},[90,3593,3594,3596,3598,3600,3602,3604,3606,3608,3610,3612,3614,3616,3618,3620,3622],{"class":92,"line":193},[90,3595,2764],{"class":2076},[90,3597,2767],{"class":144},[90,3599,278],{"class":128},[90,3601,2772],{"class":323},[90,3603,2101],{"class":128},[90,3605,2777],{"class":2080},[90,3607,284],{"class":128},[90,3609,2782],{"class":323},[90,3611,2101],{"class":128},[90,3613,2777],{"class":2080},[90,3615,284],{"class":128},[90,3617,2791],{"class":323},[90,3619,2101],{"class":128},[90,3621,2796],{"class":2080},[90,3623,2093],{"class":128},[90,3625,3626,3628,3630,3632,3634,3636,3638,3640,3642,3644,3646,3648],{"class":92,"line":199},[90,3627,1900],{"class":100},[90,3629,284],{"class":128},[90,3631,2172],{"class":100},[90,3633,129],{"class":128},[90,3635,132],{"class":100},[90,3637,135],{"class":128},[90,3639,2181],{"class":138},[90,3641,135],{"class":128},[90,3643,2186],{"class":138},[90,3645,135],{"class":128},[90,3647,2191],{"class":144},[90,3649,148],{"class":128},[90,3651,3652,3654,3656,3658],{"class":92,"line":219},[90,3653,2829],{"class":323},[90,3655,129],{"class":128},[90,3657,2203],{"class":144},[90,3659,2206],{"class":128},[90,3661,3662,3664,3666,3668],{"class":92,"line":224},[90,3663,2840],{"class":323},[90,3665,129],{"class":128},[90,3667,2216],{"class":144},[90,3669,2206],{"class":128},[90,3671,3672,3674,3676,3678],{"class":92,"line":229},[90,3673,2851],{"class":323},[90,3675,129],{"class":128},[90,3677,2228],{"class":144},[90,3679,2206],{"class":128},[90,3681,3682,3684,3686,3688],{"class":92,"line":235},[90,3683,2862],{"class":323},[90,3685,129],{"class":128},[90,3687,2240],{"class":1706},[90,3689,2206],{"class":128},[90,3691,3692,3694],{"class":92,"line":241},[90,3693,2873],{"class":323},[90,3695,2250],{"class":128},[90,3697,3698],{"class":92,"line":247},[90,3699,2880],{"class":128},[90,3701,3702,3704,3706,3708,3710,3712,3714,3716,3718,3720],{"class":92,"line":252},[90,3703,2885],{"class":100},[90,3705,129],{"class":128},[90,3707,132],{"class":100},[90,3709,135],{"class":128},[90,3711,2181],{"class":138},[90,3713,135],{"class":128},[90,3715,2307],{"class":138},[90,3717,135],{"class":128},[90,3719,2312],{"class":144},[90,3721,148],{"class":128},[90,3723,3724,3726],{"class":92,"line":257},[90,3725,2908],{"class":144},[90,3727,2206],{"class":128},[90,3729,3730,3732,3734,3736],{"class":92,"line":262},[90,3731,2851],{"class":323},[90,3733,129],{"class":128},[90,3735,2228],{"class":144},[90,3737,2206],{"class":128},[90,3739,3740,3742,3744,3746,3748,3750],{"class":92,"line":320},[90,3741,2925],{"class":323},[90,3743,129],{"class":128},[90,3745,2148],{"class":128},[90,3747,2269],{"class":160},[90,3749,2148],{"class":128},[90,3751,2206],{"class":128},[90,3753,3754,3756,3758,3760],{"class":92,"line":377},[90,3755,2862],{"class":323},[90,3757,129],{"class":128},[90,3759,2355],{"class":1706},[90,3761,2206],{"class":128},[90,3763,3764],{"class":92,"line":382},[90,3765,2880],{"class":128},[90,3767,3768,3770,3772,3774,3776,3778,3780,3782,3784,3786,3788,3790,3792,3794,3796,3798,3800,3802,3804,3806,3808,3810,3812,3814],{"class":92,"line":387},[90,3769,2885],{"class":100},[90,3771,129],{"class":128},[90,3773,1696],{"class":100},[90,3775,135],{"class":128},[90,3777,315],{"class":144},[90,3779,278],{"class":128},[90,3781,1691],{"class":323},[90,3783,129],{"class":128},[90,3785,329],{"class":144},[90,3787,135],{"class":128},[90,3789,1517],{"class":144},[90,3791,278],{"class":128},[90,3793,329],{"class":144},[90,3795,135],{"class":128},[90,3797,369],{"class":138},[90,3799,135],{"class":128},[90,3801,1530],{"class":138},[90,3803,284],{"class":128},[90,3805,132],{"class":144},[90,3807,135],{"class":128},[90,3809,369],{"class":138},[90,3811,135],{"class":128},[90,3813,1543],{"class":138},[90,3815,1546],{"class":128},[90,3817,3818],{"class":92,"line":598},[90,3819,114],{"emptyLinePlaceholder":113},[90,3821,3822,3824,3826,3828,3830,3832,3834,3836,3838,3840,3842,3844,3846,3848,3850,3852,3854,3856],{"class":92,"line":604},[90,3823,3008],{"class":100},[90,3825,129],{"class":128},[90,3827,1682],{"class":144},[90,3829,278],{"class":128},[90,3831,430],{"class":144},[90,3833,135],{"class":128},[90,3835,1691],{"class":138},[90,3837,284],{"class":128},[90,3839,1696],{"class":144},[90,3841,284],{"class":128},[90,3843,1701],{"class":323},[90,3845,129],{"class":128},[90,3847,834],{"class":1706},[90,3849,284],{"class":128},[90,3851,1711],{"class":323},[90,3853,129],{"class":128},[90,3855,1716],{"class":1706},[90,3857,196],{"class":128},[90,3859,3860],{"class":92,"line":610},[90,3861,114],{"emptyLinePlaceholder":113},[90,3863,3864,3866,3868,3870,3872,3874,3876,3878,3880,3882,3884,3886,3888,3890,3892,3894,3896,3898,3900,3902,3904,3906,3908,3910],{"class":92,"line":615},[90,3865,3051],{"class":100},[90,3867,129],{"class":128},[90,3869,709],{"class":100},[90,3871,135],{"class":128},[90,3873,315],{"class":144},[90,3875,278],{"class":128},[90,3877,1691],{"class":323},[90,3879,129],{"class":128},[90,3881,329],{"class":144},[90,3883,135],{"class":128},[90,3885,1517],{"class":144},[90,3887,278],{"class":128},[90,3889,329],{"class":144},[90,3891,135],{"class":128},[90,3893,369],{"class":138},[90,3895,135],{"class":128},[90,3897,1530],{"class":138},[90,3899,284],{"class":128},[90,3901,132],{"class":144},[90,3903,135],{"class":128},[90,3905,369],{"class":138},[90,3907,135],{"class":128},[90,3909,1543],{"class":138},[90,3911,1546],{"class":128},[90,3913,3914],{"class":92,"line":620},[90,3915,114],{"emptyLinePlaceholder":113},[90,3917,3918,3920,3922,3924,3926,3928,3930,3932,3934,3936,3938,3940,3942,3944,3946,3948,3950,3952],{"class":92,"line":656},[90,3919,3106],{"class":100},[90,3921,129],{"class":128},[90,3923,1728],{"class":100},[90,3925,1731],{"class":128},[90,3927,1734],{"class":100},[90,3929,135],{"class":128},[90,3931,1354],{"class":144},[90,3933,278],{"class":128},[90,3935,423],{"class":144},[90,3937,135],{"class":128},[90,3939,1691],{"class":138},[90,3941,284],{"class":128},[90,3943,1751],{"class":323},[90,3945,129],{"class":128},[90,3947,834],{"class":1706},[90,3949,312],{"class":128},[90,3951,315],{"class":144},[90,3953,148],{"class":128},[90,3955,3956,3958,3960,3962,3964,3966,3968],{"class":92,"line":691},[90,3957,3145],{"class":323},[90,3959,129],{"class":128},[90,3961,329],{"class":144},[90,3963,135],{"class":128},[90,3965,369],{"class":138},[90,3967,135],{"class":128},[90,3969,1796],{"class":138},[90,3971,3972],{"class":92,"line":696},[90,3973,2880],{"class":128},[90,3975,3976],{"class":92,"line":701},[90,3977,114],{"emptyLinePlaceholder":113},[90,3979,3980,3982,3984,3986],{"class":92,"line":718},[90,3981,3170],{"class":144},[90,3983,278],{"class":128},[90,3985,403],{"class":144},[90,3987,196],{"class":128},[90,3989,3990],{"class":92,"line":749},[90,3991,114],{"emptyLinePlaceholder":113},[90,3993,3994,3997,4000,4002,4005,4007,4010,4012,4015,4017,4020],{"class":92,"line":796},[90,3995,3996],{"class":2076},"    def",[90,3998,3999],{"class":144}," on_change",[90,4001,278],{"class":128},[90,4003,4004],{"class":323},"key",[90,4006,284],{"class":128},[90,4008,4009],{"class":323}," row",[90,4011,284],{"class":128},[90,4013,4014],{"class":323}," time",[90,4016,284],{"class":128},[90,4018,4019],{"class":323}," is_addition",[90,4021,2093],{"class":128},[90,4023,4024,4027,4029],{"class":92,"line":801},[90,4025,4026],{"class":96},"        if",[90,4028,4019],{"class":100},[90,4030,3220],{"class":128},[90,4032,4033,4036,4038,4040,4043,4045,4047,4049],{"class":92,"line":3201},[90,4034,4035],{"class":100},"            query_coords ",[90,4037,129],{"class":128},[90,4039,4009],{"class":100},[90,4041,4042],{"class":128},"[",[90,4044,2148],{"class":128},[90,4046,1691],{"class":160},[90,4048,2148],{"class":128},[90,4050,4051],{"class":128},"]\n",[90,4053,4054,4057,4059,4061,4063,4065,4067,4069],{"class":92,"line":3223},[90,4055,4056],{"class":100},"            result_coords ",[90,4058,129],{"class":128},[90,4060,4009],{"class":100},[90,4062,4042],{"class":128},[90,4064,2148],{"class":128},[90,4066,403],{"class":160},[90,4068,2148],{"class":128},[90,4070,4051],{"class":128},[90,4072,4073,4076,4078,4081],{"class":92,"line":3241},[90,4074,4075],{"class":100},"            logging",[90,4077,135],{"class":128},[90,4079,4080],{"class":144},"info",[90,4082,148],{"class":128},[90,4084,4085,4088,4091,4094,4097,4100,4103,4105,4108,4110],{"class":92,"line":3262},[90,4086,4087],{"class":2076},"                f",[90,4089,4090],{"class":160},"\"The current answer to query ",[90,4092,4093],{"class":1706},"{",[90,4095,4096],{"class":144},"query_coords",[90,4098,4099],{"class":1706},"}",[90,4101,4102],{"class":160}," is ",[90,4104,4093],{"class":1706},[90,4106,4107],{"class":144},"result_coords",[90,4109,4099],{"class":1706},[90,4111,4112],{"class":160},".\"\n",[90,4114,4115],{"class":92,"line":3295},[90,4116,4117],{"class":128},"            )\n",[90,4119,4120],{"class":92,"line":3334},[90,4121,114],{"emptyLinePlaceholder":113},[90,4123,4124,4126,4128,4130,4132,4135,4137,4139,4141,4143],{"class":92,"line":3352},[90,4125,659],{"class":100},[90,4127,135],{"class":128},[90,4129,2181],{"class":138},[90,4131,135],{"class":128},[90,4133,4134],{"class":144},"subscribe",[90,4136,278],{"class":128},[90,4138,403],{"class":144},[90,4140,284],{"class":128},[90,4142,3999],{"class":144},[90,4144,196],{"class":128},[90,4146,4148],{"class":92,"line":4147},47,[90,4149,114],{"emptyLinePlaceholder":113},[90,4151,4153,4155,4157,4159],{"class":92,"line":4152},48,[90,4154,659],{"class":100},[90,4156,135],{"class":128},[90,4158,2662],{"class":144},[90,4160,688],{"class":128},[90,4162,4164],{"class":92,"line":4163},49,[90,4165,114],{"emptyLinePlaceholder":113},[90,4167,4169],{"class":92,"line":4168},50,[90,4170,114],{"emptyLinePlaceholder":113},[90,4172,4174,4176,4178,4180,4182,4184,4186],{"class":92,"line":4173},51,[90,4175,3204],{"class":96},[90,4177,3207],{"class":100},[90,4179,3210],{"class":128},[90,4181,2142],{"class":128},[90,4183,3215],{"class":160},[90,4185,2148],{"class":128},[90,4187,3220],{"class":128},[90,4189,4191,4193,4195,4197,4199,4201],{"class":92,"line":4190},52,[90,4192,3226],{"class":100},[90,4194,129],{"class":128},[90,4196,3231],{"class":100},[90,4198,135],{"class":128},[90,4200,3236],{"class":144},[90,4202,688],{"class":128},[90,4204,4206,4208,4210,4212,4214,4216,4218,4220],{"class":92,"line":4205},53,[90,4207,3244],{"class":100},[90,4209,135],{"class":128},[90,4211,3249],{"class":144},[90,4213,278],{"class":128},[90,4215,2148],{"class":128},[90,4217,2772],{"class":160},[90,4219,2148],{"class":128},[90,4221,196],{"class":128},[90,4223,4225,4227,4229,4231,4233,4235,4237,4239,4241,4243,4245,4247,4249,4251],{"class":92,"line":4224},54,[90,4226,3244],{"class":100},[90,4228,135],{"class":128},[90,4230,3249],{"class":144},[90,4232,278],{"class":128},[90,4234,2148],{"class":128},[90,4236,3275],{"class":160},[90,4238,2148],{"class":128},[90,4240,284],{"class":128},[90,4242,3282],{"class":323},[90,4244,129],{"class":128},[90,4246,2148],{"class":128},[90,4248,2145],{"class":160},[90,4250,2148],{"class":128},[90,4252,196],{"class":128},[90,4254,4256,4258,4260,4262,4264,4266,4268,4270,4272,4274,4276,4278,4280,4282,4284,4286],{"class":92,"line":4255},55,[90,4257,3244],{"class":100},[90,4259,135],{"class":128},[90,4261,3249],{"class":144},[90,4263,278],{"class":128},[90,4265,2148],{"class":128},[90,4267,3308],{"class":160},[90,4269,2148],{"class":128},[90,4271,284],{"class":128},[90,4273,3315],{"class":323},[90,4275,129],{"class":128},[90,4277,3320],{"class":2080},[90,4279,284],{"class":128},[90,4281,3282],{"class":323},[90,4283,129],{"class":128},[90,4285,3329],{"class":1706},[90,4287,196],{"class":128},[90,4289,4291,4293,4295,4297,4299,4301],{"class":92,"line":4290},56,[90,4292,3337],{"class":100},[90,4294,129],{"class":128},[90,4296,3342],{"class":100},[90,4298,135],{"class":128},[90,4300,3347],{"class":144},[90,4302,688],{"class":128},[90,4304,4306,4308,4310,4312,4314,4316,4318,4320,4322,4324,4326,4328,4330,4332,4334,4336,4338,4340,4342,4344],{"class":92,"line":4305},57,[90,4307,3355],{"class":144},[90,4309,278],{"class":128},[90,4311,2772],{"class":323},[90,4313,129],{"class":128},[90,4315,3364],{"class":144},[90,4317,135],{"class":128},[90,4319,2772],{"class":138},[90,4321,284],{"class":128},[90,4323,2782],{"class":323},[90,4325,129],{"class":128},[90,4327,3364],{"class":144},[90,4329,135],{"class":128},[90,4331,2203],{"class":138},[90,4333,284],{"class":128},[90,4335,2791],{"class":323},[90,4337,129],{"class":128},[90,4339,3364],{"class":144},[90,4341,135],{"class":128},[90,4343,2216],{"class":138},[90,4345,196],{"class":128},[15,4347,4348,4349,4354],{},"A similar approach was taken in our ",[40,4350,4353],{"href":4351,"rel":4352},"https:\u002F\u002Fgithub.com\u002Fpathwaycom\u002Fllm-app\u002Ftree\u002Fmain\u002Ftemplates\u002Fdrive_alert",[44],"alerting example",".\nIt is an LLM app that can send you alerts on slack when the response to your query has changed significantly.",[32,4356,4358],{"id":4357},"summary","Summary",[15,4360,4361],{},"In this article you learned about the differences in indexing between databases and Pathway Live Data Framework. You can see that both approaches - keeping the queries to update them in the future or forgetting queries immediately after answering, are useful. It depends on your objective which approach should be used. Pathway Live Data Framework provides methods to handle both variants.",[4363,4364,4365],"style",{},"html pre.shiki code .s6cf3, html code.shiki .s6cf3{--shiki-default:#89DDFF;--shiki-default-font-style:italic}html pre.shiki code .s0W1g, html code.shiki .s0W1g{--shiki-default:#BABED8}html pre.shiki code .sAklC, html code.shiki .sAklC{--shiki-default:#89DDFF}html pre.shiki code .s-wAU, html code.shiki .s-wAU{--shiki-default:#F07178}html pre.shiki code .sdLwU, html code.shiki .sdLwU{--shiki-default:#82AAFF}html pre.shiki code .sfyAc, html code.shiki .sfyAc{--shiki-default:#C3E88D}html pre.shiki code .s7ZW3, html code.shiki .s7ZW3{--shiki-default:#BABED8;--shiki-default-font-style:italic}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 pre.shiki code .sx098, html code.shiki .sx098{--shiki-default:#F78C6C}html pre.shiki code .sJ14y, html code.shiki .sJ14y{--shiki-default:#C792EA}html pre.shiki code .s5Dmg, html code.shiki .s5Dmg{--shiki-default:#FFCB6B}html pre.shiki code .saEQR, html code.shiki .saEQR{--shiki-default:#676E95;--shiki-default-font-style:italic}",{"title":86,"searchDepth":110,"depth":110,"links":4367},[4368,4369,4370,4371,4373],{"id":34,"depth":110,"text":35},{"id":857,"depth":110,"text":858},{"id":1339,"depth":110,"text":1340},{"id":2005,"depth":110,"text":4372},"Applications of asof_now indexes to data read using HTTP REST connector",{"id":4357,"depth":110,"text":4358},"An article explaining ways of indexing data in Pathway Live Data Framework.","md",{"date":4377,"thumbnail":4378,"tags":4379,"keywords":4382,"notebook_export_path":4387},"2023-11-15","\u002Fassets\u002Fcontent\u002Fblog\u002Fth-computing-pagerank.png",[4380,4381],"tutorial","engineering",[4383,4384,275,4385,2009,4386],"index","indexing","asof join","KNN","notebooks\u002Ftutorials\u002Findexes.ipynb","\u002Fdevelopers\u002Fuser-guide\u002Fdata-transformation\u002Findexes",{"title":5,"description":4374},{"loc":4388},"2.developers\u002F4.user-guide\u002F30.data-transformation\u002F60.indexes","czgiUIO5uqi_AWSf_aXVZv8MpqXqgSnr-iGizvZrDpA",[4394],{"title":4395,"path":4396,"stem":4397,"children":4398,"page":4416},"Developers","\u002Fdevelopers","2.developers",[4399,5264,5590],{"title":4400,"path":4401,"stem":4402,"children":4403,"page":4416},"User Guide","\u002Fdevelopers\u002Fuser-guide","2.developers\u002F4.user-guide",[4404,4459,4727,4832,4910,5036,5168,5184,5243],{"title":4405,"meta":4406,"icon":4407,"path":4408,"stem":4409,"children":4410,"page":4416},"Introduction",{"icon":4407},"heroicons:book-open","\u002Fdevelopers\u002Fuser-guide\u002Fintroduction","2.developers\u002F4.user-guide\u002F10.introduction",[4411,4417,4422,4427,4432,4437,4442,4447,4452],{"title":4412,"path":4413,"stem":4414,"meta":4415},"Welcome","\u002Fdevelopers\u002Fuser-guide\u002Fintroduction\u002Fwelcome","2.developers\u002F4.user-guide\u002F10.introduction\u002F10.welcome",{"heading":4416,"toc":4416},false,{"title":4418,"path":4419,"stem":4420,"meta":4421},"Installation","\u002Fdevelopers\u002Fuser-guide\u002Fintroduction\u002Finstallation","2.developers\u002F4.user-guide\u002F10.introduction\u002F20.installation",{"heading":4416,"toc":4416},{"title":4423,"path":4424,"stem":4425,"meta":4426},"Overview","\u002Fdevelopers\u002Fuser-guide\u002Fintroduction\u002Flive-data-framework-overview","2.developers\u002F4.user-guide\u002F10.introduction\u002F30.live-data-framework-overview",{},{"title":4428,"path":4429,"stem":4430,"meta":4431},"Starting Examples","\u002Fdevelopers\u002Fuser-guide\u002Fintroduction\u002Ffirst-realtime-app","2.developers\u002F4.user-guide\u002F10.introduction\u002F40.first-realtime-app",{},{"title":4433,"path":4434,"stem":4435,"meta":4436},"Core Concepts","\u002Fdevelopers\u002Fuser-guide\u002Fintroduction\u002Fconcepts","2.developers\u002F4.user-guide\u002F10.introduction\u002F50.concepts",{},{"title":4438,"path":4439,"stem":4440,"meta":4441},"Why Pathway","\u002Fdevelopers\u002Fuser-guide\u002Fintroduction\u002Fwhy-live-data-framework","2.developers\u002F4.user-guide\u002F10.introduction\u002F60.why-live-data-framework",{},{"title":4443,"path":4444,"stem":4445,"meta":4446},"Licensing Guide","\u002Fdevelopers\u002Fuser-guide\u002Fintroduction\u002Flicensing-guide","2.developers\u002F4.user-guide\u002F10.introduction\u002F65.licensing-guide",{"heading":4416,"toc":4416},{"title":4448,"path":4449,"stem":4450,"meta":4451},"Streaming and Static Modes","\u002Fdevelopers\u002Fuser-guide\u002Fintroduction\u002Fstreaming-and-static-modes","2.developers\u002F4.user-guide\u002F10.introduction\u002F70.streaming-and-static-modes",{},{"title":4453,"path":4454,"stem":4455,"meta":4456},"Batch Processing in Python","\u002Fdevelopers\u002Fuser-guide\u002Fintroduction\u002Fbatch-processing","2.developers\u002F4.user-guide\u002F10.introduction\u002F80.batch-processing",{"thumbnail":4457,"thumbnailFit":4458},"\u002Fassets\u002Fcontent\u002Fdocumentation\u002Fpathway-batch.png","contain",{"title":4460,"path":4461,"stem":4462,"children":4463,"page":4416},"Connect","\u002Fdevelopers\u002Fuser-guide\u002Fconnect","2.developers\u002F4.user-guide\u002F20.connect",[4464,4475,4480,4486,4491,4496,4509,4519,4524,4543],{"title":4465,"path":4466,"stem":4467,"meta":4468},"Basic Data Types","\u002Fdevelopers\u002Fuser-guide\u002Fconnect\u002Fdatatypes","2.developers\u002F4.user-guide\u002F20.connect\u002F20.datatypes",{"date":4469,"tags":4470,"keywords":4471,"notebook_export_path":4474},"2024-01-26",[4380,1284],[4472,4473],"type","schema","notebooks\u002Ftutorials\u002Fbasic_datatypes.ipynb",{"title":4476,"path":4477,"stem":4478,"meta":4479},"Connectors in Pathway","\u002Fdevelopers\u002Fuser-guide\u002Fconnect\u002Fconnectors-overview","2.developers\u002F4.user-guide\u002F20.connect\u002F30.connectors-overview",{},{"title":4481,"path":4482,"stem":4483,"meta":4484},"Connectors list","\u002Fdevelopers\u002Fuser-guide\u002Fconnect\u002Flive-data-framework-connectors","2.developers\u002F4.user-guide\u002F20.connect\u002F35.live-data-framework-connectors",{"layout":4485,"aside":113,"toc":4416,"single":113},"default",{"title":4487,"path":4488,"stem":4489,"meta":4490},"Defining Schema","\u002Fdevelopers\u002Fuser-guide\u002Fconnect\u002Fschema","2.developers\u002F4.user-guide\u002F20.connect\u002F40.schema",{},{"title":4492,"path":4493,"stem":4494,"meta":4495},"Generate Data Streams with the demo Module","\u002Fdevelopers\u002Fuser-guide\u002Fconnect\u002Fartificial-streams","2.developers\u002F4.user-guide\u002F20.connect\u002F50.artificial-streams",{},{"title":4497,"path":4498,"stem":4499,"meta":4500},"Automatic Generation of Schema Class","\u002Fdevelopers\u002Fuser-guide\u002Fconnect\u002Fschema-generation","2.developers\u002F4.user-guide\u002F20.connect\u002F60.schema-generation",{"date":4501,"thumbnail":4502,"tags":4504,"keywords":4505,"notebook_export_path":4508},"2023-11-08",{"src":4503},"\u002Fassets\u002Fcontent\u002Fblog\u002Fth-custom-connectors.png",[4380,1284],[4473,4472,4506,4507],"JSON","connectors","notebooks\u002Ftutorials\u002Fschema-generation.ipynb",{"title":4510,"path":4511,"stem":4512,"meta":4513},"Dealing with JSON Data Type","\u002Fdevelopers\u002Fuser-guide\u002Fconnect\u002Fjson_type","2.developers\u002F4.user-guide\u002F20.connect\u002F70.json_type",{"date":4514,"thumbnail":4515,"tags":4516,"keywords":4517,"notebook_export_path":4518},"2023-12-22","\u002Fassets\u002Fcontent\u002Fblog\u002Fth-json.png",[4380,1284],[4506,4472,4473],"notebooks\u002Ftutorials\u002Fjson_type.ipynb",{"title":4520,"path":4521,"stem":4522,"meta":4523},"Switching from Batch to Streaming","\u002Fdevelopers\u002Fuser-guide\u002Fconnect\u002Fswitch-from-batch-to-streaming","2.developers\u002F4.user-guide\u002F20.connect\u002F80.switch-from-batch-to-streaming",{},{"title":4525,"path":4526,"stem":4527,"meta":4528},"Live Web Scraping","\u002Fdevelopers\u002Fuser-guide\u002Fconnect\u002Fpython-web-scraping","2.developers\u002F4.user-guide\u002F20.connect\u002F90.python-web-scraping",{"date":4529,"tags":4530,"keywords":4531,"tech_icons":4537,"thumbnail":4539,"deployment_tag":4540,"docker_github_link":4542},"2025-03-13",[4380,4507],[71,4532,4533,4534,4535,2269,4536],"scraping","WEB","Python","input","web scraping",[4538],"streamline:web","\u002Fassets\u002Fcontent\u002Fshowcases\u002Fweb_scraping\u002Fweb-scraping-th.png",[4541],"docker","https:\u002F\u002Fgithub.com\u002Fpathwaycom\u002Fpathway\u002Ftree\u002Fmain\u002Fexamples\u002Fprojects\u002Fweb-scraping",{"title":4544,"path":4545,"stem":4546,"children":4547,"page":4416},"Connectors","\u002Fdevelopers\u002Fuser-guide\u002Fconnect\u002Fconnectors","2.developers\u002F4.user-guide\u002F20.connect\u002F99.connectors",[4548,4564,4575,4587,4596,4615,4626,4639,4653,4661,4673,4683,4692,4704,4717],{"title":4549,"path":4550,"stem":4551,"meta":4552},"File System Connector","\u002Fdevelopers\u002Fuser-guide\u002Fconnect\u002Fconnectors\u002Ffs-connector","2.developers\u002F4.user-guide\u002F20.connect\u002F99.connectors\u002F05.fs-connector",{"date":4469,"tags":4553,"tech_icons":4554,"deployment_tag":4556,"keywords":4558,"notebook_export_path":4563},[4380,1284],[4555],"lets-icons:file-fill",[4557,4541],"jupyter",[71,4559,2307,4560,4535,4561,4562,2269],"file system","json","output","static","notebooks\u002Ftutorials\u002Ffs_connector.ipynb",{"title":4565,"path":2260,"stem":4566,"meta":4567},"CSV connectors","2.developers\u002F4.user-guide\u002F20.connect\u002F99.connectors\u002F10.csv_connectors",{"date":4568,"thumbnail":4569,"tags":4570,"keywords":4571,"tech_icons":4573},"2023-01-12","\u002Fassets\u002Fcontent\u002Fblog\u002Fth-csv-connectors.png",[4380,4507],[71,4572,4535,4561,4562,2269],"CSV",[4574],"mdi:file-csv",{"title":4576,"path":4577,"stem":4578,"meta":4579},"Sending alerts to Slack","\u002Fdevelopers\u002Fuser-guide\u002Fconnect\u002Fconnectors\u002Fslack_send_alerts","2.developers\u002F4.user-guide\u002F20.connect\u002F99.connectors\u002F100.slack_send_alerts",{"date":4580,"tags":4581,"keywords":4582,"tech_icons":4585},"2024-02-16",[4380,4507],[71,4583,4584,4561,2269],"Slack","alerts",[4586],"mdi:slack",{"title":4588,"path":4589,"stem":4590,"meta":4591},"Airbyte connectors","\u002Fdevelopers\u002Fuser-guide\u002Fconnect\u002Fconnectors\u002Fairbyte-connectors","2.developers\u002F4.user-guide\u002F20.connect\u002F99.connectors\u002F110.airbyte-connectors",{"tags":4592,"keywords":4593},[4380,4507],[71,4594,4595,4535,4562,2269],"Airbyte","cloud",{"title":4597,"path":4598,"stem":4599,"meta":4600},"Using Pathway Debezium Connector for MongoDB","\u002Fdevelopers\u002Fuser-guide\u002Fconnect\u002Fconnectors\u002Fmongodb-debezium","2.developers\u002F4.user-guide\u002F20.connect\u002F99.connectors\u002F115.mongodb-debezium",{"date":4601,"tags":4602,"keywords":4603,"tech_icons":4611,"deployment_tag":4613,"docker_github_link":4614,"hideInConnectorList":113},"2024-10-30",[4380,4507],[71,4604,4605,4606,4607,4608,4609,4610,4535,4561,2269],"database","MongoDB","CDC","Debezium","Kafka","Zookeeper","Docker",[4612],"material-symbols-light:database",[4541],"https:\u002F\u002Fgithub.com\u002Fpathwaycom\u002Fpathway\u002Ftree\u002Fmain\u002Fexamples\u002Fprojects\u002Fdebezium-mongodb-example",{"title":4616,"path":4617,"stem":4618,"meta":4619},"JSON Lines connectors","\u002Fdevelopers\u002Fuser-guide\u002Fconnect\u002Fconnectors\u002Fjsonlines-connector","2.developers\u002F4.user-guide\u002F20.connect\u002F99.connectors\u002F15.jsonlines-connector",{"date":4620,"tags":4621,"keywords":4622,"tech_icons":4624},"2024-02-20",[4380,4507],[71,4623,4506,4535,4561,4562,2269],"JSON Lines",[4625],"lets-icons:json",{"title":4627,"path":4628,"stem":4629,"meta":4630},"Database connectors","\u002Fdevelopers\u002Fuser-guide\u002Fconnect\u002Fconnectors\u002Fdatabase-connectors","2.developers\u002F4.user-guide\u002F20.connect\u002F99.connectors\u002F20.database-connectors",{"date":4631,"thumbnail":4632,"tags":4633,"keywords":4634,"tech_icons":4636,"deployment_tag":4637,"docker_github_link":4638},"2023-01-19","\u002Fassets\u002Fcontent\u002Fblog\u002Fth-database-connectors.png",[4380,4507],[71,4604,4635,4606,4607,4608,4609,4610,4535,4561,2269],"PostgreSQL",[4612],[4541],"https:\u002F\u002Fgithub.com\u002Fpathwaycom\u002Fpathway\u002Ftree\u002Fmain\u002Fexamples\u002Fprojects\u002Fdebezium-postgres-example",{"title":4640,"path":4641,"stem":4642,"meta":4643},"Connecting Pathway to NeonDB","\u002Fdevelopers\u002Fuser-guide\u002Fconnect\u002Fconnectors\u002Fneondb-connector","2.developers\u002F4.user-guide\u002F20.connect\u002F99.connectors\u002F23.neondb-connector",{"date":4644,"tags":4645,"keywords":4646,"tech_icons":4652,"hideInConnectorList":113},"2026-06-03",[4380,4507],[71,4604,4647,4648,4635,4649,4606,4650,4651,4535,4561,2269],"NeonDB","Neon","serverless","logical replication","SSL",[4612],{"title":4654,"path":4655,"stem":4656,"meta":4657},"Custom Python connectors","\u002Fdevelopers\u002Fuser-guide\u002Fconnect\u002Fconnectors\u002Fcustom-python-connectors","2.developers\u002F4.user-guide\u002F20.connect\u002F99.connectors\u002F30.custom-python-connectors",{"date":4658,"thumbnail":4503,"tags":4659,"keywords":4660},"2023-04-13",[4380,4507],[71,4534,4535,2269],{"title":4662,"path":4663,"stem":4664,"meta":4665},"Kafka connectors","\u002Fdevelopers\u002Fuser-guide\u002Fconnect\u002Fconnectors\u002Fkafka_connectors","2.developers\u002F4.user-guide\u002F20.connect\u002F99.connectors\u002F30.kafka_connectors",{"date":4666,"thumbnail":4667,"tags":4668,"tech_icons":4669,"deployment_tag":4671,"keywords":4672},"2023-01-15","\u002Fassets\u002Fcontent\u002Fblog\u002Fth-kafka-connectors.png",[4380,4507],[4670],"mdi:apache-kafka",[4541],[71,4608,4610,4535,4561,2269],{"title":4674,"path":4675,"stem":4676,"meta":4677},"NATS connectors","\u002Fdevelopers\u002Fuser-guide\u002Fconnect\u002Fconnectors\u002Fnats-connectors","2.developers\u002F4.user-guide\u002F20.connect\u002F99.connectors\u002F33.nats-connectors",{"date":4678,"tags":4679,"deployment_tag":4680,"keywords":4681},"2024-12-06",[4380,4507],[4541],[71,4682,4610,4535,4561,2269],"NATS",{"title":4684,"path":4685,"stem":4686,"meta":4687},"Python output connectors","\u002Fdevelopers\u002Fuser-guide\u002Fconnect\u002Fconnectors\u002Fpython-output-connectors","2.developers\u002F4.user-guide\u002F20.connect\u002F99.connectors\u002F35.python-output-connectors",{"date":4688,"thumbnail":4689,"tags":4690,"keywords":4691},"2023-08-31","\u002Fassets\u002Fcontent\u002Fblog\u002Fth-output-connector.png",[4380,4507],[71,4534,4561,2269],{"title":4693,"path":4694,"stem":4695,"meta":4696},"Google Drive connector","\u002Fdevelopers\u002Fuser-guide\u002Fconnect\u002Fconnectors\u002Fgdrive-connector","2.developers\u002F4.user-guide\u002F20.connect\u002F99.connectors\u002F70.gdrive-connector",{"date":4697,"thumbnail":4698,"tags":4699,"keywords":4700,"tech_icons":4702},"2023-12-14","\u002Fassets\u002Fcontent\u002Fblog\u002Fth-gdrive-connector.png",[4380,4507],[71,4701,4595,4535,4562,2269],"Google Drive",[4703],"simple-icons:googledrive",{"title":4705,"path":4706,"stem":4707,"meta":4708},"Switching from Kafka to Redpanda","\u002Fdevelopers\u002Fuser-guide\u002Fconnect\u002Fconnectors\u002Fswitching-to-redpanda","2.developers\u002F4.user-guide\u002F20.connect\u002F99.connectors\u002F80.switching-to-redpanda",{"date":4709,"thumbnail":4710,"tags":4711,"keywords":4712,"deployment_tag":4714,"tech_icons":4715,"docker_github_link":4716,"hideInConnectorList":113},"2023-03-24","\u002Fassets\u002Fcontent\u002Ftutorials\u002Fredpanda\u002Fth-Kafka_vs_Redpanda.png",[4380,4507],[71,4713,4608,4609,4610,4535,4561,2269],"Redpanda",[4541],[4670],"https:\u002F\u002Fgithub.com\u002Fpathwaycom\u002Fpathway\u002Ftree\u002Fmain\u002Fexamples\u002Fprojects\u002Fbest-movies-example\u002Fredpanda-version",{"title":4718,"path":4719,"stem":4720,"meta":4721},"Custom WebSockets connectors","\u002Fdevelopers\u002Fuser-guide\u002Fconnect\u002Fconnectors\u002Fwebsockets-connectors","2.developers\u002F4.user-guide\u002F20.connect\u002F99.connectors\u002F90.websockets-connectors",{"date":4722,"tags":4723,"keywords":4724,"tech_icons":4726},"2023-01-24",[4380,4507],[71,4725,4534,4535,4561,2269],"WebSockets",[4538],{"title":4728,"meta":4729,"path":4730,"stem":4731,"children":4732,"page":4416},"Transform",{},"\u002Fdevelopers\u002Fuser-guide\u002Fdata-transformation","2.developers\u002F4.user-guide\u002F30.data-transformation",[4733,4738,4751,4756,4762,4774,4790,4799,4814,4819],{"title":4734,"path":4735,"stem":4736,"meta":4737},"Table Operations Overview","\u002Fdevelopers\u002Fuser-guide\u002Fdata-transformation\u002Ftable-operations","2.developers\u002F4.user-guide\u002F30.data-transformation\u002F10.table-operations",{},{"title":4739,"path":4740,"stem":4741,"meta":4742},"Asynchronous Transformations","\u002Fdevelopers\u002Fuser-guide\u002Fdata-transformation\u002Fasynchronous-transformations","2.developers\u002F4.user-guide\u002F30.data-transformation\u002F100.asynchronous-transformations",{"date":4620,"thumbnail":86,"tags":4743,"keywords":4744,"notebook_export_path":4750},[4380,4381],[85,4745,4746,4747,4748,4749],"function","asynchronous","transformation","query","AsyncTransformer","notebooks\u002Ftutorials\u002Fasynctransformer.ipynb",{"title":4752,"path":1241,"stem":4753,"meta":4754},"Simple Join","2.developers\u002F4.user-guide\u002F30.data-transformation\u002F20.join-manual",{"notebook_export_path":4755},"notebooks\u002Ftutorials\u002Fjoin_manual.ipynb",{"title":4757,"path":4758,"stem":4759,"meta":4760},"Groupby Reduce","\u002Fdevelopers\u002Fuser-guide\u002Fdata-transformation\u002Fgroupby-reduce-manual","2.developers\u002F4.user-guide\u002F30.data-transformation\u002F30.groupby-reduce-manual",{"notebook_export_path":4761},"notebooks\u002Ftutorials\u002Fgroupby_reduce_manual.ipynb",{"title":4763,"path":4764,"stem":4765,"meta":4766},"Writing Stateful Reducers","\u002Fdevelopers\u002Fuser-guide\u002Fdata-transformation\u002Fcustom-reducers","2.developers\u002F4.user-guide\u002F30.data-transformation\u002F40.custom-reducers",{"date":4767,"thumbnail":4515,"tags":4768,"keywords":4769,"notebook_export_path":4773},"2024-01-17",[4380],[680,4770,4771,4772],"aggregate","sumofsquares","median","notebooks\u002Ftutorials\u002Fcustom_reducers.ipynb",{"title":4775,"path":4776,"stem":4777,"meta":4778},"Iterative Computations","\u002Fdevelopers\u002Fuser-guide\u002Fdata-transformation\u002Fiterate","2.developers\u002F4.user-guide\u002F30.data-transformation\u002F50.iterate",{"date":4779,"thumbnail":86,"tags":4780,"keywords":4781,"notebook_export_path":4789},"2023-12-28",[4380,4381],[4782,4783,4784,4785,4786,4787,4788],"iterate","iteration","iterative","updates","connected components","collatz conjecture","newton method","notebooks\u002Ftutorials\u002Fiterate.ipynb",{"title":5,"path":4388,"stem":4391,"children":4791,"meta":4796},[4792],{"title":5,"path":4388,"stem":4391,"meta":4793},{"date":4377,"thumbnail":4378,"tags":4794,"keywords":4795,"notebook_export_path":4387},[4380,4381],[4383,4384,275,4385,2009,4386],{"date":4377,"thumbnail":4378,"tags":4797,"keywords":4798,"notebook_export_path":4387},[4380,4381],[4383,4384,275,4385,2009,4386],{"title":4800,"path":4801,"stem":4802,"children":4803,"meta":4811},"Indexing from 'groupby' and Single-row Tables","\u002Fdevelopers\u002Fuser-guide\u002Fdata-transformation\u002Findexing-grouped-tables","2.developers\u002F4.user-guide\u002F30.data-transformation\u002F70.indexing-grouped-tables",[4804],{"title":4800,"path":4801,"stem":4802,"meta":4805},{"date":4806,"thumbnail":4378,"tags":4807,"keywords":4808},"2023-03-31",[4380,1284],[633,4809,4810],"ix_ref","single-row table",{"date":4806,"thumbnail":4378,"tags":4812,"keywords":4813},[4380,1284],[633,4809,4810],{"title":4815,"path":4816,"stem":4817,"meta":4818},"SQL API","\u002Fdevelopers\u002Fuser-guide\u002Fdata-transformation\u002Fsql","2.developers\u002F4.user-guide\u002F30.data-transformation\u002F80.sql",{"redirection":113},{"title":4820,"path":4821,"stem":4822,"meta":4823},"User-defined Functions","\u002Fdevelopers\u002Fuser-guide\u002Fdata-transformation\u002Fuser-defined-functions","2.developers\u002F4.user-guide\u002F30.data-transformation\u002F90.user-defined-functions",{"date":4824,"thumbnail":86,"tags":4825,"keywords":4826,"notebook_export_path":4831},"2024-02-21",[4380,4381],[85,4827,4745,4828,4747,4829,4830],"udf","apply","cache","timeout","notebooks\u002Ftutorials\u002Fudf.ipynb",{"title":4833,"path":4834,"stem":4835,"children":4836,"page":4416},"Temporal Data","\u002Fdevelopers\u002Fuser-guide\u002Ftemporal-data","2.developers\u002F4.user-guide\u002F40.temporal-data",[4837,4843,4848,4863,4875,4887,4901],{"title":4838,"path":4839,"stem":4840,"meta":4841},"Windowby Reduce","\u002Fdevelopers\u002Fuser-guide\u002Ftemporal-data\u002Fwindows-manual","2.developers\u002F4.user-guide\u002F40.temporal-data\u002F10.windows-manual",{"notebook_export_path":4842},"notebooks\u002Ftutorials\u002Fwindowby_manual.ipynb",{"title":4844,"path":4845,"stem":4846,"meta":4847},"Late Data and Cutoffs","\u002Fdevelopers\u002Fuser-guide\u002Ftemporal-data\u002Fbehaviors","2.developers\u002F4.user-guide\u002F40.temporal-data\u002F20.behaviors",{},{"title":4849,"path":4850,"stem":4851,"meta":4852},"Controlling Temporal Behavior of Windows","\u002Fdevelopers\u002Fuser-guide\u002Ftemporal-data\u002Fwindows_with_behaviors","2.developers\u002F4.user-guide\u002F40.temporal-data\u002F30.windows_with_behaviors",{"date":4853,"thumbnail":4854,"keywords":4855,"notebook_export_path":4862},"2024-01-08","assets\u002Fcontent\u002Ftutorials\u002Fclickstream_window_join\u002Fclickstream-window-join-th.png",[4856,4857,4858,4859,4860,4861],"windowby","behavior","late data","delay","cutoff","out-of-order data","notebooks\u002Ftutorials\u002Fwindows_temporal_behavior.ipynb",{"title":4864,"path":4865,"stem":4866,"meta":4867},"ASOF Join","\u002Fdevelopers\u002Fuser-guide\u002Ftemporal-data\u002Fasof-join","2.developers\u002F4.user-guide\u002F40.temporal-data\u002F40.asof-join",{"date":4868,"thumbnail":4869,"tags":4870,"keywords":4871,"notebook_export_path":4874},"2023-05-24","\u002Fassets\u002Fcontent\u002Ftutorials\u002Ffinance_ts_asof_join\u002Fasof-join-tutorial-th.png",[4380,4381],[4385,4872,4873],"stock prices","financial data analysis","notebooks\u002Ftutorials\u002Fasof_join.ipynb",{"title":4876,"path":4877,"stem":4878,"meta":4879},"Interval Join","\u002Fdevelopers\u002Fuser-guide\u002Ftemporal-data\u002Finterval-join","2.developers\u002F4.user-guide\u002F40.temporal-data\u002F50.interval-join",{"date":4880,"thumbnail":4881,"tags":4882,"keywords":4883,"notebook_export_path":4886},"2023-05-22","assets\u002Fcontent\u002Ftutorials\u002Ffleet_eta_interval_join\u002Ffleet-eta-interval-join-th.png",[4380,4381],[4884,4885],"interval join","ETA","notebooks\u002Ftutorials\u002Finterval_join.ipynb",{"title":4888,"path":4889,"stem":4890,"meta":4891},"Window Join","\u002Fdevelopers\u002Fuser-guide\u002Ftemporal-data\u002Fwindow-join","2.developers\u002F4.user-guide\u002F40.temporal-data\u002F60.window-join",{"date":4892,"thumbnail":4893,"tags":4894,"keywords":4895,"notebook_export_path":4900},"2023-06-14","\u002Fassets\u002Fcontent\u002Ftutorials\u002Fclickstream_window_join\u002Fclickstream-window-join-th.png",[4380,4381],[4896,4897,4898,4899],"window","behavior analysis","clickstream","conversion rate","notebooks\u002Ftutorials\u002Fwindow_join.ipynb",{"title":4902,"path":4903,"stem":4904,"meta":4905},"Controlling Temporal Behavior of Interval Join","\u002Fdevelopers\u002Fuser-guide\u002Ftemporal-data\u002Ftemporal_behavior","2.developers\u002F4.user-guide\u002F40.temporal-data\u002F70.temporal_behavior",{"date":4906,"thumbnail":4881,"tags":4907,"keywords":4908,"notebook_export_path":4909},"2023-11-28",[4380,4381],[4884,4857,4858,4859,4860,4861],"notebooks\u002Ftutorials\u002Finterval_join_temporal_behavior.ipynb",{"title":4911,"meta":4912,"path":4913,"stem":4914,"children":4915,"page":4416},"LLM tooling",{},"\u002Fdevelopers\u002Fuser-guide\u002Fllm-xpack","2.developers\u002F4.user-guide\u002F50.llm-xpack",[4916,4928,4937,4946,4961,4973,4985,4997,5007,5017,5027],{"title":4917,"path":4918,"stem":4919,"meta":4920},"Introduction to the LLM xpack","\u002Fdevelopers\u002Fuser-guide\u002Fllm-xpack\u002Foverview","2.developers\u002F4.user-guide\u002F50.llm-xpack\u002F10.overview",{"date":4921,"thumbnail":86,"tags":4922,"keywords":4924},"2024-02-14",[4380,4923],"LLM",[4923,4925,4926,4927],"GPT","OpenAI","Gemini",{"title":4929,"path":4930,"stem":4931,"meta":4932},"Create your own RAG","\u002Fdevelopers\u002Fuser-guide\u002Fllm-xpack\u002Fllm-app","2.developers\u002F4.user-guide\u002F50.llm-xpack\u002F20.llm-app",{"date":4933,"thumbnail":86,"tags":4934,"keywords":4936},"2025-03-28",[4380,4923,4935],"RAG",[4923,4925,4926,4384],{"title":4938,"path":4939,"stem":4940,"meta":4941},"Pathway Live Data Framework as a Vector Store","\u002Fdevelopers\u002Fuser-guide\u002Fllm-xpack\u002Flive-data-framework-vector-store","2.developers\u002F4.user-guide\u002F50.llm-xpack\u002F25.live-data-framework-vector-store",{"date":4942,"thumbnail":86,"tags":4943,"keywords":4944},"2025-05-07",[4380,4923,4935],[4923,4925,4926,4384,4945],"Vector Store",{"title":4947,"path":4948,"stem":4949,"children":4950,"meta":4958},"Document Indexing","\u002Fdevelopers\u002Fuser-guide\u002Fllm-xpack\u002Fdocs-indexing","2.developers\u002F4.user-guide\u002F50.llm-xpack\u002F30.docs-indexing",[4951],{"title":4947,"path":4948,"stem":4949,"meta":4952},{"date":4953,"thumbnail":86,"tags":4954,"keywords":4957},"2025-01-13",[4380,4384,4955,4956],"document storage","retrieval",[4923,4925,4926,4927],{"date":4953,"thumbnail":86,"tags":4959,"keywords":4960},[4380,4384,4955,4956],[4923,4925,4926,4927],{"title":4962,"path":4963,"stem":4964,"meta":4965},"Pathway Live Data Framework MCP Server","\u002Fdevelopers\u002Fuser-guide\u002Fllm-xpack\u002Flive-data-framework-mcp-server","2.developers\u002F4.user-guide\u002F50.llm-xpack\u002F40.live-data-framework-mcp-server",{"date":4966,"thumbnail":86,"tags":4967,"keywords":4968},"2025-08-01",[4380,4381],[4969,4970,4971,4972],"MCP","MCP server","API","protocol",{"title":4974,"path":4975,"stem":4976,"meta":4977},"Claude Desktop","\u002Fdevelopers\u002Fuser-guide\u002Fllm-xpack\u002Flive-data-framework-mcp-claude-desktop","2.developers\u002F4.user-guide\u002F50.llm-xpack\u002F41.live-data-framework-mcp-claude-desktop",{"date":4978,"thumbnail":86,"tags":4979,"keywords":4981},"2025-08-19",[4380,4381,4980],"claude",[4969,4974,4982,4983,4984],"real-time data","document store","statistics",{"title":4986,"path":4987,"stem":4988,"meta":4989},"Parsers","\u002Fdevelopers\u002Fuser-guide\u002Fllm-xpack\u002Fparsers","2.developers\u002F4.user-guide\u002F50.llm-xpack\u002F50.parsers",{"date":4990,"tags":4991,"keywords":4992},"2024-06-04",[4380,4923],[4923,4993,4994,4995,4996],"unstructured","docling","parsers","ocr",{"title":4998,"path":4999,"stem":5000,"meta":5001},"Chunking text","\u002Fdevelopers\u002Fuser-guide\u002Fllm-xpack\u002Fsplitters","2.developers\u002F4.user-guide\u002F50.llm-xpack\u002F60.splitters",{"date":5002,"thumbnail":86,"tags":5003,"keywords":5006},"2025-02-04",[5004,5005],"splitters","chunking",[4995,5005],{"title":5008,"path":5009,"stem":5010,"meta":5011},"Embedders","\u002Fdevelopers\u002Fuser-guide\u002Fllm-xpack\u002Fembedders","2.developers\u002F4.user-guide\u002F50.llm-xpack\u002F70.embedders",{"date":5002,"thumbnail":86,"tags":5012,"keywords":5014},[4380,5013],"embedder",[4923,4925,4926,4927,5015,5016],"LiteLLM","Embedder",{"title":5018,"path":5019,"stem":5020,"meta":5021},"LLM Chats","\u002Fdevelopers\u002Fuser-guide\u002Fllm-xpack\u002Fllm-chats","2.developers\u002F4.user-guide\u002F50.llm-xpack\u002F80.llm-chats",{"date":5022,"thumbnail":86,"tags":5023,"keywords":5025},"2025-01-30",[4380,4923,5024,5018],"LLM Wrappers",[4923,4925,4926,4927,5015,5026],"Wrapper",{"title":5028,"path":5029,"stem":5030,"meta":5031},"Rerankers","\u002Fdevelopers\u002Fuser-guide\u002Fllm-xpack\u002Frerankers","2.developers\u002F4.user-guide\u002F50.llm-xpack\u002F90.rerankers",{"date":5002,"thumbnail":86,"tags":5032,"keywords":5034},[4380,5033],"reranker",[4923,5035],"Reranker",{"title":5037,"meta":5038,"path":5039,"stem":5040,"children":5041,"page":4416},"Deploy",{},"\u002Fdevelopers\u002Fuser-guide\u002Fdeployment","2.developers\u002F4.user-guide\u002F60.deployment",[5042,5047,5052,5069,5085,5090,5095,5100,5107,5112,5117,5130,5142,5147,5158],{"title":5043,"path":5044,"stem":5045,"meta":5046},"Cloud Deployment of Pathway Live Data Framework","\u002Fdevelopers\u002Fuser-guide\u002Fdeployment\u002Fcloud-deployment","2.developers\u002F4.user-guide\u002F60.deployment\u002F10.cloud-deployment",{},{"title":5048,"path":5049,"stem":5050,"meta":5051},"Deploy to GCP","\u002Fdevelopers\u002Fuser-guide\u002Fdeployment\u002Fgcp-deploy","2.developers\u002F4.user-guide\u002F60.deployment\u002F15.gcp-deploy",{},{"title":5053,"path":5054,"stem":5055,"meta":5056},"Deploy to AWS Cloud","\u002Fdevelopers\u002Fuser-guide\u002Fdeployment\u002Faws-fargate-deploy","2.developers\u002F4.user-guide\u002F60.deployment\u002F20.aws-fargate-deploy",{"date":5057,"tags":5058,"thumbnail":5061,"keywords":5063,"docker_github_link":5068,"deployButtons":4416},"2024-08-16",[5059,5060],"showcase","data-pipeline",{"src":5062},"\u002Fassets\u002Fcontent\u002Fdocumentation\u002Faws\u002Faws-fargate-overview-th.png",[5064,5065,5066,4610,5067],"AWS","Fargate","cloud deployment","AWS Fargate","https:\u002F\u002Fgithub.com\u002Fpathwaycom\u002Fpathway\u002Ftree\u002Fmain\u002Fexamples\u002Fprojects\u002Faws-fargate-deploy",{"title":5070,"path":5071,"stem":5072,"meta":5073},"Deploy to Azure","\u002Fdevelopers\u002Fuser-guide\u002Fdeployment\u002Fazure-aci-deploy","2.developers\u002F4.user-guide\u002F60.deployment\u002F25.azure-aci-deploy",{"date":5074,"tags":5075,"thumbnail":5076,"keywords":5078,"docker_github_link":5084,"deployButtons":4416},"2024-11-20",[5059,5060],{"src":5077,"contain":113},"\u002Fassets\u002Fcontent\u002Fdocumentation\u002Fazure\u002Fazure-aci-overview-th.png",[5079,5080,5066,4610,5081,5082,5083],"Azure","ACI","Azure ACI","Azure Marketplace","deployment","https:\u002F\u002Fgithub.com\u002Fpathwaycom\u002Fpathway\u002Ftree\u002Fmain\u002Fexamples\u002Fprojects\u002Fazure-aci-deploy",{"title":5086,"path":5087,"stem":5088,"meta":5089},"Deploy with Render","\u002Fdevelopers\u002Fuser-guide\u002Fdeployment\u002Frender-deploy","2.developers\u002F4.user-guide\u002F60.deployment\u002F30.render-deploy",{},{"title":5091,"path":5092,"stem":5093,"meta":5094},"Deploy to Nebius AI Cloud","\u002Fdevelopers\u002Fuser-guide\u002Fdeployment\u002Fnebius-deploy","2.developers\u002F4.user-guide\u002F60.deployment\u002F32.nebius-deploy",{},{"title":5096,"path":5097,"stem":5098,"meta":5099},"Notebook-to-Docker Conversion","\u002Fdevelopers\u002Fuser-guide\u002Fdeployment\u002Fjupyter-docker","2.developers\u002F4.user-guide\u002F60.deployment\u002F35.jupyter-docker",{},{"title":5101,"path":5102,"stem":5103,"meta":5104},"Tutorial: From Jupyter to Deploy","\u002Fdevelopers\u002Fuser-guide\u002Fdeployment\u002Ffrom-jupyter-to-deploy","2.developers\u002F4.user-guide\u002F60.deployment\u002F40.from-jupyter-to-deploy",{"date":5105,"project_github_link":5106},"2023-11-29","https:\u002F\u002Fgithub.com\u002Fpathwaycom\u002Fpathway\u002Ftree\u002Fmain\u002Fexamples\u002Fprojects\u002Ffrom_jupyter_to_deploy",{"title":5108,"path":5109,"stem":5110,"meta":5111},"CI\u002FCD","\u002Fdevelopers\u002Fuser-guide\u002Fdeployment\u002Fintegration","2.developers\u002F4.user-guide\u002F60.deployment\u002F45.integration",{},{"title":5113,"path":5114,"stem":5115,"meta":5116},"Docker Deployment of Pathway Live Data Framework","\u002Fdevelopers\u002Fuser-guide\u002Fdeployment\u002Fdocker-deployment","2.developers\u002F4.user-guide\u002F60.deployment\u002F5.docker-deployment",{},{"title":5118,"path":5119,"stem":5120,"meta":5121},"Monitoring a Pathway Live Data Framework Instance","\u002Fdevelopers\u002Fuser-guide\u002Fdeployment\u002Flive-data-framework-monitoring","2.developers\u002F4.user-guide\u002F60.deployment\u002F50.live-data-framework-monitoring",{"date":5122,"thumbnail":5123,"tags":5124,"keywords":5125},"2024-05-27","\u002Fassets\u002Fcontent\u002Fblog\u002Fth-prometheus.png",[4380,4381],[5126,5127,5128,5129],"monitoring","OpenTelemetry","Grafana","metrics",{"title":5131,"path":5132,"stem":5133,"meta":5134},"Pathway Live Data Framework Web Dashboard","\u002Fdevelopers\u002Fuser-guide\u002Fdeployment\u002Fweb-dashboard","2.developers\u002F4.user-guide\u002F60.deployment\u002F52.web-dashboard",{"date":5135,"tags":5136,"keywords":5137},"2026-01-13",[4380,4381],[5138,5139,5126,5140,5141,5129],"Web Dashboard","UI","graph","charts",{"title":5143,"path":5144,"stem":5145,"meta":5146},"Persistence in Pathway Live Data Framework","\u002Fdevelopers\u002Fuser-guide\u002Fdeployment\u002Fpersistence","2.developers\u002F4.user-guide\u002F60.deployment\u002F55.persistence",{},{"title":5148,"path":5149,"stem":5150,"meta":5151},"Persistence in Pathway Live Data Framework: How to Resume the Interrupted Computation","\u002Fdevelopers\u002Fuser-guide\u002Fdeployment\u002Fpersistence_recovery","2.developers\u002F4.user-guide\u002F60.deployment\u002F60.persistence_recovery",{"date":5152,"thumbnail":86,"tags":5153,"keywords":5155},"2023-11-02",[4380,4381,5154],"dataflow management",[5156,5157],"persistence","recovery",{"title":5159,"path":5160,"stem":5161,"meta":5162},"Persistence in Pathway Live Data Framework: How to Add New Data without Full Computation Restart","\u002Fdevelopers\u002Fuser-guide\u002Fdeployment\u002Fpersistence_restart_with_new_data","2.developers\u002F4.user-guide\u002F60.deployment\u002F65.persistence_restart_with_new_data",{"date":5163,"thumbnail":86,"tags":5164,"keywords":5165},"2023-11-14",[4380,4381,5154],[5156,5166,5167],"optimization","restart",{"title":5169,"path":5170,"stem":5171,"children":5172,"page":4416},"Migrating","\u002Fdevelopers\u002Fuser-guide\u002Fmigrating","2.developers\u002F4.user-guide\u002F70.migrating",[5173,5179],{"title":5174,"path":5175,"stem":5176,"meta":5177},"Coming from Pandas","\u002Fdevelopers\u002Fuser-guide\u002Fmigrating\u002Fmigrate-from-pandas","2.developers\u002F4.user-guide\u002F70.migrating\u002F10.migrate-from-pandas",{"notebook_export_path":5178},"notebooks\u002Ftutorials\u002Ffrom_pandas.ipynb",{"title":5180,"path":5181,"stem":5182,"meta":5183},"Pandas Cheat Sheet","\u002Fdevelopers\u002Fuser-guide\u002Fmigrating\u002Fpandas-cheat-sheet","2.developers\u002F4.user-guide\u002F70.migrating\u002F20.pandas-cheat-sheet",{},{"title":5185,"path":5186,"stem":5187,"children":5188,"page":4416},"Advanced","\u002Fdevelopers\u002Fuser-guide\u002Fadvanced","2.developers\u002F4.user-guide\u002F80.advanced",[5189,5194,5204,5210,5223,5228,5233,5238],{"title":5190,"path":5191,"stem":5192,"meta":5193},"Architecture","\u002Fdevelopers\u002Fuser-guide\u002Fadvanced\u002Fworker-architecture","2.developers\u002F4.user-guide\u002F80.advanced\u002F10.worker-architecture",{},{"title":5195,"path":5196,"stem":5197,"meta":5198},"Setting up Cache in Asynchronous Transformations","\u002Fdevelopers\u002Fuser-guide\u002Fadvanced\u002Ffunction_calls_caching","2.developers\u002F4.user-guide\u002F80.advanced\u002F20.function_calls_caching",{"date":5199,"thumbnail":86,"tags":5200,"keywords":5201},"2023-11-30",[4380,4381,5154],[5156,5166,5202,5203],"async_transformer","caching",{"title":5205,"path":5206,"stem":5207,"meta":5208},"Data Model Consistency","\u002Fdevelopers\u002Fuser-guide\u002Fadvanced\u002Fconsistency","2.developers\u002F4.user-guide\u002F80.advanced\u002F30.consistency",{"notebook_export_path":5209},"notebooks\u002Ftutorials\u002Fconsistency.ipynb",{"title":5211,"path":5212,"stem":5213,"meta":5214},"Writing declarative over imperative pipelines","\u002Fdevelopers\u002Fuser-guide\u002Fadvanced\u002Fdeclarative_vs_imperative","2.developers\u002F4.user-guide\u002F80.advanced\u002F40.declarative_vs_imperative",{"date":5215,"thumbnail":86,"tags":5216,"keywords":5217,"notebook_export_path":5222},"2025-11-25",[4380,4381],[5218,5219,5220,5221,4782],"declarative","imperative","ordered","splitting","notebooks\u002Ftutorials\u002Fdeclarative_vs_imperative.ipynb",{"title":5224,"path":5225,"stem":5226,"meta":5227},"Best Practices","\u002Fdevelopers\u002Fuser-guide\u002Fadvanced\u002Fbest-practices","2.developers\u002F4.user-guide\u002F80.advanced\u002F5.best-practices",{},{"title":5229,"path":5230,"stem":5231,"meta":5232},"How Pathway Live Data Framework Connectors Work","\u002Fdevelopers\u002Fuser-guide\u002Fadvanced\u002Fhow-live-data-framework-connectors-work","2.developers\u002F4.user-guide\u002F80.advanced\u002F50.how-live-data-framework-connectors-work",{},{"title":5234,"path":5235,"stem":5236,"meta":5237},"Dynamic Worker Scaling","\u002Fdevelopers\u002Fuser-guide\u002Fadvanced\u002Fworker_count_scaling","2.developers\u002F4.user-guide\u002F80.advanced\u002F60.worker_count_scaling",{},{"title":5239,"path":5240,"stem":5241,"meta":5242},"Running on Multiple Machines","\u002Fdevelopers\u002Fuser-guide\u002Fadvanced\u002Frunning_on_multiple_machines","2.developers\u002F4.user-guide\u002F80.advanced\u002F70.running_on_multiple_machines",{},{"title":5244,"meta":5245,"path":5246,"stem":5247,"children":5248,"page":4416},"Help And Updates",{},"\u002Fdevelopers\u002Fuser-guide\u002Fdevelopment","2.developers\u002F4.user-guide\u002F90.development",[5249,5254,5259],{"title":5250,"path":5251,"stem":5252,"meta":5253},"Troubleshooting","\u002Fdevelopers\u002Fuser-guide\u002Fdevelopment\u002Ftroubleshooting","2.developers\u002F4.user-guide\u002F90.development\u002F10.troubleshooting",{},{"title":5255,"path":5256,"stem":5257,"meta":5258},"Changelog","\u002Fdevelopers\u002Fuser-guide\u002Fdevelopment\u002Fchangelog","2.developers\u002F4.user-guide\u002F90.development\u002F20.changelog",{"toc":4416},{"title":5260,"path":5261,"stem":5262,"meta":5263},"Get help","\u002Fdevelopers\u002Fuser-guide\u002Fdevelopment\u002Fget-help","2.developers\u002F4.user-guide\u002F90.development\u002F30.get-help",{},{"title":5265,"meta":5266,"path":5267,"stem":5268,"children":5269,"page":4416},"API docs",{},"\u002Fdevelopers\u002Fapi-docs","2.developers\u002F5.API-docs",[5270,5275,5280,5286,5291,5296,5301,5369,5374,5379,5384,5392,5580,5585],{"title":5271,"path":5272,"stem":5273,"meta":5274},"Pathway Live Data Framework API","\u002Fdevelopers\u002Fapi-docs\u002Fpathway","2.developers\u002F5.API-docs\u002F1.pathway",{"sidebar":4971},{"title":5276,"path":5277,"stem":5278,"meta":5279},"pw.reducers","\u002Fdevelopers\u002Fapi-docs\u002Freducers","2.developers\u002F5.API-docs\u002F10.reducers",{"sidebar":4971},{"title":5281,"path":5282,"stem":5283,"meta":5284},"pw.sql","\u002Fdevelopers\u002Fapi-docs\u002Fsql-api","2.developers\u002F5.API-docs\u002F11.SQL-API",{"notebook_export_path":5285},"notebooks\u002Ftutorials\u002Fsql_api.ipynb",{"title":5287,"path":5288,"stem":5289,"meta":5290},"pw.temporal","\u002Fdevelopers\u002Fapi-docs\u002Ftemporal","2.developers\u002F5.API-docs\u002F12.temporal",{"sidebar":4971},{"title":5292,"path":5293,"stem":5294,"meta":5295},"pw.udfs","\u002Fdevelopers\u002Fapi-docs\u002Fudfs","2.developers\u002F5.API-docs\u002F13.udfs",{"sidebar":4971},{"title":5297,"path":5298,"stem":5299,"meta":5300},"pw.xpacks.connectors","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-xpacks-sharepoint","2.developers\u002F5.API-docs\u002F14.pathway-xpacks-sharepoint",{"sidebar":4971},{"title":5302,"path":5303,"stem":5304,"children":5305,"meta":5368},"pw.xpacks.llm","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-xpacks-llm","2.developers\u002F5.API-docs\u002F15.pathway-xpacks-llm\u002Findex",[5306,5308,5313,5318,5323,5328,5333,5338,5343,5348,5353,5358,5363],{"title":5302,"path":5303,"stem":5304,"meta":5307},{"sidebar":4971},{"title":5309,"path":5310,"stem":5311,"meta":5312},"pw.xpacks.llm.llms","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-xpacks-llm\u002Fllms","2.developers\u002F5.API-docs\u002F15.pathway-xpacks-llm\u002F1.llms",{"sidebar":4971},{"title":5314,"path":5315,"stem":5316,"meta":5317},"pw.xpacks.llm.servers","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-xpacks-llm\u002Fservers","2.developers\u002F5.API-docs\u002F15.pathway-xpacks-llm\u002F10.servers",{"sidebar":4971},{"title":5319,"path":5320,"stem":5321,"meta":5322},"pw.xpacks.llm.utils","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-xpacks-llm\u002Futils","2.developers\u002F5.API-docs\u002F15.pathway-xpacks-llm\u002F11.utils",{"sidebar":4971},{"title":5324,"path":5325,"stem":5326,"meta":5327},"pw.xpacks.llm.mcp_server","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-xpacks-llm\u002Fmcp_server","2.developers\u002F5.API-docs\u002F15.pathway-xpacks-llm\u002F12.mcp_server",{"sidebar":4971},{"title":5329,"path":5330,"stem":5331,"meta":5332},"pw.xpacks.llm.embedders","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-xpacks-llm\u002Fembedders","2.developers\u002F5.API-docs\u002F15.pathway-xpacks-llm\u002F2.embedders",{"sidebar":4971},{"title":5334,"path":5335,"stem":5336,"meta":5337},"pw.xpacks.llm.parsers","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-xpacks-llm\u002Fparsers","2.developers\u002F5.API-docs\u002F15.pathway-xpacks-llm\u002F3.parsers",{"sidebar":4971},{"title":5339,"path":5340,"stem":5341,"meta":5342},"pw.xpacks.llm.splitters","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-xpacks-llm\u002Fsplitters","2.developers\u002F5.API-docs\u002F15.pathway-xpacks-llm\u002F4.splitters",{"sidebar":4971},{"title":5344,"path":5345,"stem":5346,"meta":5347},"pw.xpacks.llm.vector_store","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-xpacks-llm\u002Fvectorstore","2.developers\u002F5.API-docs\u002F15.pathway-xpacks-llm\u002F5.vectorstore",{"sidebar":4971},{"title":5349,"path":5350,"stem":5351,"meta":5352},"pw.xpacks.llm.document_store","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-xpacks-llm\u002Fdocument_store","2.developers\u002F5.API-docs\u002F15.pathway-xpacks-llm\u002F6.document_store",{"sidebar":4971},{"title":5354,"path":5355,"stem":5356,"meta":5357},"pw.xpacks.llm.question_answering","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-xpacks-llm\u002Fquestion_answering","2.developers\u002F5.API-docs\u002F15.pathway-xpacks-llm\u002F7.question_answering",{"sidebar":4971},{"title":5359,"path":5360,"stem":5361,"meta":5362},"pw.xpacks.llm.prompts","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-xpacks-llm\u002Fprompts","2.developers\u002F5.API-docs\u002F15.pathway-xpacks-llm\u002F8.prompts",{"sidebar":4971},{"title":5364,"path":5365,"stem":5366,"meta":5367},"pw.xpacks.llm.rerankers","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-xpacks-llm\u002Frerankers","2.developers\u002F5.API-docs\u002F15.pathway-xpacks-llm\u002F9.rerankers",{"sidebar":4971},{"sidebar":4971},{"title":5370,"path":5371,"stem":5372,"meta":5373},"pw.Table","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-table","2.developers\u002F5.API-docs\u002F2.pathway-table",{"sidebar":4971},{"title":5375,"path":5376,"stem":5377,"meta":5378},"pw.debug","\u002Fdevelopers\u002Fapi-docs\u002Fdebug","2.developers\u002F5.API-docs\u002F4.debug",{"sidebar":4971},{"title":5380,"path":5381,"stem":5382,"meta":5383},"pw.demo","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-demo","2.developers\u002F5.API-docs\u002F5.pathway-demo",{"sidebar":4971},{"title":5385,"path":5386,"stem":5387,"children":5388,"meta":5391},"pw.indexing","\u002Fdevelopers\u002Fapi-docs\u002Findexing","2.developers\u002F5.API-docs\u002F6.indexing",[5389],{"title":5385,"path":5386,"stem":5387,"meta":5390},{"sidebar":4971},{"sidebar":4971},{"title":5393,"path":5394,"stem":5395,"children":5396,"meta":5579},"pw.io","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io","2.developers\u002F5.API-docs\u002F7.pathway-io\u002Findex",[5397,5399,5404,5409,5414,5419,5424,5429,5434,5439,5444,5449,5454,5459,5464,5469,5474,5479,5484,5489,5494,5499,5504,5509,5514,5519,5524,5529,5534,5539,5544,5549,5554,5559,5564,5569,5574],{"title":5393,"path":5394,"stem":5395,"meta":5398},{"sidebar":4971},{"title":5400,"path":5401,"stem":5402,"meta":5403},"pw.io.airbyte","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fairbyte","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F110.airbyte",{"sidebar":4971},{"title":5405,"path":5406,"stem":5407,"meta":5408},"pw.io.bigquery","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fbigquery","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F120.bigquery",{"sidebar":4971},{"title":5410,"path":5411,"stem":5412,"meta":5413},"pw.io.clickhouse","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fclickhouse","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F130.clickhouse",{"sidebar":4971},{"title":5415,"path":5416,"stem":5417,"meta":5418},"pw.io.csv","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fcsv","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F140.csv",{"sidebar":4971},{"title":5420,"path":5421,"stem":5422,"meta":5423},"pw.io.debezium","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fdebezium","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F150.debezium",{"sidebar":4971},{"title":5425,"path":5426,"stem":5427,"meta":5428},"pw.io.deltalake","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fdeltalake","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F160.deltalake",{"sidebar":4971},{"title":5430,"path":5431,"stem":5432,"meta":5433},"pw.io.dynamodb","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fdynamodb","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F170.dynamodb",{"sidebar":4971},{"title":5435,"path":5436,"stem":5437,"meta":5438},"pw.io.elasticsearch","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Felasticsearch","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F180.elasticsearch",{"sidebar":4971},{"title":5440,"path":5441,"stem":5442,"meta":5443},"pw.io.fs","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Ffs","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F190.fs",{"sidebar":4971},{"title":5445,"path":5446,"stem":5447,"meta":5448},"pw.io.gdrive","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fgdrive","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F200.gdrive",{"sidebar":4971},{"title":5450,"path":5451,"stem":5452,"meta":5453},"pw.io.http","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fhttp","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F210.http",{"sidebar":4971},{"title":5455,"path":5456,"stem":5457,"meta":5458},"pw.io.iceberg","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Ficeberg","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F220.iceberg",{"sidebar":4971},{"title":5460,"path":5461,"stem":5462,"meta":5463},"pw.io.jsonlines","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fjsonlines","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F230.jsonlines",{"sidebar":4971},{"title":5465,"path":5466,"stem":5467,"meta":5468},"pw.io.kafka","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fkafka","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F240.kafka",{"sidebar":4971},{"title":5470,"path":5471,"stem":5472,"meta":5473},"pw.io.kinesis","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fkinesis","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F250.kinesis",{"sidebar":4971},{"title":5475,"path":5476,"stem":5477,"meta":5478},"pw.io.leann","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fleann","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F260.leann",{"sidebar":4971},{"title":5480,"path":5481,"stem":5482,"meta":5483},"pw.io.logstash","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Flogstash","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F270.logstash",{"sidebar":4971},{"title":5485,"path":5486,"stem":5487,"meta":5488},"pw.io.milvus","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fmilvus","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F280.milvus",{"sidebar":4971},{"title":5490,"path":5491,"stem":5492,"meta":5493},"pw.io.minio","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fminio","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F290.minio",{"sidebar":4971},{"title":5495,"path":5496,"stem":5497,"meta":5498},"pw.io.mongodb","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fmongodb","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F300.mongodb",{"sidebar":4971},{"title":5500,"path":5501,"stem":5502,"meta":5503},"pw.io.mqtt","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fmqtt","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F310.mqtt",{"sidebar":4971},{"title":5505,"path":5506,"stem":5507,"meta":5508},"pw.io.mssql","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fmssql","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F320.mssql",{"sidebar":4971},{"title":5510,"path":5511,"stem":5512,"meta":5513},"pw.io.mysql","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fmysql","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F330.mysql",{"sidebar":4971},{"title":5515,"path":5516,"stem":5517,"meta":5518},"pw.io.nats","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fnats","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F340.nats",{"sidebar":4971},{"title":5520,"path":5521,"stem":5522,"meta":5523},"pw.io.null","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fnull","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F350.null",{"sidebar":4971},{"title":5525,"path":5526,"stem":5527,"meta":5528},"pw.io.plaintext","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fplaintext","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F360.plaintext",{"sidebar":4971},{"title":5530,"path":5531,"stem":5532,"meta":5533},"pw.io.postgres","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fpostgres","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F370.postgres",{"sidebar":4971},{"title":5535,"path":5536,"stem":5537,"meta":5538},"pw.io.pubsub","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fpubsub","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F380.pubsub",{"sidebar":4971},{"title":5540,"path":5541,"stem":5542,"meta":5543},"pw.io.pyfilesystem","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fpyfilesystem","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F390.pyfilesystem",{"sidebar":4971},{"title":5545,"path":5546,"stem":5547,"meta":5548},"pw.io.python","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fpython","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F400.python",{"sidebar":4971},{"title":5550,"path":5551,"stem":5552,"meta":5553},"pw.io.questdb","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fquestdb","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F410.questdb",{"sidebar":4971},{"title":5555,"path":5556,"stem":5557,"meta":5558},"pw.io.rabbitmq","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Frabbitmq","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F420.rabbitmq",{"sidebar":4971},{"title":5560,"path":5561,"stem":5562,"meta":5563},"pw.io.redpanda","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fredpanda","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F430.redpanda",{"sidebar":4971},{"title":5565,"path":5566,"stem":5567,"meta":5568},"pw.io.s3","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fs3","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F440.s3",{"sidebar":4971},{"title":5570,"path":5571,"stem":5572,"meta":5573},"pw.io.slack","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fslack","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F450.slack",{"sidebar":4971},{"title":5575,"path":5576,"stem":5577,"meta":5578},"pw.io.sqlite","\u002Fdevelopers\u002Fapi-docs\u002Fpathway-io\u002Fsqlite","2.developers\u002F5.API-docs\u002F7.pathway-io\u002F460.sqlite",{"sidebar":4971},{"sidebar":4971},{"title":5581,"path":5582,"stem":5583,"meta":5584},"pw.ml","\u002Fdevelopers\u002Fapi-docs\u002Fml","2.developers\u002F5.API-docs\u002F8.ML",{"sidebar":4971},{"title":5586,"path":5587,"stem":5588,"meta":5589},"pw.persistence","\u002Fdevelopers\u002Fapi-docs\u002Fpersistence-api","2.developers\u002F5.API-docs\u002F9.persistence-api",{"sidebar":4971},{"title":5591,"path":5592,"stem":5593,"children":5594,"meta":6334},"Pathway Live Data Framework Templates","\u002Fdevelopers\u002Ftemplates","2.developers\u002F7.templates\u002F1.index",[5595,5597,5602,5607,5612,5616,5637,5676,5702,6133],{"title":5591,"path":5592,"stem":5593,"meta":5596},{"navTitle":4412,"layout":4485,"aside":113,"toc":4416,"single":113},{"title":5598,"path":5599,"stem":5600,"meta":5601},"Run a template","\u002Fdevelopers\u002Ftemplates\u002Frun-a-template","2.developers\u002F7.templates\u002F20.run-a-template",{"heading":4416,"toc":4416},{"title":5603,"path":5604,"stem":5605,"meta":5606},"Customizing a RAG Template with YAML","\u002Fdevelopers\u002Ftemplates\u002Fconfigure-yaml","2.developers\u002F7.templates\u002F30.configure-yaml",{"heading":4416},{"title":5608,"path":5609,"stem":5610,"meta":5611},"How to Use Your Own Components in YAML Configuration","\u002Fdevelopers\u002Ftemplates\u002Fcustom-components","2.developers\u002F7.templates\u002F35.custom-components",{"heading":4416},{"title":4443,"path":5613,"stem":5614,"meta":5615},"\u002Fdevelopers\u002Ftemplates\u002Flicensing-guide","2.developers\u002F7.templates\u002F38.licensing-guide",{"heading":4416,"toc":4416},{"title":5617,"meta":5618,"path":5619,"stem":5620,"children":5621,"page":4416},"YAML Snippets",{},"\u002Fdevelopers\u002Ftemplates\u002Fyaml-snippets","2.developers\u002F7.templates\u002F39.yaml-snippets",[5622,5627,5632],{"title":5623,"path":5624,"stem":5625,"meta":5626},"Data Sources Examples","\u002Fdevelopers\u002Ftemplates\u002Fyaml-snippets\u002Fdata-sources-examples","2.developers\u002F7.templates\u002F39.yaml-snippets\u002F10.data-sources-examples",{"heading":4416,"toc":113},{"title":5628,"path":5629,"stem":5630,"meta":5631},"RAG configuration Examples","\u002Fdevelopers\u002Ftemplates\u002Fyaml-snippets\u002Frag-configuration-examples","2.developers\u002F7.templates\u002F39.yaml-snippets\u002F20.rag-configuration-examples",{"heading":4416,"toc":113},{"title":5633,"path":5634,"stem":5635,"meta":5636},"Full Templates Examples","\u002Fdevelopers\u002Ftemplates\u002Fyaml-snippets\u002Ffull-pipelines-examples","2.developers\u002F7.templates\u002F39.yaml-snippets\u002F30.full-pipelines-examples",{"heading":4416,"toc":113},{"title":5638,"path":5639,"stem":5640,"children":5641,"page":4416},"Rag Customization","\u002Fdevelopers\u002Ftemplates\u002Frag-customization","2.developers\u002F7.templates\u002F40.rag-customization",[5642,5647,5652,5658,5664,5670],{"title":5643,"path":5644,"stem":5645,"meta":5646},"REST API","\u002Fdevelopers\u002Ftemplates\u002Frag-customization\u002Frest-api","2.developers\u002F7.templates\u002F40.rag-customization\u002F10.REST-API",{"heading":4416,"toc":4416},{"title":5648,"path":5649,"stem":5650,"meta":5651},"Customizing prompt","\u002Fdevelopers\u002Ftemplates\u002Frag-customization\u002Fcustom-prompt","2.developers\u002F7.templates\u002F40.rag-customization\u002F20.custom-prompt",{"heading":4416},{"title":4986,"path":5653,"stem":5654,"meta":5655},"\u002Fdevelopers\u002Ftemplates\u002Frag-customization\u002Fparsers","2.developers\u002F7.templates\u002F40.rag-customization\u002F30.parsers",{"date":4990,"tags":5656,"keywords":5657},[4380,4923],[4923,4993,4994,4995,4996],{"title":4998,"path":5659,"stem":5660,"meta":5661},"\u002Fdevelopers\u002Ftemplates\u002Frag-customization\u002Fsplitters","2.developers\u002F7.templates\u002F40.rag-customization\u002F40.splitters",{"date":5002,"thumbnail":86,"tags":5662,"keywords":5663},[5004,5005],[4995,5005],{"title":5008,"path":5665,"stem":5666,"meta":5667},"\u002Fdevelopers\u002Ftemplates\u002Frag-customization\u002Fembedders","2.developers\u002F7.templates\u002F40.rag-customization\u002F50.embedders",{"date":5002,"thumbnail":86,"tags":5668,"keywords":5669},[4380,5013],[4923,4925,4926,4927,5015,5016],{"title":5018,"path":5671,"stem":5672,"meta":5673},"\u002Fdevelopers\u002Ftemplates\u002Frag-customization\u002Fllm-chats","2.developers\u002F7.templates\u002F40.rag-customization\u002F60.llm-chats",{"date":5022,"thumbnail":86,"tags":5674,"keywords":5675},[4380,4923,5024,5018],[4923,4925,4926,4927,5015,5026],{"title":5037,"path":5677,"stem":5678,"children":5679,"page":4416},"\u002Fdevelopers\u002Ftemplates\u002Fdeploy","2.developers\u002F7.templates\u002F60.deploy",[5680,5684,5688,5695],{"title":5043,"path":5681,"stem":5682,"meta":5683},"\u002Fdevelopers\u002Ftemplates\u002Fdeploy\u002Fcloud-deployment","2.developers\u002F7.templates\u002F60.deploy\u002F10.cloud-deployment",{},{"title":5048,"path":5685,"stem":5686,"meta":5687},"\u002Fdevelopers\u002Ftemplates\u002Fdeploy\u002Fgcp-deploy","2.developers\u002F7.templates\u002F60.deploy\u002F15.gcp-deploy",{},{"title":5053,"path":5689,"stem":5690,"meta":5691},"\u002Fdevelopers\u002Ftemplates\u002Fdeploy\u002Faws-fargate-deploy","2.developers\u002F7.templates\u002F60.deploy\u002F20.aws-fargate-deploy",{"date":5057,"tags":5692,"thumbnail":5693,"keywords":5694,"docker_github_link":5068,"deployButtons":4416},[5059,5060],{"src":5062},[5064,5065,5066,4610,5067],{"title":5070,"path":5696,"stem":5697,"meta":5698},"\u002Fdevelopers\u002Ftemplates\u002Fdeploy\u002Fazure-aci-deploy","2.developers\u002F7.templates\u002F60.deploy\u002F25.azure-aci-deploy",{"date":5074,"tags":5699,"thumbnail":5700,"keywords":5701,"docker_github_link":5084,"deployButtons":4416},[5059,5060],{"src":5077,"contain":113},[5079,5080,5066,4610,5081,5082,5083],{"title":5703,"meta":5704,"path":5705,"stem":5706,"children":5707,"page":4416},"ETL Templates",{},"\u002Fdevelopers\u002Ftemplates\u002Fetl","2.developers\u002F7.templates\u002FETL",[5708,5722,5738,5757,5777,5788,5802,5813,5823,5838,5853,5867,5882,5900,5916,5930,5945,5961,5973,5986,5996,6008,6020,6034],{"title":5709,"path":5710,"stem":5711,"meta":5712},"EL Pipeline: Move your data around with Pathway","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002Fel-pipeline","2.developers\u002F7.templates\u002FETL\u002F10.el-pipeline",{"layout":5713,"date":5714,"tags":5715,"thumbnail":5716,"keywords":5718,"popular":113},"template","2025-05-22",[5059,5060],{"src":5717,"contain":113},"\u002Fassets\u002Fcontent\u002Fshowcases\u002Fel-template\u002Fel-template-thumbnail.png",[5719,5720,5721,4608,4635,4610],"ETL","EL","YAML",{"title":5723,"path":5724,"stem":5725,"meta":5726},"Real-Time Anomaly Detection: identifying brute-force logins using Tumbling Windows","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002Fsuspicious_activity_tumbling_window","2.developers\u002F7.templates\u002FETL\u002F10.suspicious_activity_tumbling_window",{"notebook_export_path":5727,"aside":113,"date":5728,"thumbnail":5729,"tags":5732,"keywords":5734,"layout":5713},"notebooks\u002Ftutorials\u002Fsuspicious_user_activity.ipynb","2023-05-30",{"src":5730,"provider":5731},"\u002Fassets\u002Fblog\u002Fthumbnails\u002Fth-shield.png","s3",[4380,5733],"machine-learning",[4896,5735,5736,5737],"tumbling","alert","notebook",{"title":5739,"path":5740,"stem":5741,"meta":5742},"Gaussian Filtering in Real-time: Signal processing with out-of-order data streams","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002Fgaussian_filtering_python","2.developers\u002F7.templates\u002FETL\u002F100.gaussian_filtering_python",{"notebook_export_path":5743,"aside":113,"date":5744,"layout":5713,"thumbnail":5745,"tags":5747,"related":5749,"keywords":5752},"notebooks\u002Ftutorials\u002Fgaussian-filtering-python.ipynb","2023-10-17",{"src":5746},"\u002Fassets\u002Fcontent\u002Ftutorials\u002Ftime_series\u002Fthumbnail-gaussian.png",[4380,5748],"Time Series",[5750,5751],"\u002Fblog\u002Fsignal-processing","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002Fupsampling",[5753,5754,4861,5755,5756,4896,5737],"signal processing","Gaussian filter","irregular sampling","intervals_over",{"title":5758,"path":5759,"stem":5760,"meta":5761},"Computing the Option Greeks using Pathway Live Data Framework and Databento","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002Foption-greeks","2.developers\u002F7.templates\u002FETL\u002F105.option-greeks",{"thumbnail":5762,"date":5764,"tags":5765,"keywords":5766,"notebook_export_path":5775,"docker_github_link":5776,"aside":113,"layout":5713},{"src":5763,"contain":113},"\u002Fassets\u002Fcontent\u002Fshowcases\u002Foption-greeks\u002Foption-greeks.png","2024-08-06",[4380,5060],[5767,5768,5769,5770,5771,5772,5773,5774,5737],"Option Greeks","Databento","Delta","Gamma","Theta","Rho","quant","Black model","notebooks\u002Ftutorials\u002Foption-greeks.ipynb","https:\u002F\u002Fgithub.com\u002Fpathwaycom\u002Fpathway\u002Ftree\u002Fmain\u002Fexamples\u002Fprojects\u002Foption-greeks",{"title":5778,"path":5779,"stem":5780,"meta":5781},"Automating reconciliation of messy financial transaction logs using the Pathway Live Data Framework real-time fuzzy join","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002Ffuzzy_join_chapter1","2.developers\u002F7.templates\u002FETL\u002F11.fuzzy_join_chapter1",{"notebook_export_path":5782,"aside":113,"date":5783,"tags":5784,"keywords":5785,"layout":5713},"notebooks\u002Fshowcases\u002Ffuzzy_join_part1.ipynb","2022-10-18",[4380,5060],[5786,5787,4993,5737],"Fuzzy join","reconciliation",{"title":5789,"path":5751,"stem":5790,"meta":5791},"Signal Processing with Real-time Upsampling: combining multiple time series data streams.","2.developers\u002F7.templates\u002FETL\u002F110.upsampling",{"notebook_export_path":5792,"aside":113,"date":5793,"layout":5713,"thumbnail":5794,"tags":5796,"related":5797,"popular":113,"keywords":5798},"notebooks\u002Ftutorials\u002Fupsampling.ipynb","2023-10-18",{"src":5795},"\u002Fassets\u002Fcontent\u002Ftutorials\u002Ftime_series\u002Fthumbnail-time-series.png",[4380,5748],[5750,5740],[5753,5799,4861,5800,5801,5756,4896,5737],"upsampling","resampling","interpolation",{"title":5803,"path":5804,"stem":5805,"meta":5806},"Interaction with a Feedback Loop.","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002Ffuzzy_join_chapter2","2.developers\u002F7.templates\u002FETL\u002F12.fuzzy_join_chapter2",{"notebook_export_path":5807,"aside":113,"date":5808,"thumbnail":5809,"tags":5811,"keywords":5812,"layout":5713},"notebooks\u002Fshowcases\u002Ffuzzy_join_part2.ipynb","2022-10-19",{"src":5810,"contain":113},"\u002Fassets\u002Fcontent\u002Fshowcases\u002Ffuzzy_join\u002Freconciliation_chapter3_trim.png",[4380,5060],[5786,5787,4993,5737],{"title":5814,"path":5815,"stem":5816,"meta":5817},"Smart real-time monitoring application with alert deduplication","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002Falerting-significant-changes","2.developers\u002F7.templates\u002FETL\u002F130.alerting-significant-changes",{"notebook_export_path":5818,"aside":113,"date":5819,"tags":5820,"keywords":5821,"layout":5713},"notebooks\u002Ftutorials\u002Falert-deduplication.ipynb","2023-11-16",[4380,5060],[5736,5822,5126,5737],"deduplication",{"title":5824,"path":5825,"stem":5826,"meta":5827},"Kafka ETL: Processing event streams in Python","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002Fkafka-etl","2.developers\u002F7.templates\u002FETL\u002F140.kafka-etl",{"layout":5713,"date":5828,"tags":5829,"thumbnail":5830,"keywords":5832,"docker_github_link":5837,"popular":113},"2024-02-15",[5059,5060],{"src":5831,"contain":113},"\u002Fassets\u002Fcontent\u002Fshowcases\u002FETL-Kafka\u002FETL-Kafka.png",[5719,4608,5833,5834,5835,5836,4610],"datetime","time zone","timezone","concat_reindex","https:\u002F\u002Fgithub.com\u002Fpathwaycom\u002Fpathway\u002Ftree\u002Fmain\u002Fexamples\u002Fprojects\u002Fkafka-ETL",{"title":5839,"path":5840,"stem":5841,"meta":5842},"Streaming ETL pipelines in Python with Airbyte and Pathway","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002Fetl-python-airbyte","2.developers\u002F7.templates\u002FETL\u002F150.etl-python-airbyte",{"layout":5713,"date":5843,"tags":5844,"thumbnail":5845,"keywords":5847},"2024-02-28",[5059,5060],{"src":5846},"\u002Fassets\u002Fcontent\u002Fshowcases\u002Fairbyte\u002Fairbyte-diagram-th.png",[5848,5849,5850,5851,5852],"airbyte","processing","airbyte python","python etl","airbyte etl",{"title":5854,"path":5855,"stem":5856,"meta":5857},"Delta Lake ETL with Pathway Live Data Framework for Spark Analytics","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002Fdelta_lake_etl","2.developers\u002F7.templates\u002FETL\u002F175.delta_lake_etl",{"layout":5713,"date":5858,"tags":5859,"thumbnail":5860,"keywords":5862,"docker_github_link":5866},"2024-07-23",[5059,5060],{"src":5861,"contain":113},"\u002Fassets\u002Fcontent\u002Fshowcases\u002Fdeltalake\u002Fdelta_lake_diagram_th.png",[5863,5864,5865,5851,5852,4610],"delta lake etl","spark delta lake","spark etl","https:\u002F\u002Fgithub.com\u002Fpathwaycom\u002Fpathway\u002Ftree\u002Fmain\u002Fexamples\u002Fprojects\u002Fspark-data-preparation",{"title":5868,"path":5869,"stem":5870,"meta":5871},"Python Kafka Alternative: Achieve Sub-Second Latency with your S3 Storage without Kafka using Pathway","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002Fkafka-alternative","2.developers\u002F7.templates\u002FETL\u002F180.kafka-alternative",{"layout":5713,"thumbnail":5872,"date":5874,"tags":5875,"keywords":5876},{"src":5873,"contain":113},"\u002Fassets\u002Fcontent\u002Fshowcases\u002Fkafka-alternatives\u002Fkafka-alternatives-thumbnail.png","2024-08-27",[5059,5060],[5719,4608,5877,5878,5879,5835,5880,5881],"Pathway","MinIO","S3","Kafka-alternatives","Delta tables",{"title":5883,"path":5884,"stem":5885,"meta":5886},"Jupyter \u002F Colab: visualizing and transforming live data streams in Python notebooks with Pathway Live Data Framework","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002Flive_data_jupyter","2.developers\u002F7.templates\u002FETL\u002F2.live_data_jupyter",{"aside":113,"date":5105,"tags":5887,"keywords":5888,"notebook_export_path":5898,"docker_github_link":5899,"popular":113,"layout":5713},[4380,5060,5059],[5889,5890,5891,5892,5893,5894,5895,5896,5897,5737,4610],"Jupyter notebook","interactivity","bokeh","panel","Bollinger bands","vizualization","Weighted Average","rolling statistics","dashboard","notebooks\u002Fshowcases\u002Flive-data-jupyter.ipynb","https:\u002F\u002Fgithub.com\u002Fpathwaycom\u002Fpathway\u002Ftree\u002Fmain\u002Fexamples\u002Fprojects\u002Ffrom_jupyter_to_deploy\u002Fpart4_deployment",{"title":5901,"path":5902,"stem":5903,"meta":5904},"Real-Time Twitter Sentiment Analysis and Prediction App with Pathway Live Data Framework","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002Ftwitter","2.developers\u002F7.templates\u002FETL\u002F2.twitter",{"aside":113,"layout":5713,"date":5905,"thumbnail":5906,"tags":5908,"keywords":5909,"docker_github_link":5915},"2022-10-31",{"src":5907},"\u002Fassets\u002Fcontent\u002Fblog\u002Fth-twitter.png",[4380,5733,5059],[5910,5911,5912,5913,5914,4993,4610],"Twitter","tweets","sentiment analysis","geolocation","influence","https:\u002F\u002Fgithub.com\u002Fpathwaycom\u002Fpathway\u002Ftree\u002Fmain\u002Fexamples\u002Fprojects\u002Ftwitter",{"title":5917,"path":5918,"stem":5919,"meta":5920},"Out-of-Order Event Streams: Calculating Time Deltas with grouping by topic","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002Fevent_stream_processing_time_between_occurrences","2.developers\u002F7.templates\u002FETL\u002F20.event_stream_processing_time_between_occurrences",{"aside":113,"date":5921,"layout":5713,"thumbnail":5922,"tags":5924,"keywords":5925},"2022-11-01",{"src":5923},"\u002Fassets\u002Fcontent\u002Fblog\u002Fth-time-between-events-in-a-multi-topic-event-stream.png",[4380,5060],[5926,5927,4607,5928,5929],"event stream","multi-topic","ordering","sort",{"title":5931,"path":1346,"stem":5932,"meta":5933},"Adaptive Classifiers: Evolving Predictions with Real-Time Data","2.developers\u002F7.templates\u002FETL\u002F3.lsh_chapter1",{"notebook_export_path":5934,"aside":113,"date":5935,"thumbnail":5936,"tags":5938,"keywords":5939,"layout":5713},"notebooks\u002Fshowcases\u002Flsh.ipynb","2022-10-25",{"src":5937},"\u002Fassets\u002Fcontent\u002Fblog\u002Fth-realtime-classification.png",[4380,5733],[5940,4386,5941,4383,5942,5943,5944,4993,5737],"Classification","LSH","Locality Sensitive Hashing","MNIST","euclidean distance",{"title":5946,"path":5947,"stem":5948,"meta":5949},"Uncovering hidden user relationships in crypto exchanges with Fuzzy Join on streaming data","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002Fuser_pairs_fuzzy_join","2.developers\u002F7.templates\u002FETL\u002F30.user_pairs_fuzzy_join",{"aside":113,"date":5950,"thumbnail":5951,"tags":5953,"keywords":5954,"layout":5713},"2023-01-09",{"src":5952,"provider":5731},"\u002Fassets\u002Fblog\u002Fthumbnails\u002Fth-mining-hidden-user-pair-activity-with-fuzzy-join.png",[4380,5060],[5955,5736,5956,5957,5958,5959,5960],"fuzzy join","cryptocurrency","bitcoin","BTC","ETH","Ethereum",{"title":5962,"path":5963,"stem":5964,"meta":5965},"Pathway Live Data Framework Logistics Application: Streamlined Insights for Real-Time Asset Management","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002Flogistics","2.developers\u002F7.templates\u002FETL\u002F4.logistics",{"aside":113,"layout":5713,"date":5905,"thumbnail":5966,"tags":5968,"enterprise":113,"keywords":5969},{"src":5967},"\u002Fassets\u002Fcontent\u002Fblog\u002Fth-logictics-app.png",[4380,5733],[5970,5971,5972],"Logistics","IoT","Dashboard",{"title":5974,"path":5975,"stem":5976,"meta":5977},"Real-Time Shortest Paths on Dynamic Networks with Bellman-Ford in Pathway Live Data Framework","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002Fbellman_ford","2.developers\u002F7.templates\u002FETL\u002F40.bellman_ford",{"aside":113,"date":5978,"layout":5713,"thumbnail":5979,"tags":5981,"notebook_export_path":5982,"keywords":5983},"2022-11-03",{"src":5980,"provider":5731},"\u002Fassets\u002Fblog\u002Fthumbnails\u002Fth-bellman-ford.png",[4380,5733],"notebooks\u002Ftutorials\u002Fbellman_ford.ipynb",[4782,5984,5985,5140,5737],"fixed-point","shortest-path",{"title":5987,"path":5988,"stem":5989,"meta":5990},"Linear regression on a Kafka stream","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002Flinear_regression_with_kafka","2.developers\u002F7.templates\u002FETL\u002F5.linear_regression_with_kafka",{"aside":113,"layout":5713,"date":5991,"tags":5992,"keywords":5993,"docker_github_link":5995},"2022-12-23",[4380,5060],[5994,4608,4541],"linear regression","https:\u002F\u002Fgithub.com\u002Fpathwaycom\u002Fpathway\u002Ftree\u002Fmain\u002Fexamples\u002Fprojects\u002Fkafka-linear-regression",{"title":5997,"path":5998,"stem":5999,"meta":6000},"Real-Time PageRank on Dynamic Graphs with Pathway Live Data Framework","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002Fpagerank","2.developers\u002F7.templates\u002FETL\u002F50.pagerank",{"notebook_export_path":6001,"aside":113,"date":6002,"thumbnail":6003,"tags":6005,"keywords":6006,"layout":5713},"notebooks\u002Ftutorials\u002Fpagerank.ipynb","2022-11-07",{"src":6004,"provider":5731},"\u002Fassets\u002Fblog\u002Fthumbnails\u002Fth-computing-pagerank.png",[4380,5733],[6007,5140,5737],"pagerank",{"title":6009,"path":6010,"stem":6011,"meta":6012},"Sensor Fusion in real-time: combining time series data with Pathway Live Data Framework","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002Fcombining_time_series","2.developers\u002F7.templates\u002FETL\u002F65.combining_time_series",{"aside":113,"date":6013,"thumbnail":6014,"tags":6015,"keywords":6016,"notebook_export_path":6019,"layout":5713},"2023-04-28",{"src":5795},[5748],[6017,6018,5801,4507,5737],"time series","multiple data sources","notebooks\u002Ftutorials\u002Fcombining-time-series.ipynb",{"title":6021,"path":6022,"stem":6023,"meta":6024},"Realtime Server Log Monitoring: nginx + Filebeat + Pathway","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002Frealtime-log-monitoring","2.developers\u002F7.templates\u002FETL\u002F7.realtime-log-monitoring",{"aside":113,"layout":5713,"date":6025,"thumbnail":6026,"tags":6028,"keywords":6029,"docker_github_link":6033},"2023-02-27",{"src":6027,"contain":113},"\u002Fassets\u002Fcontent\u002Ftutorials\u002Frealtime_log_monitoring\u002Fmeme.jpg",[4380,5060],[6030,5736,4608,6031,4583,6032,4610],"log monitoring","Filebeat","ElasticSearch","https:\u002F\u002Fgithub.com\u002Fpathwaycom\u002Fpathway\u002Ftree\u002Fmain\u002Fexamples\u002Fprojects\u002Frealtime-log-monitoring\u002Ffilebeat-pathway-slack",{"title":6035,"path":6036,"stem":6037,"children":6038,"page":4416},"Readmes","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002F_readmes","2.developers\u002F7.templates\u002FETL\u002F_readmes",[6039,6044,6049,6054,6059,6064,6069,6074,6079,6084,6089,6093,6098,6103,6108,6113,6118,6123,6128],{"title":6040,"path":6041,"stem":6042,"meta":6043},"AG2 Multi-Agent Conversations with Pathway Live Data Framework Real-Time RAG","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002F_readmes\u002Fag2-multiagent-rag","2.developers\u002F7.templates\u002FETL\u002F_readmes\u002Fag2-multiagent-rag",{},{"title":6045,"path":6046,"stem":6047,"meta":6048},"Azure ACI Deployment Example","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002F_readmes\u002Fazure-aci-deploy","2.developers\u002F7.templates\u002FETL\u002F_readmes\u002Fazure-aci-deploy",{},{"title":6050,"path":6051,"stem":6052,"meta":6053},"Benchmark for Delta Lake S3 messaging as a Kafka replacement","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002F_readmes\u002Fbenchmarks","2.developers\u002F7.templates\u002FETL\u002F_readmes\u002Fbenchmarks",{},{"title":6055,"path":6056,"stem":6057,"meta":6058},"Best-rated movies examples","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002F_readmes\u002Fbest-movies-example","2.developers\u002F7.templates\u002FETL\u002F_readmes\u002Fbest-movies-example",{},{"title":6060,"path":6061,"stem":6062,"meta":6063},"Make your LLM app sane again: Forgetting incorrect data in real time","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002F_readmes\u002Fconf42","2.developers\u002F7.templates\u002FETL\u002F_readmes\u002Fconf42",{},{"title":6065,"path":6066,"stem":6067,"meta":6068},"Custom python connector example","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002F_readmes\u002Fcustom-python-connector-twitter","2.developers\u002F7.templates\u002FETL\u002F_readmes\u002Fcustom-python-connector-twitter",{},{"title":6070,"path":6071,"stem":6072,"meta":6073},"Realtime monitoring of logs","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002F_readmes\u002Ffilebeat-pathway-slack","2.developers\u002F7.templates\u002FETL\u002F_readmes\u002Ffilebeat-pathway-slack",{},{"title":6075,"path":6076,"stem":6077,"meta":6078},"Tutorial: From interactive data exploration to deployment","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002F_readmes\u002Ffrom_jupyter_to_deploy","2.developers\u002F7.templates\u002FETL\u002F_readmes\u002Ffrom_jupyter_to_deploy",{},{"title":6080,"path":6081,"stem":6082,"meta":6083},"ETL with Kafka in\u002FKafka out","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002F_readmes\u002Fkafka-etl","2.developers\u002F7.templates\u002FETL\u002F_readmes\u002Fkafka-ETL",{},{"title":6085,"path":6086,"stem":6087,"meta":6088},"Best-rated movies example - Kafka version","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002F_readmes\u002Fkafka-version","2.developers\u002F7.templates\u002FETL\u002F_readmes\u002Fkafka-version",{},{"title":6070,"path":6090,"stem":6091,"meta":6092},"\u002Fdevelopers\u002Ftemplates\u002Fetl\u002F_readmes\u002Flogstash-pathway-elastic","2.developers\u002F7.templates\u002FETL\u002F_readmes\u002Flogstash-pathway-elastic",{},{"title":6094,"path":6095,"stem":6096,"meta":6097},"Pathway Live Data Framework Monitoring using OpenTelemetry Collector and Grafana Cloud","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002F_readmes\u002Fmonitoring","2.developers\u002F7.templates\u002FETL\u002F_readmes\u002Fmonitoring",{},{"title":6099,"path":6100,"stem":6101,"meta":6102},"Computing Option Greeks with Pathway Live Data Framework and Databento.","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002F_readmes\u002Foption-greeks","2.developers\u002F7.templates\u002FETL\u002F_readmes\u002Foption-greeks",{},{"title":6104,"path":6105,"stem":6106,"meta":6107},"Retrieval-Augmented Generation (RAG) Pipeline with Pathway Live Data Framework","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002F_readmes\u002Fquestion-answering-rag","2.developers\u002F7.templates\u002FETL\u002F_readmes\u002Fquestion-answering-rag",{},{"title":6109,"path":6110,"stem":6111,"meta":6112},"Best-rated movies example - Redpanda version","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002F_readmes\u002Fredpanda-version","2.developers\u002F7.templates\u002FETL\u002F_readmes\u002Fredpanda-version",{},{"title":6114,"path":6115,"stem":6116,"meta":6117},"Sample Pathway Live Data Framework program for SharePoint connection testing","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002F_readmes\u002Fsharepoint-test","2.developers\u002F7.templates\u002FETL\u002F_readmes\u002Fsharepoint-test",{},{"title":6119,"path":6120,"stem":6121,"meta":6122},"Data Preparation for Spark Analytics","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002F_readmes\u002Fspark-data-preparation","2.developers\u002F7.templates\u002FETL\u002F_readmes\u002Fspark-data-preparation",{},{"title":6124,"path":6125,"stem":6126,"meta":6127},"Realtime Twitter Analysis App with Pathway Live Data Framework","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002F_readmes\u002Ftwitter","2.developers\u002F7.templates\u002FETL\u002F_readmes\u002Ftwitter",{},{"title":6129,"path":6130,"stem":6131,"meta":6132},"Web Scraping with Pathway Live Data Framework","\u002Fdevelopers\u002Ftemplates\u002Fetl\u002F_readmes\u002Fweb-scraping","2.developers\u002F7.templates\u002FETL\u002F_readmes\u002Fweb-scraping",{},{"title":6134,"meta":6135,"path":6136,"stem":6137,"children":6138,"page":4416},"LLM-RAG Templates",{},"\u002Fdevelopers\u002Ftemplates\u002Frag","2.developers\u002F7.templates\u002Frag",[6139,6152,6167,6183,6196,6214,6223,6238,6248,6258,6269,6282],{"title":6140,"path":6141,"stem":6142,"meta":6143},"Question-Answering RAG App","\u002Fdevelopers\u002Ftemplates\u002Frag\u002Fdemo-question-answering","2.developers\u002F7.templates\u002Frag\u002F1000.demo-question-answering",{"redirection":6144,"thumbnail":6145,"layout":5713,"tags":6147,"date":4990,"keywords":6149,"docker_github_link":6144,"popular":113},"https:\u002F\u002Fgithub.com\u002Fpathwaycom\u002Fllm-app\u002Ftree\u002Fmain\u002Ftemplates\u002Fquestion_answering_rag",{"src":6146,"provider":5731},"\u002Fassets\u002Fblog\u002Fthumbnails\u002Fqna-th.png",[5059,6148],"ai-pipelines",[4923,4935,4925,4926,6150,4384,4541,6151],"vector store","yaml",{"title":6153,"path":6154,"stem":6155,"meta":6156},"Adaptive RAG App","\u002Fdevelopers\u002Ftemplates\u002Frag\u002Ftemplate-adaptive-rag","2.developers\u002F7.templates\u002Frag\u002F1001.template-adaptive-rag",{"thumbnail":6157,"tags":6159,"date":6160,"layout":5713,"keywords":6161,"docker_github_link":6166},{"src":6158,"contain":113},"\u002Fassets\u002Fcontent\u002Fblog\u002Fadaptive-rag-plots\u002Fvisual-abstract.png",[5059,6148],"2024-03-29",[4923,4935,6162,6163,6164,6165,4541,6151],"Adaptive RAG","prompt engineering","prompt","explainability","https:\u002F\u002Fgithub.com\u002Fpathwaycom\u002Fllm-app\u002Ftree\u002Fmain\u002Ftemplates\u002Fadaptive_rag",{"title":6168,"path":6169,"stem":6170,"meta":6171},"Private RAG App with Mistral and Ollama","\u002Fdevelopers\u002Ftemplates\u002Frag\u002Ftemplate-private-rag","2.developers\u002F7.templates\u002Frag\u002F1002.template-private-rag",{"tags":6172,"date":6173,"thumbnail":6174,"layout":5713,"keywords":6176,"docker_github_link":6182},[5059,6148],"2024-04-22",{"src":6175,"contain":113},"\u002Fassets\u002Fcontent\u002Fblog\u002Flocal-adaptive-rag\u002Flocal_adaptive.png",[4923,4935,6162,6163,6165,6177,6178,6179,6180,6181,4541,6151],"mistral","ollama","private rag","local rag","ollama rag","https:\u002F\u002Fgithub.com\u002Fpathwaycom\u002Fllm-app\u002Ftree\u002Fmain\u002Ftemplates\u002Fprivate_rag",{"title":6184,"path":6185,"stem":6186,"meta":6187},"Multimodal RAG pipeline with GPT4o","\u002Fdevelopers\u002Ftemplates\u002Frag\u002Ftemplate-multimodal-rag","2.developers\u002F7.templates\u002Frag\u002F1003.template-multimodal-rag",{"tags":6188,"date":6189,"thumbnail":6190,"layout":5713,"keywords":6192,"docker_github_link":6195,"popular":113},[5059,6148],"2024-01-01",{"src":6191,"contain":113},"\u002Fassets\u002Fcontent\u002Fshowcases\u002Fmultimodal-RAG\u002FmultimodalRAG-blog-banner.png",[4923,4935,4925,4926,6193,6194,4993,4541,6151],"GPT-4o","multimodal RAG","https:\u002F\u002Fgithub.com\u002Fpathwaycom\u002Fllm-app\u002Ftree\u002Fmain\u002Ftemplates\u002Fmultimodal_rag",{"title":6197,"path":6198,"stem":6199,"children":6200,"meta":6210},"Live Document Indexing (Vector Store \u002F Retriever)","\u002Fdevelopers\u002Ftemplates\u002Frag\u002Ftemplate-demo-document-indexing","2.developers\u002F7.templates\u002Frag\u002F1008.template-demo-document-indexing",[6201],{"title":6197,"path":6198,"stem":6199,"meta":6202},{"thumbnail":6203,"tags":6205,"date":6189,"layout":5713,"keywords":6206,"docker_github_link":6209},{"src":6204,"provider":5731},"\u002Fassets\u002Fblog\u002Fthumbnails\u002Flive-document-indexing-th.png",[5059,6148],[4923,4935,4925,4926,6150,4384,6207,4701,6208,4541,6151],"SharePoint","Gdrive","https:\u002F\u002Fgithub.com\u002Fpathwaycom\u002Fllm-app\u002Ftree\u002Fmain\u002Ftemplates\u002Fdocument_indexing",{"thumbnail":6211,"tags":6212,"date":6189,"layout":5713,"keywords":6213,"docker_github_link":6209},{"src":6204,"provider":5731},[5059,6148],[4923,4935,4925,4926,6150,4384,6207,4701,6208,4541,6151],{"title":6215,"path":6216,"stem":6217,"meta":6218},"Alerting when answers change on Google Drive","\u002Fdevelopers\u002Ftemplates\u002Frag\u002Fdrive-alert","2.developers\u002F7.templates\u002Frag\u002F1009.drive-alert",{"tags":6219,"date":6220,"layout":5713,"keywords":6221,"docker_github_link":4351,"hide":113},[5059,6148],"2024-11-07",[4923,4935,4925,4926,6222,4384,4701,6208,4541],"slack",{"title":6224,"path":6225,"stem":6226,"meta":6227},"Slides AI Search App","\u002Fdevelopers\u002Ftemplates\u002Frag\u002Ftemplate-slides-search","2.developers\u002F7.templates\u002Frag\u002F1010.template-slides-search",{"thumbnail":6228,"tags":6230,"date":6231,"layout":5713,"keywords":6232,"docker_github_link":6237},{"src":6229,"provider":5731},"\u002Fassets\u002Fblog\u002Fthumbnails\u002Fslides-search-th.png",[5059,6148],"2024-11-14",[4923,4935,4925,4926,4701,6233,4541,6151,6234,6235,6236],"slides","multimodal","VLM","image-to-text","https:\u002F\u002Fgithub.com\u002Fpathwaycom\u002Fllm-app\u002Ftree\u002Fmain\u002Ftemplates\u002Fslides_ai_search",{"title":6239,"path":6240,"stem":6241,"meta":6242},"Adaptive RAG: cut your LLM costs without sacrificing accuracy","\u002Fdevelopers\u002Ftemplates\u002Frag\u002Fadaptive-rag","2.developers\u002F7.templates\u002Frag\u002F1015.adaptive-rag",{"aside":113,"thumbnail":6243,"tags":6244,"date":6245,"notebook_export_path":6246,"keywords":6247,"run_template":6154,"hide":113},{"src":6158,"contain":113},[5059,6148],"2024-03-28","notebooks\u002Fshowcases\u002Fadaptive_rag_question_answering.ipynb",[4923,4935,6162,6163,6164,6165,5737,4610],{"title":6249,"path":6250,"stem":6251,"meta":6252},"Multimodal RAG for PDFs with Text, Images, and Charts","\u002Fdevelopers\u002Ftemplates\u002Frag\u002Fmultimodal-rag","2.developers\u002F7.templates\u002Frag\u002F120.multimodal-rag",{"aside":113,"thumbnail":6253,"date":6254,"tags":6255,"keywords":6256,"notebook_export_path":6257,"run_template":6185,"popular":113,"hide":113},{"src":6191,"contain":113},"2024-06-20",[5059,6148],[4923,4935,4925,4926,6193,6194,4993,5737,4541],"notebooks\u002Fshowcases\u002Fmultimodal-rag.ipynb",{"title":6259,"path":6260,"stem":6261,"meta":6262},"Private RAG with Connected Data Sources using Mistral, Ollama, and Pathway Live Data Framework","\u002Fdevelopers\u002Ftemplates\u002Frag\u002Fprivate-rag-ollama-mistral","2.developers\u002F7.templates\u002Frag\u002F161.private-rag-ollama-mistral",{"aside":113,"thumbnail":6263,"tags":6264,"date":6265,"related":6266,"notebook_export_path":6267,"keywords":6268,"run_template":6169,"hide":113},{"src":6175,"contain":113},[5059,6148],"2024-04-23",[6240,6141],"notebooks\u002Fshowcases\u002Fmistral_adaptive_rag_question_answering.ipynb",[4923,4935,6162,6163,6165,6177,6178,6179,6180,6181,5737,4541],{"title":6270,"path":6271,"stem":6272,"meta":6273},"Pathway Live Data Framework + PostgreSQL + LLM: app for querying financial reports with live document structuring pipeline.","\u002Fdevelopers\u002Ftemplates\u002Frag\u002Funstructured-to-structured","2.developers\u002F7.templates\u002Frag\u002F5.unstructured-to-structured",{"aside":113,"layout":5713,"date":4906,"thumbnail":6274,"tags":6276,"keywords":6277,"docker_github_link":6281},{"src":6275,"contain":113},"\u002Fassets\u002Fcontent\u002Fshowcases\u002Fllm-app\u002Farchitecture_unst_to_st.png",[5059,6148],[4923,6278,4993,4635,4925,6279,6280,4506,4993,4610],"SQL","Entity extraction","Document parsing","https:\u002F\u002Fgithub.com\u002Fpathwaycom\u002Fllm-app\u002Ftree\u002Fmain\u002Ftemplates\u002Funstructured_to_sql_on_the_fly",{"title":6035,"path":6283,"stem":6284,"children":6285,"page":4416},"\u002Fdevelopers\u002Ftemplates\u002Frag\u002F_readmes","2.developers\u002F7.templates\u002Frag\u002F_readmes",[6286,6291,6299,6304,6309,6314,6319,6324,6329],{"title":6287,"path":6288,"stem":6289,"meta":6290},"AdaptiveRag","\u002Fdevelopers\u002Ftemplates\u002Frag\u002F_readmes\u002Fadaptive_rag","2.developers\u002F7.templates\u002Frag\u002F_readmes\u002Fadaptive_rag",{},{"title":6292,"path":6293,"stem":6294,"children":6295,"meta":6298},"DocumentIndexing","\u002Fdevelopers\u002Ftemplates\u002Frag\u002F_readmes\u002Fdocument_indexing","2.developers\u002F7.templates\u002Frag\u002F_readmes\u002Fdocument_indexing",[6296],{"title":6292,"path":6293,"stem":6294,"meta":6297},{},{},{"title":6300,"path":6301,"stem":6302,"meta":6303},"DocumentStoreMcpServer","\u002Fdevelopers\u002Ftemplates\u002Frag\u002F_readmes\u002Fdocument_store_mcp_server","2.developers\u002F7.templates\u002Frag\u002F_readmes\u002Fdocument_store_mcp_server",{},{"title":6305,"path":6306,"stem":6307,"meta":6308},"Pathway Live Data Framework + LLM + Slack notification: RAG App with real-time alerting when answers change in documents","\u002Fdevelopers\u002Ftemplates\u002Frag\u002F_readmes\u002Fdrive_alert","2.developers\u002F7.templates\u002Frag\u002F_readmes\u002Fdrive_alert",{},{"title":6310,"path":6311,"stem":6312,"meta":6313},"MultimodalRag","\u002Fdevelopers\u002Ftemplates\u002Frag\u002F_readmes\u002Fmultimodal_rag","2.developers\u002F7.templates\u002Frag\u002F_readmes\u002Fmultimodal_rag",{},{"title":6315,"path":6316,"stem":6317,"meta":6318},"PrivateRag","\u002Fdevelopers\u002Ftemplates\u002Frag\u002F_readmes\u002Fprivate_rag","2.developers\u002F7.templates\u002Frag\u002F_readmes\u002Fprivate_rag",{},{"title":6320,"path":6321,"stem":6322,"meta":6323},"QuestionAnsweringRag","\u002Fdevelopers\u002Ftemplates\u002Frag\u002F_readmes\u002Fquestion_answering_rag","2.developers\u002F7.templates\u002Frag\u002F_readmes\u002Fquestion_answering_rag",{},{"title":6325,"path":6326,"stem":6327,"meta":6328},"SlidesAiSearch","\u002Fdevelopers\u002Ftemplates\u002Frag\u002F_readmes\u002Fslides_ai_search","2.developers\u002F7.templates\u002Frag\u002F_readmes\u002Fslides_ai_search",{},{"title":6330,"path":6331,"stem":6332,"meta":6333},"UnstructuredToSqlOnTheFly","\u002Fdevelopers\u002Ftemplates\u002Frag\u002F_readmes\u002Funstructured_to_sql_on_the_fly","2.developers\u002F7.templates\u002Frag\u002F_readmes\u002Funstructured_to_sql_on_the_fly",{},{"navTitle":4412,"layout":4485,"aside":113,"toc":4416,"single":113},{"id":4,"title":5,"author":6,"body":6336,"description":4374,"extension":4375,"meta":10164,"navigation":113,"path":4388,"seo":10167,"sitemap":10168,"stem":4391,"__hash__":4392},{"type":8,"value":6337,"toc":10157},[6338,6340,6342,6344,6348,6350,6352,6357,6363,6371,6375,6617,6622,6634,6968,6973,6989,6991,6999,7003,7337,7342,7352,7364,7370,7376,7382,7422,7424,7432,7440,7450,7840,7845,7851,7985,7990,8000,8004,8008,8012,8016,8018,8106,8210,8218,8300,8302,8394,8398,8510,8518,8532,8534,8560,8562,8576,8578,9254,9256,9274,9276,9296,9298,9316,9318,9330,10146,10151,10153,10155],[11,6339,5],{"id":13},[15,6341,17],{},[15,6343,20],{},[15,6345,6346],{},[24,6347],{"alt":26,"src":27},[15,6349,30],{},[32,6351,35],{"id":34},[15,6353,38,6354,46],{},[40,6355,45],{"href":42,"rel":6356},[44],[15,6358,49,6359,54,6361,57],{},[51,6360,53],{},[51,6362,53],{},[15,6364,60,6365,67,6369,72],{},[40,6366,6367],{"href":63},[51,6368,66],{},[40,6370,71],{"href":70},[15,6372,75,6373,79],{},[51,6374,78],{},[81,6376,6377],{"className":83,"code":84,"language":85,"meta":86,"style":86},[51,6378,6379,6389,6393,6397,6415,6419,6423,6427,6431,6435,6439,6443,6447,6465,6469,6473,6477,6481,6485,6489,6493,6497,6543,6591,6595,6599],{"__ignoreMap":86},[90,6380,6381,6383,6385,6387],{"class":92,"line":93},[90,6382,97],{"class":96},[90,6384,101],{"class":100},[90,6386,104],{"class":96},[90,6388,107],{"class":100},[90,6390,6391],{"class":92,"line":110},[90,6392,114],{"emptyLinePlaceholder":113},[90,6394,6395],{"class":92,"line":117},[90,6396,114],{"emptyLinePlaceholder":113},[90,6398,6399,6401,6403,6405,6407,6409,6411,6413],{"class":92,"line":122},[90,6400,125],{"class":100},[90,6402,129],{"class":128},[90,6404,132],{"class":100},[90,6406,135],{"class":128},[90,6408,139],{"class":138},[90,6410,135],{"class":128},[90,6412,145],{"class":144},[90,6414,148],{"class":128},[90,6416,6417],{"class":92,"line":151},[90,6418,154],{"class":128},[90,6420,6421],{"class":92,"line":157},[90,6422,161],{"class":160},[90,6424,6425],{"class":92,"line":164},[90,6426,167],{"class":160},[90,6428,6429],{"class":92,"line":170},[90,6430,173],{"class":160},[90,6432,6433],{"class":92,"line":176},[90,6434,179],{"class":160},[90,6436,6437],{"class":92,"line":182},[90,6438,185],{"class":160},[90,6440,6441],{"class":92,"line":188},[90,6442,154],{"class":128},[90,6444,6445],{"class":92,"line":193},[90,6446,196],{"class":128},[90,6448,6449,6451,6453,6455,6457,6459,6461,6463],{"class":92,"line":199},[90,6450,202],{"class":100},[90,6452,129],{"class":128},[90,6454,132],{"class":100},[90,6456,135],{"class":128},[90,6458,139],{"class":138},[90,6460,135],{"class":128},[90,6462,145],{"class":144},[90,6464,148],{"class":128},[90,6466,6467],{"class":92,"line":219},[90,6468,154],{"class":128},[90,6470,6471],{"class":92,"line":224},[90,6472,161],{"class":160},[90,6474,6475],{"class":92,"line":229},[90,6476,232],{"class":160},[90,6478,6479],{"class":92,"line":235},[90,6480,238],{"class":160},[90,6482,6483],{"class":92,"line":241},[90,6484,244],{"class":160},[90,6486,6487],{"class":92,"line":247},[90,6488,154],{"class":128},[90,6490,6491],{"class":92,"line":252},[90,6492,196],{"class":128},[90,6494,6495],{"class":92,"line":257},[90,6496,114],{"emptyLinePlaceholder":113},[90,6498,6499,6501,6503,6505,6507,6509,6511,6513,6515,6517,6519,6521,6523,6525,6527,6529,6531,6533,6535,6537,6539,6541],{"class":92,"line":262},[90,6500,265],{"class":100},[90,6502,129],{"class":128},[90,6504,270],{"class":100},[90,6506,135],{"class":128},[90,6508,275],{"class":144},[90,6510,278],{"class":128},[90,6512,281],{"class":144},[90,6514,284],{"class":128},[90,6516,132],{"class":144},[90,6518,135],{"class":128},[90,6520,291],{"class":138},[90,6522,135],{"class":128},[90,6524,78],{"class":138},[90,6526,298],{"class":128},[90,6528,132],{"class":144},[90,6530,135],{"class":128},[90,6532,305],{"class":138},[90,6534,135],{"class":128},[90,6536,78],{"class":138},[90,6538,312],{"class":128},[90,6540,315],{"class":144},[90,6542,148],{"class":128},[90,6544,6545,6547,6549,6551,6553,6555,6557,6559,6561,6563,6565,6567,6569,6571,6573,6575,6577,6579,6581,6583,6585,6587,6589],{"class":92,"line":320},[90,6546,324],{"class":323},[90,6548,129],{"class":128},[90,6550,329],{"class":144},[90,6552,135],{"class":128},[90,6554,291],{"class":138},[90,6556,135],{"class":128},[90,6558,338],{"class":138},[90,6560,284],{"class":128},[90,6562,343],{"class":323},[90,6564,129],{"class":128},[90,6566,329],{"class":144},[90,6568,135],{"class":128},[90,6570,305],{"class":138},[90,6572,135],{"class":128},[90,6574,338],{"class":138},[90,6576,284],{"class":128},[90,6578,360],{"class":323},[90,6580,129],{"class":128},[90,6582,329],{"class":144},[90,6584,135],{"class":128},[90,6586,369],{"class":138},[90,6588,135],{"class":128},[90,6590,374],{"class":138},[90,6592,6593],{"class":92,"line":377},[90,6594,196],{"class":128},[90,6596,6597],{"class":92,"line":382},[90,6598,114],{"emptyLinePlaceholder":113},[90,6600,6601,6603,6605,6607,6609,6611,6613,6615],{"class":92,"line":387},[90,6602,329],{"class":100},[90,6604,135],{"class":128},[90,6606,139],{"class":138},[90,6608,135],{"class":128},[90,6610,398],{"class":144},[90,6612,278],{"class":128},[90,6614,403],{"class":144},[90,6616,196],{"class":128},[81,6618,6620],{"className":6619,"code":410,"language":411},[409],[51,6621,410],{"__ignoreMap":86},[15,6623,416,6624,420,6626,424,6628,427,6630,431,6632,434],{},[51,6625,419],{},[51,6627,423],{},[51,6629,281],{},[51,6631,430],{},[51,6633,430],{},[81,6635,6636],{"className":83,"code":437,"language":85,"meta":86,"style":86},[51,6637,6638,6648,6652,6670,6674,6678,6682,6686,6690,6694,6698,6702,6720,6724,6728,6732,6736,6740,6744,6748,6752,6756,6760,6764,6768,6772,6776,6780,6784,6788,6792,6822,6852,6856,6860,6874,6902,6946,6950],{"__ignoreMap":86},[90,6639,6640,6642,6644,6646],{"class":92,"line":93},[90,6641,97],{"class":96},[90,6643,101],{"class":100},[90,6645,104],{"class":96},[90,6647,107],{"class":100},[90,6649,6650],{"class":92,"line":110},[90,6651,114],{"emptyLinePlaceholder":113},[90,6653,6654,6656,6658,6660,6662,6664,6666,6668],{"class":92,"line":117},[90,6655,458],{"class":100},[90,6657,129],{"class":128},[90,6659,132],{"class":100},[90,6661,135],{"class":128},[90,6663,139],{"class":138},[90,6665,135],{"class":128},[90,6667,145],{"class":144},[90,6669,148],{"class":128},[90,6671,6672],{"class":92,"line":122},[90,6673,154],{"class":128},[90,6675,6676],{"class":92,"line":151},[90,6677,481],{"class":160},[90,6679,6680],{"class":92,"line":157},[90,6681,486],{"class":160},[90,6683,6684],{"class":92,"line":164},[90,6685,491],{"class":160},[90,6687,6688],{"class":92,"line":170},[90,6689,496],{"class":160},[90,6691,6692],{"class":92,"line":176},[90,6693,501],{"class":160},[90,6695,6696],{"class":92,"line":182},[90,6697,154],{"class":128},[90,6699,6700],{"class":92,"line":188},[90,6701,196],{"class":128},[90,6703,6704,6706,6708,6710,6712,6714,6716,6718],{"class":92,"line":193},[90,6705,514],{"class":100},[90,6707,129],{"class":128},[90,6709,132],{"class":100},[90,6711,135],{"class":128},[90,6713,139],{"class":138},[90,6715,135],{"class":128},[90,6717,145],{"class":144},[90,6719,148],{"class":128},[90,6721,6722],{"class":92,"line":199},[90,6723,154],{"class":128},[90,6725,6726],{"class":92,"line":219},[90,6727,537],{"class":160},[90,6729,6730],{"class":92,"line":224},[90,6731,542],{"class":160},[90,6733,6734],{"class":92,"line":229},[90,6735,547],{"class":160},[90,6737,6738],{"class":92,"line":235},[90,6739,552],{"class":160},[90,6741,6742],{"class":92,"line":241},[90,6743,542],{"class":160},[90,6745,6746],{"class":92,"line":247},[90,6747,561],{"class":160},[90,6749,6750],{"class":92,"line":252},[90,6751,566],{"class":160},[90,6753,6754],{"class":92,"line":257},[90,6755,566],{"class":160},[90,6757,6758],{"class":92,"line":262},[90,6759,575],{"class":160},[90,6761,6762],{"class":92,"line":320},[90,6763,580],{"class":160},[90,6765,6766],{"class":92,"line":377},[90,6767,585],{"class":160},[90,6769,6770],{"class":92,"line":382},[90,6771,590],{"class":160},[90,6773,6774],{"class":92,"line":387},[90,6775,595],{"class":160},[90,6777,6778],{"class":92,"line":598},[90,6779,601],{"class":160},[90,6781,6782],{"class":92,"line":604},[90,6783,607],{"class":160},[90,6785,6786],{"class":92,"line":610},[90,6787,154],{"class":128},[90,6789,6790],{"class":92,"line":615},[90,6791,196],{"class":128},[90,6793,6794,6796,6798,6800,6802,6804,6806,6808,6810,6812,6814,6816,6818,6820],{"class":92,"line":620},[90,6795,623],{"class":100},[90,6797,129],{"class":128},[90,6799,628],{"class":100},[90,6801,135],{"class":128},[90,6803,633],{"class":144},[90,6805,278],{"class":128},[90,6807,329],{"class":144},[90,6809,135],{"class":128},[90,6811,369],{"class":138},[90,6813,135],{"class":128},[90,6815,646],{"class":138},[90,6817,312],{"class":128},[90,6819,651],{"class":144},[90,6821,148],{"class":128},[90,6823,6824,6826,6828,6830,6832,6834,6836,6838,6840,6842,6844,6846,6848,6850],{"class":92,"line":656},[90,6825,659],{"class":144},[90,6827,135],{"class":128},[90,6829,369],{"class":138},[90,6831,135],{"class":128},[90,6833,646],{"class":138},[90,6835,284],{"class":128},[90,6837,628],{"class":323},[90,6839,129],{"class":128},[90,6841,329],{"class":144},[90,6843,135],{"class":128},[90,6845,680],{"class":138},[90,6847,135],{"class":128},[90,6849,685],{"class":144},[90,6851,688],{"class":128},[90,6853,6854],{"class":92,"line":691},[90,6855,196],{"class":128},[90,6857,6858],{"class":92,"line":696},[90,6859,114],{"emptyLinePlaceholder":113},[90,6861,6862,6864,6866,6868,6870,6872],{"class":92,"line":701},[90,6863,704],{"class":100},[90,6865,129],{"class":128},[90,6867,709],{"class":100},[90,6869,135],{"class":128},[90,6871,275],{"class":144},[90,6873,148],{"class":128},[90,6875,6876,6878,6880,6882,6884,6886,6888,6890,6892,6894,6896,6898,6900],{"class":92,"line":718},[90,6877,721],{"class":144},[90,6879,284],{"class":128},[90,6881,132],{"class":144},[90,6883,135],{"class":128},[90,6885,291],{"class":138},[90,6887,135],{"class":128},[90,6889,646],{"class":138},[90,6891,298],{"class":128},[90,6893,132],{"class":144},[90,6895,135],{"class":128},[90,6897,305],{"class":138},[90,6899,135],{"class":128},[90,6901,746],{"class":138},[90,6903,6904,6906,6908,6910,6912,6914,6916,6918,6920,6922,6924,6926,6928,6930,6932,6934,6936,6938,6940,6942,6944],{"class":92,"line":749},[90,6905,312],{"class":128},[90,6907,315],{"class":144},[90,6909,278],{"class":128},[90,6911,329],{"class":144},[90,6913,135],{"class":128},[90,6915,291],{"class":138},[90,6917,135],{"class":128},[90,6919,766],{"class":138},[90,6921,284],{"class":128},[90,6923,132],{"class":144},[90,6925,135],{"class":128},[90,6927,369],{"class":138},[90,6929,135],{"class":128},[90,6931,646],{"class":138},[90,6933,284],{"class":128},[90,6935,132],{"class":144},[90,6937,135],{"class":128},[90,6939,305],{"class":138},[90,6941,135],{"class":128},[90,6943,791],{"class":138},[90,6945,196],{"class":128},[90,6947,6948],{"class":92,"line":796},[90,6949,114],{"emptyLinePlaceholder":113},[90,6951,6952,6954,6956,6958,6960,6962,6964,6966],{"class":92,"line":801},[90,6953,329],{"class":100},[90,6955,135],{"class":128},[90,6957,139],{"class":138},[90,6959,135],{"class":128},[90,6961,398],{"class":144},[90,6963,278],{"class":128},[90,6965,816],{"class":144},[90,6967,196],{"class":128},[81,6969,6971],{"className":6970,"code":822,"language":411},[409],[51,6972,822],{"__ignoreMap":86},[15,6974,827,6975,831,6977,835,6979,839,6981,843,6983,847,6985,851,6987,854],{},[51,6976,830],{},[51,6978,834],{},[51,6980,838],{},[51,6982,842],{},[51,6984,846],{},[51,6986,850],{},[51,6988,275],{},[32,6990,858],{"id":857},[15,6992,861,6993,866,6995,873],{},[863,6994,865],{},[40,6996,6997],{"href":869},[51,6998,872],{},[15,7000,876,7001,879],{},[51,7002,872],{},[81,7004,7005],{"className":83,"code":882,"language":85,"meta":86,"style":86},[51,7006,7007,7017,7021,7039,7043,7047,7051,7055,7059,7063,7067,7071,7089,7093,7097,7101,7105,7109,7113,7117,7121,7125,7129,7133,7137,7141,7145,7149,7153,7157,7161,7191,7221,7225,7229,7243,7271,7315,7319],{"__ignoreMap":86},[90,7008,7009,7011,7013,7015],{"class":92,"line":93},[90,7010,97],{"class":96},[90,7012,101],{"class":100},[90,7014,104],{"class":96},[90,7016,107],{"class":100},[90,7018,7019],{"class":92,"line":110},[90,7020,114],{"emptyLinePlaceholder":113},[90,7022,7023,7025,7027,7029,7031,7033,7035,7037],{"class":92,"line":117},[90,7024,458],{"class":100},[90,7026,129],{"class":128},[90,7028,132],{"class":100},[90,7030,135],{"class":128},[90,7032,139],{"class":138},[90,7034,135],{"class":128},[90,7036,145],{"class":144},[90,7038,148],{"class":128},[90,7040,7041],{"class":92,"line":122},[90,7042,154],{"class":128},[90,7044,7045],{"class":92,"line":151},[90,7046,481],{"class":160},[90,7048,7049],{"class":92,"line":157},[90,7050,486],{"class":160},[90,7052,7053],{"class":92,"line":164},[90,7054,491],{"class":160},[90,7056,7057],{"class":92,"line":170},[90,7058,496],{"class":160},[90,7060,7061],{"class":92,"line":176},[90,7062,501],{"class":160},[90,7064,7065],{"class":92,"line":182},[90,7066,154],{"class":128},[90,7068,7069],{"class":92,"line":188},[90,7070,196],{"class":128},[90,7072,7073,7075,7077,7079,7081,7083,7085,7087],{"class":92,"line":193},[90,7074,514],{"class":100},[90,7076,129],{"class":128},[90,7078,132],{"class":100},[90,7080,135],{"class":128},[90,7082,139],{"class":138},[90,7084,135],{"class":128},[90,7086,145],{"class":144},[90,7088,148],{"class":128},[90,7090,7091],{"class":92,"line":199},[90,7092,154],{"class":128},[90,7094,7095],{"class":92,"line":219},[90,7096,537],{"class":160},[90,7098,7099],{"class":92,"line":224},[90,7100,542],{"class":160},[90,7102,7103],{"class":92,"line":229},[90,7104,547],{"class":160},[90,7106,7107],{"class":92,"line":235},[90,7108,552],{"class":160},[90,7110,7111],{"class":92,"line":241},[90,7112,542],{"class":160},[90,7114,7115],{"class":92,"line":247},[90,7116,561],{"class":160},[90,7118,7119],{"class":92,"line":252},[90,7120,566],{"class":160},[90,7122,7123],{"class":92,"line":257},[90,7124,566],{"class":160},[90,7126,7127],{"class":92,"line":262},[90,7128,575],{"class":160},[90,7130,7131],{"class":92,"line":320},[90,7132,580],{"class":160},[90,7134,7135],{"class":92,"line":377},[90,7136,585],{"class":160},[90,7138,7139],{"class":92,"line":382},[90,7140,590],{"class":160},[90,7142,7143],{"class":92,"line":387},[90,7144,595],{"class":160},[90,7146,7147],{"class":92,"line":598},[90,7148,601],{"class":160},[90,7150,7151],{"class":92,"line":604},[90,7152,607],{"class":160},[90,7154,7155],{"class":92,"line":610},[90,7156,154],{"class":128},[90,7158,7159],{"class":92,"line":615},[90,7160,196],{"class":128},[90,7162,7163,7165,7167,7169,7171,7173,7175,7177,7179,7181,7183,7185,7187,7189],{"class":92,"line":620},[90,7164,623],{"class":100},[90,7166,129],{"class":128},[90,7168,628],{"class":100},[90,7170,135],{"class":128},[90,7172,633],{"class":144},[90,7174,278],{"class":128},[90,7176,329],{"class":144},[90,7178,135],{"class":128},[90,7180,369],{"class":138},[90,7182,135],{"class":128},[90,7184,646],{"class":138},[90,7186,312],{"class":128},[90,7188,651],{"class":144},[90,7190,148],{"class":128},[90,7192,7193,7195,7197,7199,7201,7203,7205,7207,7209,7211,7213,7215,7217,7219],{"class":92,"line":656},[90,7194,659],{"class":144},[90,7196,135],{"class":128},[90,7198,369],{"class":138},[90,7200,135],{"class":128},[90,7202,646],{"class":138},[90,7204,284],{"class":128},[90,7206,628],{"class":323},[90,7208,129],{"class":128},[90,7210,329],{"class":144},[90,7212,135],{"class":128},[90,7214,680],{"class":138},[90,7216,135],{"class":128},[90,7218,685],{"class":144},[90,7220,688],{"class":128},[90,7222,7223],{"class":92,"line":691},[90,7224,196],{"class":128},[90,7226,7227],{"class":92,"line":696},[90,7228,114],{"emptyLinePlaceholder":113},[90,7230,7231,7233,7235,7237,7239,7241],{"class":92,"line":701},[90,7232,704],{"class":100},[90,7234,129],{"class":128},[90,7236,709],{"class":100},[90,7238,135],{"class":128},[90,7240,872],{"class":144},[90,7242,148],{"class":128},[90,7244,7245,7247,7249,7251,7253,7255,7257,7259,7261,7263,7265,7267,7269],{"class":92,"line":718},[90,7246,721],{"class":144},[90,7248,284],{"class":128},[90,7250,132],{"class":144},[90,7252,135],{"class":128},[90,7254,291],{"class":138},[90,7256,135],{"class":128},[90,7258,646],{"class":138},[90,7260,298],{"class":128},[90,7262,132],{"class":144},[90,7264,135],{"class":128},[90,7266,305],{"class":138},[90,7268,135],{"class":128},[90,7270,746],{"class":138},[90,7272,7273,7275,7277,7279,7281,7283,7285,7287,7289,7291,7293,7295,7297,7299,7301,7303,7305,7307,7309,7311,7313],{"class":92,"line":749},[90,7274,312],{"class":128},[90,7276,315],{"class":144},[90,7278,278],{"class":128},[90,7280,329],{"class":144},[90,7282,135],{"class":128},[90,7284,291],{"class":138},[90,7286,135],{"class":128},[90,7288,766],{"class":138},[90,7290,284],{"class":128},[90,7292,132],{"class":144},[90,7294,135],{"class":128},[90,7296,369],{"class":138},[90,7298,135],{"class":128},[90,7300,646],{"class":138},[90,7302,284],{"class":128},[90,7304,132],{"class":144},[90,7306,135],{"class":128},[90,7308,305],{"class":138},[90,7310,135],{"class":128},[90,7312,791],{"class":138},[90,7314,196],{"class":128},[90,7316,7317],{"class":92,"line":796},[90,7318,114],{"emptyLinePlaceholder":113},[90,7320,7321,7323,7325,7327,7329,7331,7333,7335],{"class":92,"line":801},[90,7322,329],{"class":100},[90,7324,135],{"class":128},[90,7326,139],{"class":138},[90,7328,135],{"class":128},[90,7330,398],{"class":144},[90,7332,278],{"class":128},[90,7334,816],{"class":144},[90,7336,196],{"class":128},[81,7338,7340],{"className":7339,"code":1218,"language":411},[409],[51,7341,1218],{"__ignoreMap":86},[15,7343,1223,7344,1226,7346,1229,7348,1232,7350,1235],{},[51,7345,830],{},[51,7347,834],{},[51,7349,846],{},[51,7351,834],{},[15,7353,1238,7354,1244,7358,1247,7360,1251,7362,1255],{},[40,7355,7356],{"href":1241},[51,7357,275],{},[51,7359,872],{},[51,7361,1250],{},[51,7363,1254],{},[15,7365,1258,7366,1261,7368,1264],{},[51,7367,872],{},[51,7369,423],{},[15,7371,1267,7372,1270,7374,1273],{},[51,7373,872],{},[51,7375,275],{},[15,7377,1276,7378,1279,7380,1282],{},[51,7379,275],{},[51,7381,872],{},[1284,7383,7384,7396],{},[1287,7385,7386],{},[1290,7387,7388,7392],{},[1293,7389,7390],{},[51,7391,275],{},[1293,7393,7394],{},[51,7395,872],{},[1302,7397,7398,7404,7410,7416],{},[1290,7399,7400,7402],{},[1307,7401,1309],{},[1307,7403,1312],{},[1290,7405,7406,7408],{},[1307,7407,1317],{},[1307,7409,1320],{},[1290,7411,7412,7414],{},[1307,7413,1325],{},[1307,7415,1328],{},[1290,7417,7418,7420],{},[1307,7419,1333],{},[1307,7421,1336],{},[32,7423,1340],{"id":1339},[15,7425,1343,7426,1348,7428,1355],{},[40,7427,1347],{"href":1346},[40,7429,7430],{"href":1351},[51,7431,1354],{},[15,7433,1358,7434,1365,7438,1370],{},[40,7435,7436],{"href":1361},[51,7437,1364],{},[40,7439,1369],{"href":1368},[15,7441,1373,7442,1377,7444,1381,7446,1384,7448,1387],{},[51,7443,1376],{},[51,7445,1380],{},[51,7447,66],{},[51,7449,53],{},[81,7451,7452],{"className":83,"code":1390,"language":85,"meta":86,"style":86},[51,7453,7454,7464,7486,7490,7508,7512,7516,7520,7524,7528,7532,7536,7592,7596,7614,7618,7622,7626,7630,7634,7638,7642,7646,7650,7706,7710,7748,7786,7818,7822],{"__ignoreMap":86},[90,7455,7456,7458,7460,7462],{"class":92,"line":93},[90,7457,97],{"class":96},[90,7459,101],{"class":100},[90,7461,104],{"class":96},[90,7463,107],{"class":100},[90,7465,7466,7468,7470,7472,7474,7476,7478,7480,7482,7484],{"class":92,"line":110},[90,7467,1407],{"class":96},[90,7469,1410],{"class":100},[90,7471,135],{"class":128},[90,7473,1415],{"class":100},[90,7475,135],{"class":128},[90,7477,1420],{"class":100},[90,7479,135],{"class":128},[90,7481,1425],{"class":100},[90,7483,97],{"class":96},[90,7485,1430],{"class":100},[90,7487,7488],{"class":92,"line":117},[90,7489,114],{"emptyLinePlaceholder":113},[90,7491,7492,7494,7496,7498,7500,7502,7504,7506],{"class":92,"line":122},[90,7493,458],{"class":100},[90,7495,129],{"class":128},[90,7497,132],{"class":100},[90,7499,135],{"class":128},[90,7501,139],{"class":138},[90,7503,135],{"class":128},[90,7505,145],{"class":144},[90,7507,148],{"class":128},[90,7509,7510],{"class":92,"line":151},[90,7511,154],{"class":128},[90,7513,7514],{"class":92,"line":157},[90,7515,1461],{"class":160},[90,7517,7518],{"class":92,"line":164},[90,7519,1466],{"class":160},[90,7521,7522],{"class":92,"line":170},[90,7523,1471],{"class":160},[90,7525,7526],{"class":92,"line":176},[90,7527,1476],{"class":160},[90,7529,7530],{"class":92,"line":182},[90,7531,1481],{"class":160},[90,7533,7534],{"class":92,"line":188},[90,7535,154],{"class":128},[90,7537,7538,7540,7542,7544,7546,7548,7550,7552,7554,7556,7558,7560,7562,7564,7566,7568,7570,7572,7574,7576,7578,7580,7582,7584,7586,7588,7590],{"class":92,"line":193},[90,7539,312],{"class":128},[90,7541,315],{"class":144},[90,7543,278],{"class":128},[90,7545,329],{"class":144},[90,7547,135],{"class":128},[90,7549,369],{"class":138},[90,7551,135],{"class":128},[90,7553,766],{"class":138},[90,7555,284],{"class":128},[90,7557,1508],{"class":323},[90,7559,129],{"class":128},[90,7561,329],{"class":144},[90,7563,135],{"class":128},[90,7565,1517],{"class":144},[90,7567,278],{"class":128},[90,7569,329],{"class":144},[90,7571,135],{"class":128},[90,7573,369],{"class":138},[90,7575,135],{"class":128},[90,7577,1530],{"class":138},[90,7579,284],{"class":128},[90,7581,132],{"class":144},[90,7583,135],{"class":128},[90,7585,369],{"class":138},[90,7587,135],{"class":128},[90,7589,1543],{"class":138},[90,7591,1546],{"class":128},[90,7593,7594],{"class":92,"line":199},[90,7595,114],{"emptyLinePlaceholder":113},[90,7597,7598,7600,7602,7604,7606,7608,7610,7612],{"class":92,"line":219},[90,7599,1555],{"class":100},[90,7601,129],{"class":128},[90,7603,132],{"class":100},[90,7605,135],{"class":128},[90,7607,139],{"class":138},[90,7609,135],{"class":128},[90,7611,145],{"class":144},[90,7613,148],{"class":128},[90,7615,7616],{"class":92,"line":224},[90,7617,154],{"class":128},[90,7619,7620],{"class":92,"line":229},[90,7621,1578],{"class":160},[90,7623,7624],{"class":92,"line":235},[90,7625,1583],{"class":160},[90,7627,7628],{"class":92,"line":241},[90,7629,1588],{"class":160},[90,7631,7632],{"class":92,"line":247},[90,7633,1593],{"class":160},[90,7635,7636],{"class":92,"line":252},[90,7637,1598],{"class":160},[90,7639,7640],{"class":92,"line":257},[90,7641,1603],{"class":160},[90,7643,7644],{"class":92,"line":262},[90,7645,1608],{"class":160},[90,7647,7648],{"class":92,"line":320},[90,7649,154],{"class":128},[90,7651,7652,7654,7656,7658,7660,7662,7664,7666,7668,7670,7672,7674,7676,7678,7680,7682,7684,7686,7688,7690,7692,7694,7696,7698,7700,7702,7704],{"class":92,"line":377},[90,7653,312],{"class":128},[90,7655,315],{"class":144},[90,7657,278],{"class":128},[90,7659,329],{"class":144},[90,7661,135],{"class":128},[90,7663,369],{"class":138},[90,7665,135],{"class":128},[90,7667,1631],{"class":138},[90,7669,284],{"class":128},[90,7671,1508],{"class":323},[90,7673,129],{"class":128},[90,7675,329],{"class":144},[90,7677,135],{"class":128},[90,7679,1517],{"class":144},[90,7681,278],{"class":128},[90,7683,329],{"class":144},[90,7685,135],{"class":128},[90,7687,369],{"class":138},[90,7689,135],{"class":128},[90,7691,1530],{"class":138},[90,7693,284],{"class":128},[90,7695,132],{"class":144},[90,7697,135],{"class":128},[90,7699,369],{"class":138},[90,7701,135],{"class":128},[90,7703,1543],{"class":138},[90,7705,1546],{"class":128},[90,7707,7708],{"class":92,"line":382},[90,7709,114],{"emptyLinePlaceholder":113},[90,7711,7712,7714,7716,7718,7720,7722,7724,7726,7728,7730,7732,7734,7736,7738,7740,7742,7744,7746],{"class":92,"line":387},[90,7713,1425],{"class":100},[90,7715,129],{"class":128},[90,7717,1682],{"class":144},[90,7719,278],{"class":128},[90,7721,430],{"class":144},[90,7723,135],{"class":128},[90,7725,1691],{"class":138},[90,7727,284],{"class":128},[90,7729,1696],{"class":144},[90,7731,284],{"class":128},[90,7733,1701],{"class":323},[90,7735,129],{"class":128},[90,7737,834],{"class":1706},[90,7739,284],{"class":128},[90,7741,1711],{"class":323},[90,7743,129],{"class":128},[90,7745,1716],{"class":1706},[90,7747,196],{"class":128},[90,7749,7750,7752,7754,7756,7758,7760,7762,7764,7766,7768,7770,7772,7774,7776,7778,7780,7782,7784],{"class":92,"line":598},[90,7751,1723],{"class":100},[90,7753,129],{"class":128},[90,7755,1728],{"class":100},[90,7757,1731],{"class":128},[90,7759,1734],{"class":100},[90,7761,135],{"class":128},[90,7763,1354],{"class":144},[90,7765,278],{"class":128},[90,7767,423],{"class":144},[90,7769,135],{"class":128},[90,7771,1691],{"class":138},[90,7773,284],{"class":128},[90,7775,1751],{"class":323},[90,7777,129],{"class":128},[90,7779,834],{"class":1706},[90,7781,312],{"class":128},[90,7783,315],{"class":144},[90,7785,148],{"class":128},[90,7787,7788,7790,7792,7794,7796,7798,7800,7802,7804,7806,7808,7810,7812,7814,7816],{"class":92,"line":604},[90,7789,1766],{"class":323},[90,7791,129],{"class":128},[90,7793,329],{"class":144},[90,7795,135],{"class":128},[90,7797,369],{"class":138},[90,7799,135],{"class":128},[90,7801,1631],{"class":138},[90,7803,284],{"class":128},[90,7805,1783],{"class":323},[90,7807,129],{"class":128},[90,7809,329],{"class":144},[90,7811,135],{"class":128},[90,7813,369],{"class":138},[90,7815,135],{"class":128},[90,7817,1796],{"class":138},[90,7819,7820],{"class":92,"line":610},[90,7821,196],{"class":128},[90,7823,7824,7826,7828,7830,7832,7834,7836,7838],{"class":92,"line":615},[90,7825,329],{"class":100},[90,7827,135],{"class":128},[90,7829,139],{"class":138},[90,7831,135],{"class":128},[90,7833,398],{"class":144},[90,7835,278],{"class":128},[90,7837,1817],{"class":144},[90,7839,196],{"class":128},[81,7841,7843],{"className":7842,"code":1823,"language":411},[409],[51,7844,1823],{"__ignoreMap":86},[15,7846,1828,7847,1831,7849,135],{},[51,7848,1354],{},[51,7850,1364],{},[81,7852,7853],{"className":83,"code":1836,"language":85,"meta":86,"style":86},[51,7854,7855,7893,7911,7927,7967],{"__ignoreMap":86},[90,7856,7857,7859,7861,7863,7865,7867,7869,7871,7873,7875,7877,7879,7881,7883,7885,7887,7889,7891],{"class":92,"line":93},[90,7858,1425],{"class":100},[90,7860,129],{"class":128},[90,7862,1682],{"class":144},[90,7864,278],{"class":128},[90,7866,430],{"class":144},[90,7868,135],{"class":128},[90,7870,1691],{"class":138},[90,7872,284],{"class":128},[90,7874,1696],{"class":144},[90,7876,284],{"class":128},[90,7878,1701],{"class":323},[90,7880,129],{"class":128},[90,7882,834],{"class":1706},[90,7884,284],{"class":128},[90,7886,1711],{"class":323},[90,7888,129],{"class":128},[90,7890,1716],{"class":1706},[90,7892,196],{"class":128},[90,7894,7895,7897,7899,7901,7903,7905,7907,7909],{"class":92,"line":110},[90,7896,1881],{"class":100},[90,7898,129],{"class":128},[90,7900,1728],{"class":100},[90,7902,1731],{"class":128},[90,7904,1734],{"class":100},[90,7906,135],{"class":128},[90,7908,1364],{"class":144},[90,7910,148],{"class":128},[90,7912,7913,7915,7917,7919,7921,7923,7925],{"class":92,"line":117},[90,7914,1900],{"class":144},[90,7916,135],{"class":128},[90,7918,1691],{"class":138},[90,7920,284],{"class":128},[90,7922,1751],{"class":323},[90,7924,129],{"class":128},[90,7926,1913],{"class":1706},[90,7928,7929,7931,7933,7935,7937,7939,7941,7943,7945,7947,7949,7951,7953,7955,7957,7959,7961,7963,7965],{"class":92,"line":122},[90,7930,312],{"class":128},[90,7932,315],{"class":144},[90,7934,278],{"class":128},[90,7936,1924],{"class":323},[90,7938,129],{"class":128},[90,7940,329],{"class":144},[90,7942,135],{"class":128},[90,7944,369],{"class":138},[90,7946,135],{"class":128},[90,7948,1631],{"class":138},[90,7950,284],{"class":128},[90,7952,1783],{"class":323},[90,7954,129],{"class":128},[90,7956,329],{"class":144},[90,7958,135],{"class":128},[90,7960,369],{"class":138},[90,7962,135],{"class":128},[90,7964,1691],{"class":138},[90,7966,196],{"class":128},[90,7968,7969,7971,7973,7975,7977,7979,7981,7983],{"class":92,"line":151},[90,7970,329],{"class":100},[90,7972,135],{"class":128},[90,7974,139],{"class":138},[90,7976,135],{"class":128},[90,7978,398],{"class":144},[90,7980,278],{"class":128},[90,7982,1971],{"class":144},[90,7984,196],{"class":128},[81,7986,7988],{"className":7987,"code":1977,"language":411},[409],[51,7989,1977],{"__ignoreMap":86},[15,7991,7992,1986,7994,1990,7996,1993,7998,1996],{},[24,7993],{"alt":1984,"src":1985},[51,7995,1989],{},[51,7997,1364],{},[51,7999,1354],{},[15,8001,1999,8002,2002],{},[863,8003,1369],{},[32,8005,2006,8006,2010],{"id":2005},[51,8007,2009],{},[15,8009,2013,8010,2017],{},[51,8011,2016],{},[15,8013,8014],{},[24,8015],{"alt":2022,"src":2023},[15,8017,2026],{},[81,8019,8020],{"className":83,"code":2029,"language":85,"meta":86,"style":86},[51,8021,8022,8032,8054,8058,8062,8078,8086,8094,8098,8102],{"__ignoreMap":86},[90,8023,8024,8026,8028,8030],{"class":92,"line":93},[90,8025,97],{"class":96},[90,8027,101],{"class":100},[90,8029,104],{"class":96},[90,8031,107],{"class":100},[90,8033,8034,8036,8038,8040,8042,8044,8046,8048,8050,8052],{"class":92,"line":110},[90,8035,1407],{"class":96},[90,8037,1410],{"class":100},[90,8039,135],{"class":128},[90,8041,1415],{"class":100},[90,8043,135],{"class":128},[90,8045,1420],{"class":100},[90,8047,135],{"class":128},[90,8049,1425],{"class":100},[90,8051,97],{"class":96},[90,8053,1430],{"class":100},[90,8055,8056],{"class":92,"line":117},[90,8057,114],{"emptyLinePlaceholder":113},[90,8059,8060],{"class":92,"line":122},[90,8061,114],{"emptyLinePlaceholder":113},[90,8063,8064,8066,8068,8070,8072,8074,8076],{"class":92,"line":151},[90,8065,2077],{"class":2076},[90,8067,2081],{"class":2080},[90,8069,278],{"class":128},[90,8071,329],{"class":2080},[90,8073,135],{"class":128},[90,8075,2090],{"class":2080},[90,8077,2093],{"class":128},[90,8079,8080,8082,8084],{"class":92,"line":157},[90,8081,2098],{"class":100},[90,8083,2101],{"class":128},[90,8085,2104],{"class":2080},[90,8087,8088,8090,8092],{"class":92,"line":164},[90,8089,2109],{"class":100},[90,8091,2101],{"class":128},[90,8093,2104],{"class":2080},[90,8095,8096],{"class":92,"line":170},[90,8097,114],{"emptyLinePlaceholder":113},[90,8099,8100],{"class":92,"line":176},[90,8101,114],{"emptyLinePlaceholder":113},[90,8103,8104],{"class":92,"line":182},[90,8105,2127],{"class":2126},[81,8107,8108],{"className":83,"code":2130,"language":85,"meta":86,"style":86},[51,8109,8110,8124,8134,8160,8170,8180,8190,8200,8206],{"__ignoreMap":86},[90,8111,8112,8114,8116,8118,8120,8122],{"class":92,"line":93},[90,8113,2137],{"class":100},[90,8115,129],{"class":128},[90,8117,2142],{"class":128},[90,8119,2145],{"class":160},[90,8121,2148],{"class":128},[90,8123,2151],{"class":2126},[90,8125,8126,8128,8130,8132],{"class":92,"line":110},[90,8127,2156],{"class":100},[90,8129,129],{"class":128},[90,8131,2161],{"class":1706},[90,8133,2151],{"class":2126},[90,8135,8136,8138,8140,8142,8144,8146,8148,8150,8152,8154,8156,8158],{"class":92,"line":117},[90,8137,423],{"class":100},[90,8139,284],{"class":128},[90,8141,2172],{"class":100},[90,8143,129],{"class":128},[90,8145,132],{"class":100},[90,8147,135],{"class":128},[90,8149,2181],{"class":138},[90,8151,135],{"class":128},[90,8153,2186],{"class":138},[90,8155,135],{"class":128},[90,8157,2191],{"class":144},[90,8159,148],{"class":128},[90,8161,8162,8164,8166,8168],{"class":92,"line":122},[90,8163,2198],{"class":323},[90,8165,129],{"class":128},[90,8167,2203],{"class":144},[90,8169,2206],{"class":128},[90,8171,8172,8174,8176,8178],{"class":92,"line":151},[90,8173,2211],{"class":323},[90,8175,129],{"class":128},[90,8177,2216],{"class":144},[90,8179,2206],{"class":128},[90,8181,8182,8184,8186,8188],{"class":92,"line":157},[90,8183,2223],{"class":323},[90,8185,129],{"class":128},[90,8187,2228],{"class":144},[90,8189,2206],{"class":128},[90,8191,8192,8194,8196,8198],{"class":92,"line":164},[90,8193,2235],{"class":323},[90,8195,129],{"class":128},[90,8197,2240],{"class":1706},[90,8199,2206],{"class":128},[90,8201,8202,8204],{"class":92,"line":170},[90,8203,2247],{"class":323},[90,8205,2250],{"class":128},[90,8207,8208],{"class":92,"line":176},[90,8209,196],{"class":128},[15,8211,2257,8212,2262,8214,2266,8216,2270],{},[40,8213,2261],{"href":2260},[51,8215,2265],{},[51,8217,2269],{},[81,8219,8220],{"className":83,"code":2273,"language":85,"meta":86,"style":86},[51,8221,8222,8234,8256,8262,8272,8286,8296],{"__ignoreMap":86},[90,8223,8224,8226,8228,8230,8232],{"class":92,"line":93},[90,8225,2280],{"class":100},[90,8227,129],{"class":128},[90,8229,2142],{"class":128},[90,8231,2287],{"class":160},[90,8233,2290],{"class":128},[90,8235,8236,8238,8240,8242,8244,8246,8248,8250,8252,8254],{"class":92,"line":110},[90,8237,1555],{"class":100},[90,8239,129],{"class":128},[90,8241,132],{"class":100},[90,8243,135],{"class":128},[90,8245,2181],{"class":138},[90,8247,135],{"class":128},[90,8249,2307],{"class":138},[90,8251,135],{"class":128},[90,8253,2312],{"class":144},[90,8255,148],{"class":128},[90,8257,8258,8260],{"class":92,"line":117},[90,8259,2319],{"class":144},[90,8261,2206],{"class":128},[90,8263,8264,8266,8268,8270],{"class":92,"line":122},[90,8265,2223],{"class":323},[90,8267,129],{"class":128},[90,8269,2228],{"class":144},[90,8271,2206],{"class":128},[90,8273,8274,8276,8278,8280,8282,8284],{"class":92,"line":151},[90,8275,2336],{"class":323},[90,8277,129],{"class":128},[90,8279,2148],{"class":128},[90,8281,2269],{"class":160},[90,8283,2148],{"class":128},[90,8285,2206],{"class":128},[90,8287,8288,8290,8292,8294],{"class":92,"line":157},[90,8289,2235],{"class":323},[90,8291,129],{"class":128},[90,8293,2355],{"class":1706},[90,8295,2206],{"class":128},[90,8297,8298],{"class":92,"line":164},[90,8299,196],{"class":128},[15,8301,2364],{},[81,8303,8304],{"className":83,"code":2367,"language":85,"meta":86,"style":86},[51,8305,8306,8356],{"__ignoreMap":86},[90,8307,8308,8310,8312,8314,8316,8318,8320,8322,8324,8326,8328,8330,8332,8334,8336,8338,8340,8342,8344,8346,8348,8350,8352,8354],{"class":92,"line":93},[90,8309,1555],{"class":100},[90,8311,129],{"class":128},[90,8313,1696],{"class":100},[90,8315,135],{"class":128},[90,8317,315],{"class":144},[90,8319,278],{"class":128},[90,8321,1691],{"class":323},[90,8323,129],{"class":128},[90,8325,329],{"class":144},[90,8327,135],{"class":128},[90,8329,1517],{"class":144},[90,8331,278],{"class":128},[90,8333,329],{"class":144},[90,8335,135],{"class":128},[90,8337,369],{"class":138},[90,8339,135],{"class":128},[90,8341,1530],{"class":138},[90,8343,284],{"class":128},[90,8345,132],{"class":144},[90,8347,135],{"class":128},[90,8349,369],{"class":138},[90,8351,135],{"class":128},[90,8353,1543],{"class":138},[90,8355,1546],{"class":128},[90,8357,8358,8360,8362,8364,8366,8368,8370,8372,8374,8376,8378,8380,8382,8384,8386,8388,8390,8392],{"class":92,"line":110},[90,8359,1425],{"class":100},[90,8361,129],{"class":128},[90,8363,1682],{"class":144},[90,8365,278],{"class":128},[90,8367,430],{"class":144},[90,8369,135],{"class":128},[90,8371,1691],{"class":138},[90,8373,284],{"class":128},[90,8375,1696],{"class":144},[90,8377,284],{"class":128},[90,8379,1701],{"class":323},[90,8381,129],{"class":128},[90,8383,834],{"class":1706},[90,8385,284],{"class":128},[90,8387,1711],{"class":323},[90,8389,129],{"class":128},[90,8391,1716],{"class":1706},[90,8393,196],{"class":128},[15,8395,2460,8396,2463],{},[51,8397,1364],{},[81,8399,8400],{"className":83,"code":2466,"language":85,"meta":86,"style":86},[51,8401,8402,8452,8490,8506],{"__ignoreMap":86},[90,8403,8404,8406,8408,8410,8412,8414,8416,8418,8420,8422,8424,8426,8428,8430,8432,8434,8436,8438,8440,8442,8444,8446,8448,8450],{"class":92,"line":93},[90,8405,458],{"class":100},[90,8407,129],{"class":128},[90,8409,709],{"class":100},[90,8411,135],{"class":128},[90,8413,315],{"class":144},[90,8415,278],{"class":128},[90,8417,1691],{"class":323},[90,8419,129],{"class":128},[90,8421,329],{"class":144},[90,8423,135],{"class":128},[90,8425,1517],{"class":144},[90,8427,278],{"class":128},[90,8429,329],{"class":144},[90,8431,135],{"class":128},[90,8433,369],{"class":138},[90,8435,135],{"class":128},[90,8437,1530],{"class":138},[90,8439,284],{"class":128},[90,8441,132],{"class":144},[90,8443,135],{"class":128},[90,8445,369],{"class":138},[90,8447,135],{"class":128},[90,8449,1543],{"class":138},[90,8451,1546],{"class":128},[90,8453,8454,8456,8458,8460,8462,8464,8466,8468,8470,8472,8474,8476,8478,8480,8482,8484,8486,8488],{"class":92,"line":110},[90,8455,265],{"class":100},[90,8457,129],{"class":128},[90,8459,1728],{"class":100},[90,8461,1731],{"class":128},[90,8463,1734],{"class":100},[90,8465,135],{"class":128},[90,8467,1364],{"class":144},[90,8469,278],{"class":128},[90,8471,423],{"class":144},[90,8473,135],{"class":128},[90,8475,1691],{"class":138},[90,8477,284],{"class":128},[90,8479,1751],{"class":323},[90,8481,129],{"class":128},[90,8483,834],{"class":1706},[90,8485,312],{"class":128},[90,8487,315],{"class":144},[90,8489,148],{"class":128},[90,8491,8492,8494,8496,8498,8500,8502,8504],{"class":92,"line":117},[90,8493,2561],{"class":323},[90,8495,129],{"class":128},[90,8497,329],{"class":144},[90,8499,135],{"class":128},[90,8501,369],{"class":138},[90,8503,135],{"class":128},[90,8505,1796],{"class":138},[90,8507,8508],{"class":92,"line":122},[90,8509,196],{"class":128},[15,8511,2580,8512,2584,8514],{},[51,8513,2583],{},[40,8515,8516],{"href":2587},[51,8517,2191],{},[81,8519,8520],{"className":83,"code":2592,"language":85,"meta":86,"style":86},[51,8521,8522],{"__ignoreMap":86},[90,8523,8524,8526,8528,8530],{"class":92,"line":93},[90,8525,2583],{"class":144},[90,8527,278],{"class":128},[90,8529,403],{"class":144},[90,8531,196],{"class":128},[15,8533,2607],{},[81,8535,8536],{"className":2610,"code":2611,"language":2612,"meta":2613,"style":86},[51,8537,8538],{"__ignoreMap":86},[90,8539,8540,8542,8544,8546,8548,8550,8552,8554,8556,8558],{"class":92,"line":93},[90,8541,2620],{"class":2080},[90,8543,2623],{"class":160},[90,8545,2626],{"class":128},[90,8547,2629],{"class":144},[90,8549,2632],{"class":160},[90,8551,2142],{"class":128},[90,8553,2637],{"class":160},[90,8555,2148],{"class":128},[90,8557,2642],{"class":128},[90,8559,2645],{"class":160},[15,8561,2648],{},[81,8563,8564],{"className":83,"code":2651,"language":85,"meta":86,"style":86},[51,8565,8566],{"__ignoreMap":86},[90,8567,8568,8570,8572,8574],{"class":92,"line":93},[90,8569,329],{"class":100},[90,8571,135],{"class":128},[90,8573,2662],{"class":144},[90,8575,688],{"class":128},[15,8577,2667],{},[81,8579,8580],{"className":83,"code":2670,"language":85,"meta":86,"style":86},[51,8581,8582,8592,8614,8620,8624,8628,8644,8652,8660,8664,8668,8700,8726,8736,8746,8756,8766,8772,8776,8798,8804,8814,8828,8838,8842,8892,8896,8934,8938,8988,8992,9030,9046,9050,9054,9064,9068,9078,9082,9086,9102,9116,9134,9164,9198,9212],{"__ignoreMap":86},[90,8583,8584,8586,8588,8590],{"class":92,"line":93},[90,8585,97],{"class":96},[90,8587,101],{"class":100},[90,8589,104],{"class":96},[90,8591,107],{"class":100},[90,8593,8594,8596,8598,8600,8602,8604,8606,8608,8610,8612],{"class":92,"line":110},[90,8595,1407],{"class":96},[90,8597,1410],{"class":100},[90,8599,135],{"class":128},[90,8601,1415],{"class":100},[90,8603,135],{"class":128},[90,8605,1420],{"class":100},[90,8607,135],{"class":128},[90,8609,1425],{"class":100},[90,8611,97],{"class":96},[90,8613,1430],{"class":100},[90,8615,8616,8618],{"class":92,"line":117},[90,8617,97],{"class":96},[90,8619,2711],{"class":100},[90,8621,8622],{"class":92,"line":122},[90,8623,114],{"emptyLinePlaceholder":113},[90,8625,8626],{"class":92,"line":151},[90,8627,114],{"emptyLinePlaceholder":113},[90,8629,8630,8632,8634,8636,8638,8640,8642],{"class":92,"line":157},[90,8631,2077],{"class":2076},[90,8633,2081],{"class":2080},[90,8635,278],{"class":128},[90,8637,329],{"class":2080},[90,8639,135],{"class":128},[90,8641,2090],{"class":2080},[90,8643,2093],{"class":128},[90,8645,8646,8648,8650],{"class":92,"line":164},[90,8647,2098],{"class":100},[90,8649,2101],{"class":128},[90,8651,2104],{"class":2080},[90,8653,8654,8656,8658],{"class":92,"line":170},[90,8655,2109],{"class":100},[90,8657,2101],{"class":128},[90,8659,2104],{"class":2080},[90,8661,8662],{"class":92,"line":176},[90,8663,114],{"emptyLinePlaceholder":113},[90,8665,8666],{"class":92,"line":182},[90,8667,114],{"emptyLinePlaceholder":113},[90,8669,8670,8672,8674,8676,8678,8680,8682,8684,8686,8688,8690,8692,8694,8696,8698],{"class":92,"line":188},[90,8671,2764],{"class":2076},[90,8673,2767],{"class":144},[90,8675,278],{"class":128},[90,8677,2772],{"class":323},[90,8679,2101],{"class":128},[90,8681,2777],{"class":2080},[90,8683,284],{"class":128},[90,8685,2782],{"class":323},[90,8687,2101],{"class":128},[90,8689,2777],{"class":2080},[90,8691,284],{"class":128},[90,8693,2791],{"class":323},[90,8695,2101],{"class":128},[90,8697,2796],{"class":2080},[90,8699,2093],{"class":128},[90,8701,8702,8704,8706,8708,8710,8712,8714,8716,8718,8720,8722,8724],{"class":92,"line":193},[90,8703,1900],{"class":100},[90,8705,284],{"class":128},[90,8707,2172],{"class":100},[90,8709,129],{"class":128},[90,8711,132],{"class":100},[90,8713,135],{"class":128},[90,8715,2181],{"class":138},[90,8717,135],{"class":128},[90,8719,2186],{"class":138},[90,8721,135],{"class":128},[90,8723,2191],{"class":144},[90,8725,148],{"class":128},[90,8727,8728,8730,8732,8734],{"class":92,"line":199},[90,8729,2829],{"class":323},[90,8731,129],{"class":128},[90,8733,2203],{"class":144},[90,8735,2206],{"class":128},[90,8737,8738,8740,8742,8744],{"class":92,"line":219},[90,8739,2840],{"class":323},[90,8741,129],{"class":128},[90,8743,2216],{"class":144},[90,8745,2206],{"class":128},[90,8747,8748,8750,8752,8754],{"class":92,"line":224},[90,8749,2851],{"class":323},[90,8751,129],{"class":128},[90,8753,2228],{"class":144},[90,8755,2206],{"class":128},[90,8757,8758,8760,8762,8764],{"class":92,"line":229},[90,8759,2862],{"class":323},[90,8761,129],{"class":128},[90,8763,2240],{"class":1706},[90,8765,2206],{"class":128},[90,8767,8768,8770],{"class":92,"line":235},[90,8769,2873],{"class":323},[90,8771,2250],{"class":128},[90,8773,8774],{"class":92,"line":241},[90,8775,2880],{"class":128},[90,8777,8778,8780,8782,8784,8786,8788,8790,8792,8794,8796],{"class":92,"line":247},[90,8779,2885],{"class":100},[90,8781,129],{"class":128},[90,8783,132],{"class":100},[90,8785,135],{"class":128},[90,8787,2181],{"class":138},[90,8789,135],{"class":128},[90,8791,2307],{"class":138},[90,8793,135],{"class":128},[90,8795,2312],{"class":144},[90,8797,148],{"class":128},[90,8799,8800,8802],{"class":92,"line":252},[90,8801,2908],{"class":144},[90,8803,2206],{"class":128},[90,8805,8806,8808,8810,8812],{"class":92,"line":257},[90,8807,2851],{"class":323},[90,8809,129],{"class":128},[90,8811,2228],{"class":144},[90,8813,2206],{"class":128},[90,8815,8816,8818,8820,8822,8824,8826],{"class":92,"line":262},[90,8817,2925],{"class":323},[90,8819,129],{"class":128},[90,8821,2148],{"class":128},[90,8823,2269],{"class":160},[90,8825,2148],{"class":128},[90,8827,2206],{"class":128},[90,8829,8830,8832,8834,8836],{"class":92,"line":320},[90,8831,2862],{"class":323},[90,8833,129],{"class":128},[90,8835,2355],{"class":1706},[90,8837,2206],{"class":128},[90,8839,8840],{"class":92,"line":377},[90,8841,2880],{"class":128},[90,8843,8844,8846,8848,8850,8852,8854,8856,8858,8860,8862,8864,8866,8868,8870,8872,8874,8876,8878,8880,8882,8884,8886,8888,8890],{"class":92,"line":382},[90,8845,2885],{"class":100},[90,8847,129],{"class":128},[90,8849,1696],{"class":100},[90,8851,135],{"class":128},[90,8853,315],{"class":144},[90,8855,278],{"class":128},[90,8857,1691],{"class":323},[90,8859,129],{"class":128},[90,8861,329],{"class":144},[90,8863,135],{"class":128},[90,8865,1517],{"class":144},[90,8867,278],{"class":128},[90,8869,329],{"class":144},[90,8871,135],{"class":128},[90,8873,369],{"class":138},[90,8875,135],{"class":128},[90,8877,1530],{"class":138},[90,8879,284],{"class":128},[90,8881,132],{"class":144},[90,8883,135],{"class":128},[90,8885,369],{"class":138},[90,8887,135],{"class":128},[90,8889,1543],{"class":138},[90,8891,1546],{"class":128},[90,8893,8894],{"class":92,"line":387},[90,8895,114],{"emptyLinePlaceholder":113},[90,8897,8898,8900,8902,8904,8906,8908,8910,8912,8914,8916,8918,8920,8922,8924,8926,8928,8930,8932],{"class":92,"line":598},[90,8899,3008],{"class":100},[90,8901,129],{"class":128},[90,8903,1682],{"class":144},[90,8905,278],{"class":128},[90,8907,430],{"class":144},[90,8909,135],{"class":128},[90,8911,1691],{"class":138},[90,8913,284],{"class":128},[90,8915,1696],{"class":144},[90,8917,284],{"class":128},[90,8919,1701],{"class":323},[90,8921,129],{"class":128},[90,8923,834],{"class":1706},[90,8925,284],{"class":128},[90,8927,1711],{"class":323},[90,8929,129],{"class":128},[90,8931,1716],{"class":1706},[90,8933,196],{"class":128},[90,8935,8936],{"class":92,"line":604},[90,8937,114],{"emptyLinePlaceholder":113},[90,8939,8940,8942,8944,8946,8948,8950,8952,8954,8956,8958,8960,8962,8964,8966,8968,8970,8972,8974,8976,8978,8980,8982,8984,8986],{"class":92,"line":610},[90,8941,3051],{"class":100},[90,8943,129],{"class":128},[90,8945,709],{"class":100},[90,8947,135],{"class":128},[90,8949,315],{"class":144},[90,8951,278],{"class":128},[90,8953,1691],{"class":323},[90,8955,129],{"class":128},[90,8957,329],{"class":144},[90,8959,135],{"class":128},[90,8961,1517],{"class":144},[90,8963,278],{"class":128},[90,8965,329],{"class":144},[90,8967,135],{"class":128},[90,8969,369],{"class":138},[90,8971,135],{"class":128},[90,8973,1530],{"class":138},[90,8975,284],{"class":128},[90,8977,132],{"class":144},[90,8979,135],{"class":128},[90,8981,369],{"class":138},[90,8983,135],{"class":128},[90,8985,1543],{"class":138},[90,8987,1546],{"class":128},[90,8989,8990],{"class":92,"line":615},[90,8991,114],{"emptyLinePlaceholder":113},[90,8993,8994,8996,8998,9000,9002,9004,9006,9008,9010,9012,9014,9016,9018,9020,9022,9024,9026,9028],{"class":92,"line":620},[90,8995,3106],{"class":100},[90,8997,129],{"class":128},[90,8999,1728],{"class":100},[90,9001,1731],{"class":128},[90,9003,1734],{"class":100},[90,9005,135],{"class":128},[90,9007,1364],{"class":144},[90,9009,278],{"class":128},[90,9011,423],{"class":144},[90,9013,135],{"class":128},[90,9015,1691],{"class":138},[90,9017,284],{"class":128},[90,9019,1751],{"class":323},[90,9021,129],{"class":128},[90,9023,834],{"class":1706},[90,9025,312],{"class":128},[90,9027,315],{"class":144},[90,9029,148],{"class":128},[90,9031,9032,9034,9036,9038,9040,9042,9044],{"class":92,"line":656},[90,9033,3145],{"class":323},[90,9035,129],{"class":128},[90,9037,329],{"class":144},[90,9039,135],{"class":128},[90,9041,369],{"class":138},[90,9043,135],{"class":128},[90,9045,1796],{"class":138},[90,9047,9048],{"class":92,"line":691},[90,9049,2880],{"class":128},[90,9051,9052],{"class":92,"line":696},[90,9053,114],{"emptyLinePlaceholder":113},[90,9055,9056,9058,9060,9062],{"class":92,"line":701},[90,9057,3170],{"class":144},[90,9059,278],{"class":128},[90,9061,403],{"class":144},[90,9063,196],{"class":128},[90,9065,9066],{"class":92,"line":718},[90,9067,114],{"emptyLinePlaceholder":113},[90,9069,9070,9072,9074,9076],{"class":92,"line":749},[90,9071,659],{"class":100},[90,9073,135],{"class":128},[90,9075,2662],{"class":144},[90,9077,688],{"class":128},[90,9079,9080],{"class":92,"line":796},[90,9081,114],{"emptyLinePlaceholder":113},[90,9083,9084],{"class":92,"line":801},[90,9085,114],{"emptyLinePlaceholder":113},[90,9087,9088,9090,9092,9094,9096,9098,9100],{"class":92,"line":3201},[90,9089,3204],{"class":96},[90,9091,3207],{"class":100},[90,9093,3210],{"class":128},[90,9095,2142],{"class":128},[90,9097,3215],{"class":160},[90,9099,2148],{"class":128},[90,9101,3220],{"class":128},[90,9103,9104,9106,9108,9110,9112,9114],{"class":92,"line":3223},[90,9105,3226],{"class":100},[90,9107,129],{"class":128},[90,9109,3231],{"class":100},[90,9111,135],{"class":128},[90,9113,3236],{"class":144},[90,9115,688],{"class":128},[90,9117,9118,9120,9122,9124,9126,9128,9130,9132],{"class":92,"line":3241},[90,9119,3244],{"class":100},[90,9121,135],{"class":128},[90,9123,3249],{"class":144},[90,9125,278],{"class":128},[90,9127,2148],{"class":128},[90,9129,2772],{"class":160},[90,9131,2148],{"class":128},[90,9133,196],{"class":128},[90,9135,9136,9138,9140,9142,9144,9146,9148,9150,9152,9154,9156,9158,9160,9162],{"class":92,"line":3262},[90,9137,3244],{"class":100},[90,9139,135],{"class":128},[90,9141,3249],{"class":144},[90,9143,278],{"class":128},[90,9145,2148],{"class":128},[90,9147,3275],{"class":160},[90,9149,2148],{"class":128},[90,9151,284],{"class":128},[90,9153,3282],{"class":323},[90,9155,129],{"class":128},[90,9157,2148],{"class":128},[90,9159,2145],{"class":160},[90,9161,2148],{"class":128},[90,9163,196],{"class":128},[90,9165,9166,9168,9170,9172,9174,9176,9178,9180,9182,9184,9186,9188,9190,9192,9194,9196],{"class":92,"line":3295},[90,9167,3244],{"class":100},[90,9169,135],{"class":128},[90,9171,3249],{"class":144},[90,9173,278],{"class":128},[90,9175,2148],{"class":128},[90,9177,3308],{"class":160},[90,9179,2148],{"class":128},[90,9181,284],{"class":128},[90,9183,3315],{"class":323},[90,9185,129],{"class":128},[90,9187,3320],{"class":2080},[90,9189,284],{"class":128},[90,9191,3282],{"class":323},[90,9193,129],{"class":128},[90,9195,3329],{"class":1706},[90,9197,196],{"class":128},[90,9199,9200,9202,9204,9206,9208,9210],{"class":92,"line":3334},[90,9201,3337],{"class":100},[90,9203,129],{"class":128},[90,9205,3342],{"class":100},[90,9207,135],{"class":128},[90,9209,3347],{"class":144},[90,9211,688],{"class":128},[90,9213,9214,9216,9218,9220,9222,9224,9226,9228,9230,9232,9234,9236,9238,9240,9242,9244,9246,9248,9250,9252],{"class":92,"line":3352},[90,9215,3355],{"class":144},[90,9217,278],{"class":128},[90,9219,2772],{"class":323},[90,9221,129],{"class":128},[90,9223,3364],{"class":144},[90,9225,135],{"class":128},[90,9227,2772],{"class":138},[90,9229,284],{"class":128},[90,9231,2782],{"class":323},[90,9233,129],{"class":128},[90,9235,3364],{"class":144},[90,9237,135],{"class":128},[90,9239,2203],{"class":138},[90,9241,284],{"class":128},[90,9243,2791],{"class":323},[90,9245,129],{"class":128},[90,9247,3364],{"class":144},[90,9249,135],{"class":128},[90,9251,2216],{"class":138},[90,9253,196],{"class":128},[15,9255,3397],{},[81,9257,9258],{"className":2610,"code":3400,"language":2612,"meta":2613,"style":86},[51,9259,9260],{"__ignoreMap":86},[90,9261,9262,9264,9266,9268,9270,9272],{"class":92,"line":93},[90,9263,3407],{"class":2080},[90,9265,3410],{"class":160},[90,9267,3413],{"class":128},[90,9269,3416],{"class":160},[90,9271,3419],{"class":128},[90,9273,3422],{"class":160},[15,9275,3425],{},[81,9277,9278],{"className":2610,"code":3428,"language":2612,"meta":2613,"style":86},[51,9279,9280],{"__ignoreMap":86},[90,9281,9282,9284,9286,9288,9290,9292,9294],{"class":92,"line":93},[90,9283,3435],{"class":144},[90,9285,2632],{"class":160},[90,9287,2142],{"class":128},[90,9289,3442],{"class":160},[90,9291,2148],{"class":128},[90,9293,2642],{"class":128},[90,9295,3449],{"class":160},[15,9297,3452],{},[81,9299,9300],{"className":2610,"code":3400,"language":2612,"meta":2613,"style":86},[51,9301,9302],{"__ignoreMap":86},[90,9303,9304,9306,9308,9310,9312,9314],{"class":92,"line":93},[90,9305,3407],{"class":2080},[90,9307,3410],{"class":160},[90,9309,3413],{"class":128},[90,9311,3416],{"class":160},[90,9313,3419],{"class":128},[90,9315,3422],{"class":160},[15,9317,3473],{},[15,9319,3476,9320,3479,9322,3482,9324,3489,9328,3493],{},[51,9321,1354],{},[51,9323,1364],{},[40,9325,9326],{"href":3485},[51,9327,3488],{},[51,9329,3492],{},[81,9331,9332],{"className":83,"code":3496,"language":85,"meta":86,"style":86},[51,9333,9334,9344,9366,9372,9378,9382,9386,9402,9410,9418,9422,9426,9458,9484,9494,9504,9514,9524,9530,9534,9556,9562,9572,9586,9596,9600,9650,9654,9692,9696,9746,9750,9788,9804,9808,9812,9822,9826,9850,9858,9876,9894,9904,9926,9930,9934,9956,9960,9970,9974,9978,9994,10008,10026,10056,10090,10104],{"__ignoreMap":86},[90,9335,9336,9338,9340,9342],{"class":92,"line":93},[90,9337,97],{"class":96},[90,9339,101],{"class":100},[90,9341,104],{"class":96},[90,9343,107],{"class":100},[90,9345,9346,9348,9350,9352,9354,9356,9358,9360,9362,9364],{"class":92,"line":110},[90,9347,1407],{"class":96},[90,9349,1410],{"class":100},[90,9351,135],{"class":128},[90,9353,1415],{"class":100},[90,9355,135],{"class":128},[90,9357,1420],{"class":100},[90,9359,135],{"class":128},[90,9361,1425],{"class":100},[90,9363,97],{"class":96},[90,9365,1430],{"class":100},[90,9367,9368,9370],{"class":92,"line":117},[90,9369,97],{"class":96},[90,9371,2711],{"class":100},[90,9373,9374,9376],{"class":92,"line":122},[90,9375,97],{"class":96},[90,9377,3543],{"class":100},[90,9379,9380],{"class":92,"line":151},[90,9381,114],{"emptyLinePlaceholder":113},[90,9383,9384],{"class":92,"line":157},[90,9385,114],{"emptyLinePlaceholder":113},[90,9387,9388,9390,9392,9394,9396,9398,9400],{"class":92,"line":164},[90,9389,2077],{"class":2076},[90,9391,2081],{"class":2080},[90,9393,278],{"class":128},[90,9395,329],{"class":2080},[90,9397,135],{"class":128},[90,9399,2090],{"class":2080},[90,9401,2093],{"class":128},[90,9403,9404,9406,9408],{"class":92,"line":170},[90,9405,2098],{"class":100},[90,9407,2101],{"class":128},[90,9409,2104],{"class":2080},[90,9411,9412,9414,9416],{"class":92,"line":176},[90,9413,2109],{"class":100},[90,9415,2101],{"class":128},[90,9417,2104],{"class":2080},[90,9419,9420],{"class":92,"line":182},[90,9421,114],{"emptyLinePlaceholder":113},[90,9423,9424],{"class":92,"line":188},[90,9425,114],{"emptyLinePlaceholder":113},[90,9427,9428,9430,9432,9434,9436,9438,9440,9442,9444,9446,9448,9450,9452,9454,9456],{"class":92,"line":193},[90,9429,2764],{"class":2076},[90,9431,2767],{"class":144},[90,9433,278],{"class":128},[90,9435,2772],{"class":323},[90,9437,2101],{"class":128},[90,9439,2777],{"class":2080},[90,9441,284],{"class":128},[90,9443,2782],{"class":323},[90,9445,2101],{"class":128},[90,9447,2777],{"class":2080},[90,9449,284],{"class":128},[90,9451,2791],{"class":323},[90,9453,2101],{"class":128},[90,9455,2796],{"class":2080},[90,9457,2093],{"class":128},[90,9459,9460,9462,9464,9466,9468,9470,9472,9474,9476,9478,9480,9482],{"class":92,"line":199},[90,9461,1900],{"class":100},[90,9463,284],{"class":128},[90,9465,2172],{"class":100},[90,9467,129],{"class":128},[90,9469,132],{"class":100},[90,9471,135],{"class":128},[90,9473,2181],{"class":138},[90,9475,135],{"class":128},[90,9477,2186],{"class":138},[90,9479,135],{"class":128},[90,9481,2191],{"class":144},[90,9483,148],{"class":128},[90,9485,9486,9488,9490,9492],{"class":92,"line":219},[90,9487,2829],{"class":323},[90,9489,129],{"class":128},[90,9491,2203],{"class":144},[90,9493,2206],{"class":128},[90,9495,9496,9498,9500,9502],{"class":92,"line":224},[90,9497,2840],{"class":323},[90,9499,129],{"class":128},[90,9501,2216],{"class":144},[90,9503,2206],{"class":128},[90,9505,9506,9508,9510,9512],{"class":92,"line":229},[90,9507,2851],{"class":323},[90,9509,129],{"class":128},[90,9511,2228],{"class":144},[90,9513,2206],{"class":128},[90,9515,9516,9518,9520,9522],{"class":92,"line":235},[90,9517,2862],{"class":323},[90,9519,129],{"class":128},[90,9521,2240],{"class":1706},[90,9523,2206],{"class":128},[90,9525,9526,9528],{"class":92,"line":241},[90,9527,2873],{"class":323},[90,9529,2250],{"class":128},[90,9531,9532],{"class":92,"line":247},[90,9533,2880],{"class":128},[90,9535,9536,9538,9540,9542,9544,9546,9548,9550,9552,9554],{"class":92,"line":252},[90,9537,2885],{"class":100},[90,9539,129],{"class":128},[90,9541,132],{"class":100},[90,9543,135],{"class":128},[90,9545,2181],{"class":138},[90,9547,135],{"class":128},[90,9549,2307],{"class":138},[90,9551,135],{"class":128},[90,9553,2312],{"class":144},[90,9555,148],{"class":128},[90,9557,9558,9560],{"class":92,"line":257},[90,9559,2908],{"class":144},[90,9561,2206],{"class":128},[90,9563,9564,9566,9568,9570],{"class":92,"line":262},[90,9565,2851],{"class":323},[90,9567,129],{"class":128},[90,9569,2228],{"class":144},[90,9571,2206],{"class":128},[90,9573,9574,9576,9578,9580,9582,9584],{"class":92,"line":320},[90,9575,2925],{"class":323},[90,9577,129],{"class":128},[90,9579,2148],{"class":128},[90,9581,2269],{"class":160},[90,9583,2148],{"class":128},[90,9585,2206],{"class":128},[90,9587,9588,9590,9592,9594],{"class":92,"line":377},[90,9589,2862],{"class":323},[90,9591,129],{"class":128},[90,9593,2355],{"class":1706},[90,9595,2206],{"class":128},[90,9597,9598],{"class":92,"line":382},[90,9599,2880],{"class":128},[90,9601,9602,9604,9606,9608,9610,9612,9614,9616,9618,9620,9622,9624,9626,9628,9630,9632,9634,9636,9638,9640,9642,9644,9646,9648],{"class":92,"line":387},[90,9603,2885],{"class":100},[90,9605,129],{"class":128},[90,9607,1696],{"class":100},[90,9609,135],{"class":128},[90,9611,315],{"class":144},[90,9613,278],{"class":128},[90,9615,1691],{"class":323},[90,9617,129],{"class":128},[90,9619,329],{"class":144},[90,9621,135],{"class":128},[90,9623,1517],{"class":144},[90,9625,278],{"class":128},[90,9627,329],{"class":144},[90,9629,135],{"class":128},[90,9631,369],{"class":138},[90,9633,135],{"class":128},[90,9635,1530],{"class":138},[90,9637,284],{"class":128},[90,9639,132],{"class":144},[90,9641,135],{"class":128},[90,9643,369],{"class":138},[90,9645,135],{"class":128},[90,9647,1543],{"class":138},[90,9649,1546],{"class":128},[90,9651,9652],{"class":92,"line":598},[90,9653,114],{"emptyLinePlaceholder":113},[90,9655,9656,9658,9660,9662,9664,9666,9668,9670,9672,9674,9676,9678,9680,9682,9684,9686,9688,9690],{"class":92,"line":604},[90,9657,3008],{"class":100},[90,9659,129],{"class":128},[90,9661,1682],{"class":144},[90,9663,278],{"class":128},[90,9665,430],{"class":144},[90,9667,135],{"class":128},[90,9669,1691],{"class":138},[90,9671,284],{"class":128},[90,9673,1696],{"class":144},[90,9675,284],{"class":128},[90,9677,1701],{"class":323},[90,9679,129],{"class":128},[90,9681,834],{"class":1706},[90,9683,284],{"class":128},[90,9685,1711],{"class":323},[90,9687,129],{"class":128},[90,9689,1716],{"class":1706},[90,9691,196],{"class":128},[90,9693,9694],{"class":92,"line":610},[90,9695,114],{"emptyLinePlaceholder":113},[90,9697,9698,9700,9702,9704,9706,9708,9710,9712,9714,9716,9718,9720,9722,9724,9726,9728,9730,9732,9734,9736,9738,9740,9742,9744],{"class":92,"line":615},[90,9699,3051],{"class":100},[90,9701,129],{"class":128},[90,9703,709],{"class":100},[90,9705,135],{"class":128},[90,9707,315],{"class":144},[90,9709,278],{"class":128},[90,9711,1691],{"class":323},[90,9713,129],{"class":128},[90,9715,329],{"class":144},[90,9717,135],{"class":128},[90,9719,1517],{"class":144},[90,9721,278],{"class":128},[90,9723,329],{"class":144},[90,9725,135],{"class":128},[90,9727,369],{"class":138},[90,9729,135],{"class":128},[90,9731,1530],{"class":138},[90,9733,284],{"class":128},[90,9735,132],{"class":144},[90,9737,135],{"class":128},[90,9739,369],{"class":138},[90,9741,135],{"class":128},[90,9743,1543],{"class":138},[90,9745,1546],{"class":128},[90,9747,9748],{"class":92,"line":620},[90,9749,114],{"emptyLinePlaceholder":113},[90,9751,9752,9754,9756,9758,9760,9762,9764,9766,9768,9770,9772,9774,9776,9778,9780,9782,9784,9786],{"class":92,"line":656},[90,9753,3106],{"class":100},[90,9755,129],{"class":128},[90,9757,1728],{"class":100},[90,9759,1731],{"class":128},[90,9761,1734],{"class":100},[90,9763,135],{"class":128},[90,9765,1354],{"class":144},[90,9767,278],{"class":128},[90,9769,423],{"class":144},[90,9771,135],{"class":128},[90,9773,1691],{"class":138},[90,9775,284],{"class":128},[90,9777,1751],{"class":323},[90,9779,129],{"class":128},[90,9781,834],{"class":1706},[90,9783,312],{"class":128},[90,9785,315],{"class":144},[90,9787,148],{"class":128},[90,9789,9790,9792,9794,9796,9798,9800,9802],{"class":92,"line":691},[90,9791,3145],{"class":323},[90,9793,129],{"class":128},[90,9795,329],{"class":144},[90,9797,135],{"class":128},[90,9799,369],{"class":138},[90,9801,135],{"class":128},[90,9803,1796],{"class":138},[90,9805,9806],{"class":92,"line":696},[90,9807,2880],{"class":128},[90,9809,9810],{"class":92,"line":701},[90,9811,114],{"emptyLinePlaceholder":113},[90,9813,9814,9816,9818,9820],{"class":92,"line":718},[90,9815,3170],{"class":144},[90,9817,278],{"class":128},[90,9819,403],{"class":144},[90,9821,196],{"class":128},[90,9823,9824],{"class":92,"line":749},[90,9825,114],{"emptyLinePlaceholder":113},[90,9827,9828,9830,9832,9834,9836,9838,9840,9842,9844,9846,9848],{"class":92,"line":796},[90,9829,3996],{"class":2076},[90,9831,3999],{"class":144},[90,9833,278],{"class":128},[90,9835,4004],{"class":323},[90,9837,284],{"class":128},[90,9839,4009],{"class":323},[90,9841,284],{"class":128},[90,9843,4014],{"class":323},[90,9845,284],{"class":128},[90,9847,4019],{"class":323},[90,9849,2093],{"class":128},[90,9851,9852,9854,9856],{"class":92,"line":801},[90,9853,4026],{"class":96},[90,9855,4019],{"class":100},[90,9857,3220],{"class":128},[90,9859,9860,9862,9864,9866,9868,9870,9872,9874],{"class":92,"line":3201},[90,9861,4035],{"class":100},[90,9863,129],{"class":128},[90,9865,4009],{"class":100},[90,9867,4042],{"class":128},[90,9869,2148],{"class":128},[90,9871,1691],{"class":160},[90,9873,2148],{"class":128},[90,9875,4051],{"class":128},[90,9877,9878,9880,9882,9884,9886,9888,9890,9892],{"class":92,"line":3223},[90,9879,4056],{"class":100},[90,9881,129],{"class":128},[90,9883,4009],{"class":100},[90,9885,4042],{"class":128},[90,9887,2148],{"class":128},[90,9889,403],{"class":160},[90,9891,2148],{"class":128},[90,9893,4051],{"class":128},[90,9895,9896,9898,9900,9902],{"class":92,"line":3241},[90,9897,4075],{"class":100},[90,9899,135],{"class":128},[90,9901,4080],{"class":144},[90,9903,148],{"class":128},[90,9905,9906,9908,9910,9912,9914,9916,9918,9920,9922,9924],{"class":92,"line":3262},[90,9907,4087],{"class":2076},[90,9909,4090],{"class":160},[90,9911,4093],{"class":1706},[90,9913,4096],{"class":144},[90,9915,4099],{"class":1706},[90,9917,4102],{"class":160},[90,9919,4093],{"class":1706},[90,9921,4107],{"class":144},[90,9923,4099],{"class":1706},[90,9925,4112],{"class":160},[90,9927,9928],{"class":92,"line":3295},[90,9929,4117],{"class":128},[90,9931,9932],{"class":92,"line":3334},[90,9933,114],{"emptyLinePlaceholder":113},[90,9935,9936,9938,9940,9942,9944,9946,9948,9950,9952,9954],{"class":92,"line":3352},[90,9937,659],{"class":100},[90,9939,135],{"class":128},[90,9941,2181],{"class":138},[90,9943,135],{"class":128},[90,9945,4134],{"class":144},[90,9947,278],{"class":128},[90,9949,403],{"class":144},[90,9951,284],{"class":128},[90,9953,3999],{"class":144},[90,9955,196],{"class":128},[90,9957,9958],{"class":92,"line":4147},[90,9959,114],{"emptyLinePlaceholder":113},[90,9961,9962,9964,9966,9968],{"class":92,"line":4152},[90,9963,659],{"class":100},[90,9965,135],{"class":128},[90,9967,2662],{"class":144},[90,9969,688],{"class":128},[90,9971,9972],{"class":92,"line":4163},[90,9973,114],{"emptyLinePlaceholder":113},[90,9975,9976],{"class":92,"line":4168},[90,9977,114],{"emptyLinePlaceholder":113},[90,9979,9980,9982,9984,9986,9988,9990,9992],{"class":92,"line":4173},[90,9981,3204],{"class":96},[90,9983,3207],{"class":100},[90,9985,3210],{"class":128},[90,9987,2142],{"class":128},[90,9989,3215],{"class":160},[90,9991,2148],{"class":128},[90,9993,3220],{"class":128},[90,9995,9996,9998,10000,10002,10004,10006],{"class":92,"line":4190},[90,9997,3226],{"class":100},[90,9999,129],{"class":128},[90,10001,3231],{"class":100},[90,10003,135],{"class":128},[90,10005,3236],{"class":144},[90,10007,688],{"class":128},[90,10009,10010,10012,10014,10016,10018,10020,10022,10024],{"class":92,"line":4205},[90,10011,3244],{"class":100},[90,10013,135],{"class":128},[90,10015,3249],{"class":144},[90,10017,278],{"class":128},[90,10019,2148],{"class":128},[90,10021,2772],{"class":160},[90,10023,2148],{"class":128},[90,10025,196],{"class":128},[90,10027,10028,10030,10032,10034,10036,10038,10040,10042,10044,10046,10048,10050,10052,10054],{"class":92,"line":4224},[90,10029,3244],{"class":100},[90,10031,135],{"class":128},[90,10033,3249],{"class":144},[90,10035,278],{"class":128},[90,10037,2148],{"class":128},[90,10039,3275],{"class":160},[90,10041,2148],{"class":128},[90,10043,284],{"class":128},[90,10045,3282],{"class":323},[90,10047,129],{"class":128},[90,10049,2148],{"class":128},[90,10051,2145],{"class":160},[90,10053,2148],{"class":128},[90,10055,196],{"class":128},[90,10057,10058,10060,10062,10064,10066,10068,10070,10072,10074,10076,10078,10080,10082,10084,10086,10088],{"class":92,"line":4255},[90,10059,3244],{"class":100},[90,10061,135],{"class":128},[90,10063,3249],{"class":144},[90,10065,278],{"class":128},[90,10067,2148],{"class":128},[90,10069,3308],{"class":160},[90,10071,2148],{"class":128},[90,10073,284],{"class":128},[90,10075,3315],{"class":323},[90,10077,129],{"class":128},[90,10079,3320],{"class":2080},[90,10081,284],{"class":128},[90,10083,3282],{"class":323},[90,10085,129],{"class":128},[90,10087,3329],{"class":1706},[90,10089,196],{"class":128},[90,10091,10092,10094,10096,10098,10100,10102],{"class":92,"line":4290},[90,10093,3337],{"class":100},[90,10095,129],{"class":128},[90,10097,3342],{"class":100},[90,10099,135],{"class":128},[90,10101,3347],{"class":144},[90,10103,688],{"class":128},[90,10105,10106,10108,10110,10112,10114,10116,10118,10120,10122,10124,10126,10128,10130,10132,10134,10136,10138,10140,10142,10144],{"class":92,"line":4305},[90,10107,3355],{"class":144},[90,10109,278],{"class":128},[90,10111,2772],{"class":323},[90,10113,129],{"class":128},[90,10115,3364],{"class":144},[90,10117,135],{"class":128},[90,10119,2772],{"class":138},[90,10121,284],{"class":128},[90,10123,2782],{"class":323},[90,10125,129],{"class":128},[90,10127,3364],{"class":144},[90,10129,135],{"class":128},[90,10131,2203],{"class":138},[90,10133,284],{"class":128},[90,10135,2791],{"class":323},[90,10137,129],{"class":128},[90,10139,3364],{"class":144},[90,10141,135],{"class":128},[90,10143,2216],{"class":138},[90,10145,196],{"class":128},[15,10147,4348,10148,4354],{},[40,10149,4353],{"href":4351,"rel":10150},[44],[32,10152,4358],{"id":4357},[15,10154,4361],{},[4363,10156,4365],{},{"title":86,"searchDepth":110,"depth":110,"links":10158},[10159,10160,10161,10162,10163],{"id":34,"depth":110,"text":35},{"id":857,"depth":110,"text":858},{"id":1339,"depth":110,"text":1340},{"id":2005,"depth":110,"text":4372},{"id":4357,"depth":110,"text":4358},{"date":4377,"thumbnail":4378,"tags":10165,"keywords":10166,"notebook_export_path":4387},[4380,4381],[4383,4384,275,4385,2009,4386],{"title":5,"description":4374},{"loc":4388},[10170,10171],{"title":4775,"path":4776,"stem":4777,"children":-1},{"title":4800,"path":4801,"stem":4802,"children":-1},1781214770026]