%23%20%2F%2F%2F%20script%0A%23%20requires-python%20%3D%20%22%3E%3D3.10%22%0A%23%20dependencies%20%3D%20%5B%0A%23%20%20%20%20%20%22anywidget%22%2C%0A%23%20%20%20%20%20%22marimo%22%2C%0A%23%20%20%20%20%20%22marimo-lib%22%2C%0A%23%20%5D%0A%23%0A%23%20%5Btool.uv.sources%5D%0A%23%20marimo-lib%20%3D%20%7B%20git%20%3D%20%22https%3A%2F%2Fgithub.com%2FFumiHubCNS%2Fmarimo-lib%22%20%7D%0A%23%20%2F%2F%2F%0A%0Aimport%20marimo%0A%0A__generated_with%20%3D%20%220.19.9%22%0Aapp%20%3D%20marimo.App(%0A%20%20%20%20width%3D%22medium%22%2C%0A%20%20%20%20layout_file%3D%22layouts%2Fdemo.slides.json%22%2C%0A%20%20%20%20auto_download%3D%5B%22html%22%5D%2C%0A)%0A%0Awith%20app.setup%3A%0A%20%20%20%20%23%20Initialization%20code%20that%20runs%20before%20all%20other%20cells%0A%20%20%20%20import%20marimo_lib.util%20as%20molib%0A%20%20%20%20from%20plotly.subplots%20import%20make_subplots%0A%20%20%20%20import%20random%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20import%20pandas%20as%20pd%0A%20%20%20%20from%20mohtml%20import%20img%0A%20%20%20%20from%20pathlib%20import%20Path%0A%20%20%20%20import%20base64%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20mo.md(r%22%22%22%0A%20%20%20%20%23%20Demo%0A%0A%20%20%20%20%E3%81%93%E3%81%AE%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%81%AE%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%82%92%E3%81%93%E3%81%93%E3%81%AB%E7%A4%BA%E3%81%99%E3%80%82%0A%20%20%20%20%22%22%22)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%0A%20%20%20%20GLOBAL_FIG_WIDTH%3Aint%20%3D%201000%0A%20%20%20%20return%20GLOBAL_FIG_WIDTH%2C%20mo%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20input_path%20%3D%20Path(%22notebook%2Ffigs%2Flogotype-wide.png%22)%0A%20%20%20%20path_mode%20%3D%20%22file_src%22%0A%20%20%20%20if%20not%20input_path.exists()%3A%0A%20%20%20%20%20%20%20%20input_path%20%3D%20'https%3A%2F%2Fraw.githubusercontent.com%2FFumiHubCNS%2Fmarimo-lib%2Fmain%2Fnotebook%2Ffigs%2Flogotype-wide.png'%0A%20%20%20%20%20%20%20%20path_mode%20%3D%20%22data_url%22%0A%0A%20%20%20%20html_test%20%3D%20molib.image.get_image_html(input_path%2C%20mode%3Dpath_mode)%0A%0A%20%20%20%20mo.vstack(%5B%0A%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%23%20%E8%87%AA%E4%BD%9C%E9%96%A2%E6%95%B0%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%23%23%20%60image.py%60%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%E5%9B%B3%E3%81%AE%E6%8F%8F%E7%94%BB%E3%81%AB%E9%96%A2%E3%81%99%E3%82%8B%E9%96%A2%E6%95%B0%E7%BE%A4%E3%80%82%0A%20%20%20%20%20%20%20%20%20%20%20%20%E6%9C%80%E7%B5%82%E7%9A%84%E3%81%AB%E3%81%AFHTML%E3%81%A7%E4%BF%9D%E5%AD%98%E3%82%92%E8%A1%8C%E3%81%84%E3%81%9F%E3%81%84%E3%81%AE%E3%81%A7%E5%9B%B3%E3%82%92%E6%8C%BF%E5%85%A5%E3%81%99%E3%82%8B%E9%9A%9B%E3%81%AF%E3%83%9E%E3%83%BC%E3%82%AF%E3%83%80%E3%82%A6%E3%83%B3%E8%A8%98%E6%B3%95%E3%81%A7%E6%9B%B8%E3%81%8B%E3%81%9A%60base64%60%E3%81%AB%E3%81%A6HTML%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%AB%E3%81%97%E3%81%A6%E5%A4%89%E6%95%B0%E3%81%AB%E6%A0%BC%E7%B4%8D%E3%81%99%E3%82%8B%E3%80%82%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%E6%88%BB%E3%82%8A%E5%80%A4%E3%81%AF%60mo.Html()%60%E3%81%AA%E3%81%AE%E3%81%A7%E3%81%9D%E3%81%AE%E3%81%BE%E3%81%BE%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E6%8F%8F%E7%94%BB%E5%8F%AF%E8%83%BD%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%3Cbr%3E%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20html_test%0A%20%20%20%20%5D)%0A%20%20%20%20return%0A%0A%0A%40app.function%0Adef%20gauss(%0A%20%20%20%20x%2C%0A%20%20%20%20a%3Afloat%20%3D%201.%2C%0A%20%20%20%20mu%3Afloat%20%3D%200.%2C%0A%20%20%20%20sigma%3Afloat%20%3D%201.%0A)%3A%0A%20%20%20%20return%20a*np.exp(-(x-mu)**2%20%2F%20(2.*sigma**2))%0A%0A%0A%40app.cell%0Adef%20_(GLOBAL_FIG_WIDTH%3A%20int%2C%20mo)%3A%0A%20%20%20%20_x%20%20%3D%20np.linspace(-5%2C5%2C100)%0A%20%20%20%20_y%20%20%3D%20gauss(_x%2C%20a%3D10)%0A%20%20%20%20_el%20%3D%20_y%2F_y%0A%20%20%20%20_eu%20%3D%20_y%2F_y%0A%0A%20%20%20%20for%20_i%20in%20range(len(_el))%3A%0A%20%20%20%20%20%20%20%20_el%5B_i%5D%20%3D%20random.random()%0A%20%20%20%20%20%20%20%20_eu%5B_i%5D%20%3D%20random.random()%0A%0A%20%20%20%20x_2d%20%3D%20np.random.normal(loc%3D0%2C%20scale%3D3%2C%20size%3D1000000)%0A%20%20%20%20y_2d%20%3D%20np.random.rayleigh(scale%3D1%2C%20size%3D1000000)%0A%0A%20%20%20%20fig%20%3D%20make_subplots(rows%3D1%2C%20cols%3D2%2C%20vertical_spacing%3D0.15%2C%20horizontal_spacing%3D0.15%2C%20subplot_titles%3D(%5B%221D%20Gaussian%22%2C%222D%20Gaussian%22%5D))%0A%0A%20%20%20%20molib.plot.add_sub_plot(%0A%20%20%20%20%20%20%20%20fig%2C%201%2C%201%2C%20data%3D%5B_x%2C%20_y%5D%2C%20axes_title%3D%5B'Variable'%2C%20'Value'%5D%2C%20%0A%20%20%20%20%20%20%20%20func%3Dmolib.plot.go_Scatter%2C%20%0A%20%20%20%20%20%20%20%20y_error%3D%5B_el%2C%20_eu%5D%2C%20dataname%3D'Data'%2C%20width%3D1%2C%20bar_width%3D2%2C%20size%3D4%0A%20%20%20%20)%0A%0A%20%20%20%20molib.plot.add_sub_plot(%0A%20%20%20%20%20%20%20%20fig%2C%201%2C%202%2C%20data%3D%5Bx_2d%2C%20y_2d%5D%2C%20axes_title%3D%5B'X'%2C%20'Y'%5D%2C%0A%20%20%20%20%20%20%20%20func%3Dmolib.plot.go_Heatmap%2C%0A%20%20%20%20%20%20%20%20bins%3D%5B200%2C%20200%5D%2C%20colormap%3D'Turbo'%0A%20%20%20%20)%0A%0A%20%20%20%20mo.vstack(%5B%0A%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%23%23%20%60plot.py%60%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20plotly%E3%81%AE%E6%8F%8F%E7%94%BB%E3%81%AB%E9%96%A2%E3%81%99%E3%82%8B%E9%96%A2%E6%95%B0%E7%BE%A4%E3%80%82%0A%20%20%20%20%20%20%20%20%20%20%20%20%60plotly.graph_objects.Figure%60%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8B%E9%83%A8%E5%88%86%E3%81%AF%60plotly%60%E3%81%AE%E9%96%A2%E6%95%B0%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E5%AE%A3%E8%A8%80%E3%81%99%E3%82%8B%E3%80%82%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%E5%90%84%E3%80%85%E3%81%AEsub%20plot%E3%81%AB%E6%8F%8F%E7%94%BB%E3%81%99%E3%82%8B%E9%9A%9B%E3%81%AF%60plot.add_sub_plot%60%E3%82%92%E7%94%A8%E3%81%84%E3%81%A6%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF%E3%81%97%E3%81%A6%E3%81%84%E3%81%8F%E3%81%93%E3%81%A8%E3%81%A7%E6%8F%8F%E7%94%BB%E3%81%A7%E3%81%8D%E3%82%8B%E3%80%82%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20fig.update_layout(height%3D500%2C%20width%3DGLOBAL_FIG_WIDTH%2C%20showlegend%3DFalse%2C%20title_text%3D%22%22)%0A%20%20%20%20%5D)%0A%20%20%20%20return%20fig%2C%20x_2d%2C%20y_2d%0A%0A%0A%40app.cell%0Adef%20_(GLOBAL_FIG_WIDTH%3A%20int%2C%20mo%2C%20x_2d%2C%20y_2d)%3A%0A%20%20%20%20_data_x%20%3D%20molib.plot.get_slice_array(%5Bx_2d%2C%20y_2d%5D%2C%20%5B200%2C%20200%5D%2C%20slice_axis%3D'x'%2C%20bin_span%3D50)%0A%20%20%20%20_data_y%20%3D%20molib.plot.get_slice_array(%5Bx_2d%2C%20y_2d%5D%2C%20%5B200%2C%20200%5D%2C%20slice_axis%3D'y'%2C%20bin_span%3D50)%0A%0A%20%20%20%20_fig%20%3D%20make_subplots(%0A%20%20%20%20%20%20%20%20rows%3D1%2C%20cols%3D2%2C%20vertical_spacing%3D0.15%2C%20horizontal_spacing%3D0.15%2C%0A%20%20%20%20%20%20%20%20subplot_titles%3D(%0A%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%221D%20Rayleigh%20distribution%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%221D%20Gaussian%20distribution%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%5D%0A%20%20%20%20%20%20%20%20)%0A%20%20%20%20)%0A%0A%20%20%20%20_data%20%3D%20_data_x%0A%0A%20%20%20%20for%20_i%20in%20range(len(_data))%3A%0A%20%20%20%20%20%20%20%20molib.plot.add_sub_plot(%0A%20%20%20%20%20%20%20%20%20%20%20%20_fig%2C%201%2C%201%2C%20data%3D%5B_data%5B_i%5D%5B'centers'%5D%2C%20_data%5B_i%5D%5B'counts'%5D%5D%2C%20axes_title%3D%5Bf'Variable'%2C%20f'Value'%5D%2C%20log_option%3D'00'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20func%3Dmolib.plot.go_Scatter%2C%20dataname%3Df'%7B_data%5B_i%5D%5B%22slice_axis%22%5D%7D-slice(%7B_data%5B_i%5D%5B%22bin_index%22%5D%7D%3A%7B_data%5B_i%5D%5B%22bin_index%22%5D%2B_data%5B_i%5D%5B%22bin_span%22%5D%7D)'%2Csize%3D8%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20_data%20%3D%20_data_y%0A%0A%20%20%20%20for%20_i%20in%20range(len(_data))%3A%0A%20%20%20%20%20%20%20%20molib.plot.add_sub_plot(%0A%20%20%20%20%20%20%20%20%20%20%20%20_fig%2C%201%2C%202%2C%20data%3D%5B_data%5B_i%5D%5B'centers'%5D%2C%20_data%5B_i%5D%5B'counts'%5D%5D%2C%20axes_title%3D%5Bf'Variable'%2C%20f'Value'%5D%2C%20log_option%3D'00'%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20func%3Dmolib.plot.go_Scatter%2C%20dataname%3Df'%7B_data%5B_i%5D%5B%22slice_axis%22%5D%7D-slice(%7B_data%5B_i%5D%5B%22bin_index%22%5D%7D%3A%7B_data%5B_i%5D%5B%22bin_index%22%5D%2B_data%5B_i%5D%5B%22bin_span%22%5D%7D)'%2Csize%3D8%0A%20%20%20%20%20%20%20%20)%0A%0A%20%20%20%20mo.vstack(%5B%0A%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%23%23%23%20%E4%BA%8C%E6%AC%A1%E5%85%83%E3%83%92%E3%82%B9%E3%83%88%E3%82%B0%E3%83%A9%E3%83%A0%E3%82%92%E3%82%B9%E3%83%A9%E3%82%A4%E3%82%B9%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%60plot.get_slice_array%60%E3%81%AB%E3%81%A6%E5%AE%9F%E8%A1%8C%E5%8F%AF%E8%83%BD%E3%80%82%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%60slice_axis%60%2C%20%60bin_span%60%E3%81%A7%E3%82%B9%E3%83%A9%E3%82%A4%E3%82%B9%E6%96%B9%E5%90%91%E3%81%A8Rebin%E3%81%AE%E6%95%B0%E3%82%92%E8%AA%BF%E6%95%B4%E3%81%A7%E3%81%8D%E3%82%8B%E3%80%82%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%60histo_skip%60%E3%81%A7%60numpy.histogram2d(...)%60%E3%82%92%E3%82%B9%E3%82%AD%E3%83%83%E3%83%97%E3%81%99%E3%82%8B%E3%81%8B%E3%82%92%E9%81%B8%E6%8A%9E%E5%8F%AF%E8%83%BD%E3%80%82%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20_fig.update_layout(height%3D500%2C%20width%3DGLOBAL_FIG_WIDTH%2C%20showlegend%3DTrue%2C%20title_text%3D%22Slice%20data%22)%0A%20%20%20%20%5D)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(GLOBAL_FIG_WIDTH%3A%20int%2C%20fig%2C%20mo)%3A%0A%20%20%20%20_output_path%20%3D%20molib.plot.save_fig_as_html(fig%2C%20'notebook%2Ffigs%2Fplot.html')%0A%20%20%20%20_output_html%20%3D%20molib.plot.load_html_as_str(_output_path)%0A%20%20%20%20_output_data%20%3D%20molib.plot.get_plotly_values_json(_output_html)%0A%20%20%20%20_output_valu%20%3D%20molib.plot.decode_typed_arrays(_output_data%5B0%5D%5B0%5D)%0A%0A%20%20%20%20_fig%20%3D%20make_subplots(rows%3D1%2C%20cols%3D1%2C%20vertical_spacing%3D0.15%2C%20horizontal_spacing%3D0.15%2C%20subplot_titles%3D(%5B%22Data%20extracted%20from%20HTML%22%5D))%0A%20%20%20%20molib.plot.add_sub_plot(%0A%20%20%20%20%20%20%20%20_fig%2C%201%2C%201%2C%20data%3D%5B_output_valu%5B'x'%5D%2C_output_valu%5B'y'%5D%5D%2C%20axes_title%3D%5Bf'Variable'%2C%20f'Value'%5D%2C%0A%20%20%20%20%20%20%20%20func%3Dmolib.plot.go_Scatter%2C%20y_error%3D%5B_output_valu%5B'error_y'%5D%5B'array'%5D%5D%2C%20dataname%3D'Data'%0A%20%20%20%20)%0A%0A%20%20%20%20mo.vstack(%5B%0A%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%23%23%23%20HTML%E3%81%8B%E3%82%89%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E4%BF%9D%E5%AD%98%E3%83%BB%E6%8A%BD%E5%87%BA%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%60plot.save_fig_as_html%60%E3%81%AB%E3%81%A6%E4%BF%9D%E5%AD%98%E5%8F%AF%E8%83%BD%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20%E7%AC%AC%E4%B8%80%E5%BC%95%E6%95%B0%E3%81%AB%60plotly.graph_objects.Figure%60%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E3%80%81%E7%AC%AC%E4%BA%8C%E5%BC%95%E6%95%B0%E3%81%AB%E3%83%91%E3%82%B9%E3%82%92%E6%8C%87%E5%AE%9A%E3%81%99%E3%82%8B%E3%81%93%E3%81%A8%E3%81%A7%E4%BF%9D%E5%AD%98%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20%E6%88%BB%E3%82%8A%E5%80%A4%E3%81%A8%E3%81%97%E3%81%A6%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E3%83%91%E3%82%B9%E3%81%8C%E8%BF%94%E3%81%A3%E3%81%A6%E3%81%8F%E3%82%8B%E3%80%82%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%60plot.load_html_as_str%60%E3%81%A7%E4%BF%9D%E5%AD%98%E3%81%97%E3%81%9FHTML%E3%82%92String%E5%9E%8B%E3%81%A8%E3%81%97%E3%81%A6%E5%8F%96%E5%BE%97%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%60plot.get_plotly_values_json%60%E3%81%8A%E3%82%88%E3%81%B3%60plot.decode_typed_arrays%60%E3%81%AB%E3%81%A6%E3%83%87%E3%83%BC%E3%82%BF%E3%82%92%E5%80%A4%E3%82%92%E5%8F%96%E5%BE%97%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20HTML%E4%BF%9D%E5%AD%98%E6%99%82%E3%81%AE%E4%BF%9D%E5%AD%98%E5%BD%A2%E5%BC%8F%E3%81%8C%E9%81%B8%E6%8A%9E%E4%B8%8D%E5%8F%AF%3A%20%E6%95%B0%E5%80%A4%E3%81%8C%E6%A0%BC%E7%B4%8D%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E5%A0%B4%E5%90%88%E3%81%AF%60plot.get_plotly_values_json%60%E3%81%AE%E3%81%BF%E3%81%A7%E3%82%88%E3%81%84%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20%E3%81%9D%E3%81%86%E3%81%A7%E3%81%AA%E3%81%84%E5%A0%B4%E5%90%88%E3%81%AF%60plot.get_plotly_values_json%60%E3%81%A7%E5%8F%96%E5%BE%97%E3%81%97%E3%81%9F%E8%BE%9E%E6%9B%B8%E3%81%BE%E3%81%9F%E3%81%AF%E3%82%BF%E3%83%97%E3%83%AB%E3%82%92%E5%BC%95%E6%95%B0%E3%81%AB%60plot.decode_typed_arrays%60%E3%81%AB%E6%B8%A1%E3%81%99%E3%80%82%20%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20mo.md(%22%E2%86%92%22%20%2B%20%22%20%22%20%2B%20%22x%5B0%3A5%5D%3A%22%20%2B%20%22%20%22%20%2B%20str(molib.plot.decode_typed_arrays(_output_valu%5B'x'%5D)%5B0%3A5%5D))%2C%0A%20%20%20%20%20%20%20%20mo.md(%22%E2%86%92%22%20%2B%20%22%20%22%20%2B%20%22y%5B0%3A5%5D%3A%22%20%2B%20%22%20%22%20%2B%20str(molib.plot.decode_typed_arrays(_output_valu%5B'y'%5D)%5B0%3A5%5D))%2C%0A%20%20%20%20%20%20%20%20_fig.update_layout(height%3D300%2C%20width%3DGLOBAL_FIG_WIDTH%2C%20showlegend%3DFalse%2C%20title_text%3D%22%22)%0A%20%20%20%20%5D)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(mo)%3A%0A%20%20%20%20csv_path%20%3D%20Path(%22notebook%2Fdata%2Fschedule.csv%22)%0A%0A%20%20%20%20if%20not%20csv_path.exists()%3A%0A%20%20%20%20%20%20%20%20csv_path%20%3D%20%22https%3A%2F%2Fraw.githubusercontent.com%2FFumiHubCNS%2Fmarimo-lib%2Fmain%2Fnotebook%2Fdata%2Fschedule.csv%22%0A%0A%20%20%20%20schedule%20%3D%20molib.schedule.init_schedule()%0A%0A%20%20%20%20molib.schedule.add_periodic_task(%0A%20%20%20%20%20%20%20%20data%3Dschedule%2C%0A%20%20%20%20%20%20%20%20task%3D%22%E6%9C%9D%E4%BC%9A%22%2C%0A%20%20%20%20%20%20%20%20start%3D%222025-10-01%2009%3A00%22%2C%0A%20%20%20%20%20%20%20%20end%3D%222025-10-03%2009%3A00%22%2C%0A%20%20%20%20%20%20%20%20resource%3D%22TeamA%22%2C%0A%20%20%20%20%20%20%20%20name%3D%22%E3%83%87%E3%82%A4%E3%83%AA%E3%83%BC%E3%82%B9%E3%82%BF%E3%83%B3%E3%83%89%E3%82%A2%E3%83%83%E3%83%97%22%2C%0A%20%20%20%20%20%20%20%20repeat_until%3D%222025-11-30%2023%3A59%22%2C%0A%20%20%20%20%20%20%20%20every%3D15%2C%0A%20%20%20%20%20%20%20%20unit%3D%22D%22%2C%0A%20%20%20%20%20%20%20%20seq_col%3D%22StandupNo%22%2C%0A%20%20%20%20%20%20%20%20owner%3D%22TeamA%22%2C%0A%20%20%20%20)%0A%0A%20%20%20%20molib.schedule.add_periodic_task(%0A%20%20%20%20%20%20%20%20data%3Dschedule%2C%0A%20%20%20%20%20%20%20%20task%3D%22%E9%80%B2%E6%8D%97%E4%BC%9A%E8%AD%B0%22%2C%0A%20%20%20%20%20%20%20%20start%3D%222025-10-03%2014%3A00%22%2C%0A%20%20%20%20%20%20%20%20end%3D%222025-10-03%2018%3A00%22%2C%0A%20%20%20%20%20%20%20%20resource%3D%22Meeting%22%2C%0A%20%20%20%20%20%20%20%20name%3D%22%E9%80%B1%E6%AC%A1%E9%80%B2%E6%8D%97%E4%BC%9A%E8%AD%B0%22%2C%0A%20%20%20%20%20%20%20%20repeat_until%3D%222025-11-30%2023%3A59%22%2C%0A%20%20%20%20%20%20%20%20every%3D7%2C%20%0A%20%20%20%20%20%20%20%20unit%3D%22D%22%2C%0A%20%20%20%20%20%20%20%20seq_col%3D%22WeeklyNo%22%2C%0A%20%20%20%20%20%20%20%20room%3D%22%E4%BC%9A%E8%AD%B0%E5%AE%A4A%22%2C%0A%20%20%20%20)%0A%0A%20%20%20%20molib.schedule.add_periodic_task(%0A%20%20%20%20%20%20%20%20data%3Dschedule%2C%0A%20%20%20%20%20%20%20%20task%3D%22%E7%9B%A3%E8%A6%96%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%22%2C%0A%20%20%20%20%20%20%20%20start%3D%222025-10-09%2012%3A00%22%2C%0A%20%20%20%20%20%20%20%20end%3D%222025-10-10%2012%3A00%22%2C%0A%20%20%20%20%20%20%20%20resource%3D%22Monitoring%22%2C%0A%20%20%20%20%20%20%20%20name%3D%22%E7%9B%A3%E8%A6%96%E3%83%81%E3%82%A7%E3%83%83%E3%82%AF%22%2C%0A%20%20%20%20%20%20%20%20repeat_until%3D%222025-11-30%2023%3A59%22%2C%0A%20%20%20%20%20%20%20%20every%3D14%2C%0A%20%20%20%20%20%20%20%20unit%3D%22D%22%2C%0A%20%20%20%20%20%20%20%20seq_col%3D%22MonCheckID%22%2C%0A%20%20%20%20)%0A%0A%20%20%20%20molib.schedule.add_task(%0A%20%20%20%20%20%20%20%20data%3Dschedule%2C%0A%20%20%20%20%20%20%20%20task%3D%22%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E4%BD%9C%E6%A5%AD%22%2C%0A%20%20%20%20%20%20%20%20start%3D%222025-10-01%2020%3A00%22%2C%0A%20%20%20%20%20%20%20%20end%3D%222025-10-06%2023%3A00%22%2C%0A%20%20%20%20%20%20%20%20resource%3D%22Release%22%2C%0A%20%20%20%20%20%20%20%20name%3D%22v1.0%20%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%22%2C%0A%20%20%20%20%20%20%20%20priority%3D1%2C%0A%20%20%20%20%20%20%20%20owner%3D%22ReleaseTeam%22%2C%0A%20%20%20%20)%0A%0A%20%20%20%20molib.schedule.add_task(%0A%20%20%20%20%20%20%20%20data%3Dschedule%2C%0A%20%20%20%20%20%20%20%20task%3D%22%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E4%BD%9C%E6%A5%AD%22%2C%0A%20%20%20%20%20%20%20%20start%3D%222025-10-30%2020%3A00%22%2C%0A%20%20%20%20%20%20%20%20end%3D%222025-11-08%2023%3A00%22%2C%0A%20%20%20%20%20%20%20%20resource%3D%22Release%22%2C%0A%20%20%20%20%20%20%20%20name%3D%22v1.1%20%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%22%2C%0A%20%20%20%20%20%20%20%20priority%3D1%2C%0A%20%20%20%20%20%20%20%20owner%3D%22ReleaseTeam%22%2C%0A%20%20%20%20)%0A%0A%20%20%20%20molib.schedule.add_task(%0A%20%20%20%20%20%20%20%20data%3Dschedule%2C%0A%20%20%20%20%20%20%20%20task%3D%22%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%E4%BD%9C%E6%A5%AD%22%2C%0A%20%20%20%20%20%20%20%20start%3D%222025-11-15%2020%3A00%22%2C%0A%20%20%20%20%20%20%20%20end%3D%222025-11-30%2023%3A00%22%2C%0A%20%20%20%20%20%20%20%20resource%3D%22Release%22%2C%0A%20%20%20%20%20%20%20%20name%3D%22v1.2%20%E3%83%AA%E3%83%AA%E3%83%BC%E3%82%B9%22%2C%0A%20%20%20%20%20%20%20%20priority%3D1%2C%0A%20%20%20%20%20%20%20%20owner%3D%22ReleaseTeam%22%2C%0A%20%20%20%20)%0A%0A%20%20%20%20molib.schedule.add_task_csv(%0A%20%20%20%20%20%20%20%20data%3Dschedule%2C%0A%20%20%20%20%20%20%20%20input_path%3Dcsv_path%2C%0A%20%20%20%20%20%20%20%20func_label%3D%22func%22%2C%0A%20%20%20%20)%0A%0A%20%20%20%20values%20%3D%20schedule%5B%22resource%22%5D.unique().tolist()%0A%0A%20%20%20%20mo.vstack(%5B%0A%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%23%23%20%60schedule.py%60%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E8%A1%A8%E7%A4%BA%E7%94%A8%E3%81%AE%E9%96%A2%E6%95%B0%E7%BE%A4%E3%80%82%0A%20%20%20%20%20%20%20%20%20%20%20%20%60molib.schedule.init_schedule%60%E3%81%A7%E5%88%9D%E6%9C%9F%E5%8C%96%EF%BC%88%E2%80%BB%E5%8D%98%E7%B4%94%E3%81%AB%E5%88%97%E3%81%AE%E3%81%BF%E3%81%AE%E3%81%8B%E3%82%89Dataframe%E3%82%92%E8%BF%94%E3%81%99%EF%BC%89%E3%80%82%0A%20%20%20%20%20%20%20%20%20%20%20%20%60add_task%60%E3%82%84%60add_periodic_task%60%E3%81%AA%E3%81%A9%E3%81%A7%60pandas.Dataframe%60%E3%81%AE%E3%82%BF%E3%82%B9%E3%82%AF%E7%BE%A4%E3%82%92%E7%94%9F%E6%88%90%E3%80%82%0A%20%20%20%20%20%20%20%20%20%20%20%20csv%E3%81%AB%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%82%92%E6%9B%B8%E3%81%84%E3%81%A6%E3%81%9D%E3%82%8C%E3%82%92%E8%AA%AD%E3%81%BF%E8%BE%BC%E3%82%80%E3%81%93%E3%81%A8%E3%82%82%E5%8F%AF%E8%83%BD%E3%80%82%60schedule.add_task_csv%60%E3%82%92%E4%BD%BF%E3%81%86%E3%80%82%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%60add_periodic_task%60%E3%81%AF%60add_task%60%E3%82%92%E5%91%A8%E6%9C%9F%E7%9A%84%E3%81%AB%E5%AE%9F%E8%A1%8C%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%60schedule.add_task_csv%60%E3%81%A7%E3%81%AFtask%E3%81%AE%E8%BF%BD%E5%8A%A0%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AB%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B%E9%96%A2%E6%95%B0%E3%82%92%E6%9B%B8%E3%81%8F%E5%88%97%E3%81%8C%E5%BF%85%E8%A6%81%E3%80%82%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%E3%83%99%E3%83%BC%E3%82%B9%E3%81%A8%E3%81%AA%E3%82%8B%E5%88%97%E3%81%AF%E3%81%82%E3%82%8B%E3%81%8C%E3%80%81%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E7%8B%AC%E8%87%AA%E3%81%AE%E5%88%97%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%A7%E3%81%8D%E3%82%8B%E3%82%88%E3%81%86%E3%81%AB%E3%81%AA%E3%81%A3%E3%81%A6%E3%81%84%E3%82%8B%E3%80%82%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20schedule.head(20)%0A%20%20%20%20%5D)%0A%20%20%20%20return%20schedule%2C%20values%0A%0A%0A%40app.cell%0Adef%20_(GLOBAL_FIG_WIDTH%3A%20int%2C%20mo%2C%20schedule%2C%20values)%3A%0A%20%20%20%20timeline_info%20%3D%20dict(%0A%20%20%20%20%20%20%20%20x_start%3D%22start%22%2C%0A%20%20%20%20%20%20%20%20x_end%3D%22end%22%2C%0A%20%20%20%20%20%20%20%20y%3D%22resource%22%2C%0A%20%20%20%20%20%20%20%20color%3D%22resource%22%2C%0A%20%20%20%20%20%20%20%20text%3D%22name%22%2C%0A%20%20%20%20)%0A%0A%20%20%20%20fill_palette%20%3D%20molib.schedule.get_color_list('tab10'%2C0.3)%0A%20%20%20%20edge_palette%20%3D%20molib.schedule.get_color_list('tab10'%2C0.9)%0A%0A%20%20%20%20fill_map%20%3D%20dict(zip(values%2C%20fill_palette))%0A%20%20%20%20edge_map%20%3D%20dict(zip(values%2C%20edge_palette))%0A%0A%20%20%20%20line_map%20%3D%20dict(color%3Dmolib.schedule.get_color_list('tokyo'%2C0.8)%5B0%5D%2C%20width%3D2%2C%20dash%3D%22dot%22)%0A%20%20%20%20taskname_map%20%3D%20dict(size%3D14%2C%20color%3D%22%23000000%22)%0A%0A%20%20%20%20%23%23%20%E6%8F%8F%E7%94%BB%E7%94%A8%E3%81%AB%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB%E3%82%92%E3%82%B7%E3%83%95%E3%83%88%E3%81%99%E3%82%8B%E3%80%82%0A%20%20%20%20cols%20%3D%20%5B%22start%22%2C%20%22end%22%5D%0A%0A%20%20%20%20for%20col%20in%20cols%3A%0A%20%20%20%20%20%20%20%20s%20%3D%20pd.to_datetime(schedule%5Bcol%5D%2C%20errors%3D%22coerce%22)%0A%20%20%20%20%20%20%20%20med%20%3D%20s.median()%0A%0A%20%20%20%20%20%20%20%20target%20%3D%20pd.Timestamp.today().normalize()%20%2B%20(med%20-%20med.normalize())%0A%20%20%20%20%20%20%20%20delta%20%3D%20target%20-%20med%0A%0A%20%20%20%20%20%20%20%20schedule%5Bcol%5D%20%3D%20s%20%2B%20delta%0A%20%20%20%20%20%20%20%20schedule%5Bcol%5D%20%3D%20pd.to_datetime(schedule%5Bcol%5D).dt.strftime(%22%25Y-%25m-%25d%20%25H%3A%25M%22)%0A%0A%0A%20%20%20%20_fig%20%3D%20make_subplots(rows%3D1%2C%20cols%3D1%2C%20vertical_spacing%3D0.15%2C%20horizontal_spacing%3D0.15%2C%20subplot_titles%3D(%5B%22%22%5D))%0A%0A%20%20%20%20molib.schedule.add_schedule(%0A%20%20%20%20%20%20%20%20fig%20%3D%20_fig%2C%0A%20%20%20%20%20%20%20%20data%20%3D%20schedule%2C%0A%20%20%20%20%20%20%20%20timeline_info%20%3D%20timeline_info%2C%0A%20%20%20%20%20%20%20%20taskname_info%20%3D%20taskname_map%2C%0A%20%20%20%20%20%20%20%20color_discrete_map%20%3D%20fill_map%2C%0A%20%20%20%20%20%20%20%20edge_color_map%20%3D%20edge_map%2C%0A%20%20%20%20%20%20%20%20line_info%20%3Dline_map%2C%0A%20%20%20%20%20%20%20%20irow%20%3D%201%2C%0A%20%20%20%20%20%20%20%20icol%20%3D%201%0A%20%20%20%20)%0A%0A%20%20%20%20mo.vstack(%5B%0A%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%23%23%23%20%E3%82%AB%E3%83%AC%E3%83%B3%E3%83%80%E3%83%BC%E3%81%AE%E4%B8%80%E4%BE%8B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%60plotly%60%E3%81%AB%E3%81%AF%E3%82%AC%E3%83%B3%E3%83%88%E3%83%81%E3%83%A3%E3%83%BC%E3%83%88%E7%94%A8%E9%96%A2%E6%95%B0%E3%81%8C%E3%81%82%E3%82%8B%E3%81%8C%E9%9D%9E%E5%B8%B8%E3%81%AB%E4%BD%BF%E3%81%84%E3%81%AB%E3%81%8F%E3%81%84%E3%80%82%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20%60plotly.express.timeline()%60%E3%81%A7%60Figure%60%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%82%BF%E3%83%B3%E3%82%B9%E7%94%9F%E6%88%90%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20%60add_trace()%60%E3%81%A7%E8%BF%BD%E5%8A%A0%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20-%20%60marimo_lib.plot%60%E3%81%AE%E9%96%A2%E6%95%B0%E3%81%A7%E3%82%88%E3%81%8F%E4%BD%BF%E3%82%8F%E3%82%8C%E3%82%8B%60plotly.graph_objects.Figure%60%E3%81%AB%E5%AF%BE%E5%BF%9C%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%60timeline_info%60%E3%81%A7%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%E3%82%BF%E3%82%B9%E3%82%AF%E3%81%AE%E3%82%B0%E3%83%AB%E3%83%BC%E3%83%97%E3%82%84%E3%82%AC%E3%83%B3%E3%83%88%E3%83%81%E3%83%A3%E3%83%BC%E3%83%88%E3%81%AE%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88%E3%81%AA%E3%81%A9%E3%82%92%E5%A4%89%E6%9B%B4%E3%81%A7%E3%81%8D%E3%82%8B%E3%80%82%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%60fill_map%60%2C%20%60edge_map%60%2C%20%60line_map%60%2C%20%60taskname_map%60%E3%81%AA%E3%81%A9%E3%81%A7%E8%B2%A0%E8%8D%B7%E6%83%85%E5%A0%B1%E3%82%92%E4%BB%98%E4%B8%8E%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20_fig.update_layout(height%3D500%2C%20width%3DGLOBAL_FIG_WIDTH%2C%20showlegend%3DFalse%2C%20title_text%3D'')%0A%20%20%20%20%5D)%0A%20%20%20%20return%0A%0A%0A%40app.cell%0Adef%20_(GLOBAL_FIG_WIDTH%3A%20int%2C%20mo)%3A%0A%20%20%20%20widget_ex%20%3D%20molib.excalidraw.ExcalidrawWidget(width%3Dint(GLOBAL_FIG_WIDTH)%2C%20height%3D600)%0A%0A%20%20%20%20mo.vstack(%5B%0A%20%20%20%20%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%23%23%20Draw.io%20like%E3%81%AA%E3%81%8A%E7%B5%B5%E6%8F%8F%E3%81%8D%E3%83%84%E3%83%BC%E3%83%AB%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%E3%82%B9%E3%83%A9%E3%82%A4%E3%83%89%E3%82%84%E8%AD%B0%E4%BA%8B%E9%8C%B2%E7%94%A8%E3%83%8E%E3%83%BC%E3%83%88%E3%81%A8%E3%81%97%E3%81%A6GUI%E4%B8%8A%E3%81%A7%E5%9B%B3%E5%BD%A2%E3%82%92%E9%85%8D%E7%BD%AE%E3%81%97%E3%81%9F%E3%82%8A%E3%80%81%E6%96%87%E5%AD%97%E6%9B%B8%E3%81%84%E3%81%9F%E3%82%8A%E3%81%99%E3%82%8B%E3%81%AE%E3%81%AF%E9%87%8D%E8%A6%81%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20Draw.io%E3%81%8C%E3%81%82%E3%82%8B%E3%81%A8%E8%89%AF%E3%81%84%E3%81%8C%E5%AF%BE%E5%BF%9C%E3%81%97%E3%81%A6%E3%81%84%E3%81%AA%E3%81%84%E3%80%82%0A%20%20%20%20%20%20%20%20%20%20%20%20-%20%60excalidraw%60%E3%81%AF%E5%AF%BE%E5%BF%9C%E3%81%95%E3%81%9B%E3%81%9F%0A%20%20%20%20%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20%20%20%20%20)%2C%0A%20%20%20%20%20%20%20%20widget_ex%0A%20%20%20%20%5D)%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
dc7239475fc1750b22e15cc6a2e4ce0f