import%20marimo%0A%0A__generated_with%20%3D%20%220.9.1%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22%2C%20app_title%3D%22Benchmark%22%2C%20auto_download%3D%5B%22html%22%5D)%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%20%20%20%20return%20(mo%2C)%0A%0A%0A%40app.cell%0Adef%20__(mo)%3A%0A%20%20%20%20mo.md(%22%22%22%23%20Benchmark%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20import%20time%0A%0A%20%20%20%20from%20multiprocessing%20import%20cpu_count%0A%0A%20%20%20%20import%20polars%20as%20pl%0A%20%20%20%20import%20polars_sim%20as%20ps%0A%0A%20%20%20%20from%20faker%20import%20Faker%0A%0A%20%20%20%20import%20plotly.express%20as%20px%0A%20%20%20%20return%20Faker%2C%20cpu_count%2C%20pl%2C%20ps%2C%20px%2C%20time%0A%0A%0A%40app.cell%0Adef%20__(mo)%3A%0A%20%20%20%20def%20get_arg(name%3A%20str%2C%20type%2C%20default)%3A%0A%20%20%20%20%20%20%20%20arg_val%20%3D%20mo.cli_args().get(name)%0A%20%20%20%20%20%20%20%20if%20arg_val%20is%20None%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20default%0A%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20type(arg_val)%0A%20%20%20%20return%20(get_arg%2C)%0A%0A%0A%40app.cell%0Adef%20__(get_arg)%3A%0A%20%20%20%20size_left%20%3D%20get_arg(%22size_left%22%2C%20int%2C%205000)%0A%20%20%20%20size_right%20%3D%20get_arg(%22size_right%22%2C%20int%2C%2010_000)%0A%20%20%20%20size_left%2C%20size_right%0A%20%20%20%20return%20size_left%2C%20size_right%0A%0A%0A%40app.cell%0Adef%20__(pl)%3A%0A%20%20%20%20def%20append_row(df%3A%20pl.DataFrame%2C%20data)%3A%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20Append%20a%20row%20to%20a%20polars%20dataframe.%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20return%20pl.concat(%5Bdf%2C%20pl.DataFrame(data)%5D%2C%20how%3D%22vertical_relaxed%22)%0A%20%20%20%20return%20(append_row%2C)%0A%0A%0A%40app.cell%0Adef%20__(Faker%2C%20size_left%2C%20size_right)%3A%0A%20%20%20%20fake%20%3D%20Faker()%0A%20%20%20%20fake.seed_instance(4321)%0A%20%20%20%20names_small%20%3D%20%5Bfake.name()%20for%20_%20in%20range(size_left)%5D%0A%20%20%20%20names_big%20%3D%20%5Bfake.name()%20for%20_%20in%20range(size_right)%5D%0A%20%20%20%20return%20fake%2C%20names_big%2C%20names_small%0A%0A%0A%40app.cell%0Adef%20__(names_big%2C%20names_small%2C%20pl)%3A%0A%20%20%20%20df_left%20%3D%20pl.DataFrame(%7B%22name%22%3A%20names_small%7D)%0A%20%20%20%20df_right%20%3D%20pl.DataFrame(%7B%22name%22%3A%20names_big%7D)%0A%20%20%20%20return%20df_left%2C%20df_right%0A%0A%0A%40app.cell%0Adef%20__(Iterable%2C%20append_row%2C%20pl%2C%20ps%2C%20time)%3A%0A%20%20%20%20def%20benchmark(%0A%20%20%20%20%20%20%20%20df_left%3A%20pl.DataFrame%2C%0A%20%20%20%20%20%20%20%20df_right%3A%20pl.DataFrame%2C%0A%20%20%20%20%20%20%20%20argument_name%3A%20str%2C%0A%20%20%20%20%20%20%20%20argument_values%3A%20Iterable%2C%0A%20%20%20%20%20%20%20%20value_dtype%2C%0A%20%20%20%20%20%20%20%20**kwargs%2C%0A%20%20%20%20)%20-%3E%20pl.DataFrame%3A%0A%0A%20%20%20%20%20%20%20%20if%20kwargs%20is%20None%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20kwargs%20%3D%20%7B%7D%0A%0A%20%20%20%20%20%20%20%20df_bench%20%3D%20pl.DataFrame(%0A%20%20%20%20%20%20%20%20%20%20%20%20schema%3D%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22argument_name%22%3A%20pl.Utf8%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22argument_value%22%3A%20value_dtype%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22time%22%3A%20pl.Float32%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22size_left%22%20%3A%20pl.Int32%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22size_right%22%20%3A%20pl.Int32%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20for%20val%20in%20argument_values%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20kwargs.update(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20argument_name%3A%20val%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20start%20%3D%20time.time()%0A%20%20%20%20%20%20%20%20%20%20%20%20ps.join_sim(df_left%2C%20df_right%2C%20**kwargs)%0A%20%20%20%20%20%20%20%20%20%20%20%20end%20%3D%20time.time()%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20elapsed_time%20%3D%20end%20-%20start%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20df_bench%20%3D%20append_row(%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20df_bench%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22argument_name%22%3A%20argument_name%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22argument_value%22%3A%20val%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22time%22%3A%20elapsed_time%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22size_left%22%20%3A%20len(df_left)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22size_right%22%20%3A%20len(df_right)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20return%20df_bench%0A%20%20%20%20return%20(benchmark%2C)%0A%0A%0A%40app.cell%0Adef%20__(px)%3A%0A%20%20%20%20def%20plot_benchmark(df_bench)%3A%0A%20%20%20%20%20%20%20%20argument_name%20%3D%20df_bench%5B%22argument_name%22%5D.unique()%5B0%5D%0A%20%20%20%20%20%20%20%20size_left%20%3D%20df_bench%5B%22size_left%22%5D.unique()%5B0%5D%0A%20%20%20%20%20%20%20%20size_right%20%3D%20df_bench%5B%22size_right%22%5D.unique()%5B0%5D%0A%0A%20%20%20%20%20%20%20%20fig%20%3D%20px.bar(%0A%20%20%20%20%20%20%20%20%20%20%20%20df_bench%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20x%3D%22argument_value%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20y%3D%22time%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20title%3Df%22Execution%20time%20for%20different%20%7Bargument_name%7D%20values.%3Cbr%3EDataframe%20dimensions%3A%20(%7Bsize_left%7D%2C%7Bsize_right%7D).%22%2C%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20%20%20%20%20return%20fig%0A%20%20%20%20return%20(plot_benchmark%2C)%0A%0A%0A%40app.cell%0Adef%20__(cpu_count%2C%20df_left%2C%20df_right%2C%20pl)%3A%0A%20%20%20%20benchmarks%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%22ntop%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22df_left%22%3A%20df_left%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22df_right%22%3A%20df_right%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22argument_name%22%3A%20%22ntop%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22argument_values%22%3A%20range(1%2C%20100%2C%2010)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22value_dtype%22%3A%20pl.Int32%2C%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%22threads%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22df_left%22%3A%20df_left%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22df_right%22%3A%20df_right%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22argument_name%22%3A%20%22threads%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22argument_values%22%3A%20range(1%2C%20cpu_count()%20%2B%201)%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22value_dtype%22%3A%20pl.Int32%2C%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%20%20%20%20%22normalizat%C3%A5ion%22%3A%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%22df_left%22%3A%20df_left%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22df_right%22%3A%20df_right%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22argument_name%22%3A%20%22normalization%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22argument_values%22%3A%20%5B%22l2%22%2C%20%22count%22%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%22value_dtype%22%3A%20pl.Utf8%2C%0A%20%20%20%20%20%20%20%20%7D%2C%0A%20%20%20%20%7D%0A%20%20%20%20return%20(benchmarks%2C)%0A%0A%0A%40app.cell%0Adef%20__(benchmark%2C%20benchmarks%2C%20plot_benchmark)%3A%0A%20%20%20%20figs%20%3D%20%7B%7D%0A%20%20%20%20for%20name%2C%20kw%20in%20benchmarks.items()%3A%0A%20%20%20%20%20%20%20%20df%20%3D%20benchmark(on%3D%22name%22%2C%20**kw)%0A%20%20%20%20%20%20%20%20figs%5Bname%5D%20%3D%20plot_benchmark(df)%0A%20%20%20%20return%20df%2C%20figs%2C%20kw%2C%20name%0A%0A%0A%40app.cell%0Adef%20__(figs)%3A%0A%20%20%20%20figs%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20__()%3A%0A%20%20%20%20return%0A%0A%0Aif%20__name__%20%3D%3D%20%22__main__%22%3A%0A%20%20%20%20app.run()%0A
b8b879708c3d3b301b2d127d30fdb1e30c1553232a862ccfc21e2dfe5d525191